
ZEDBOARD+AD9361
mcupro
这个作者很懒,什么都没留下…
展开
-
ZEDBOARD开发板教程:移植ZED+AD9361到SDK与单音回环测试
将SD卡插入开发板,并将开发板的启动模式设置为SD卡启动,插入电源和串口。如下图所示,是我们将ZED+AD9361移植到SDK中的项目,可以在Windows或Linux环境下使用SDK直接修改编译。从vivado设计图中可以看出,我们的ZED开发板使用ADI官方的驱动程无需任何修改,与官方全兼容直接使用即可。我们可以在此基础上添加单音回环程序,编译运行,运行结果如下图所示。本例程演示使用ZED开发板加AD9361射频子板,运行ADI官方例程HDL加NO-OS。ZED+AD9361移植到SD中的项目。原创 2024-12-10 10:09:42 · 465 阅读 · 0 评论 -
国产CPLD中AG1280Q48进行开发的实践之一:思路分析
FPGA开发软件大约的工作流程是这样的:步骤1,首先将我们的VERILOG代码进行分析编译成基本的LUT表和寄存器,虽然是相同的LUT表,但是给内部赋予不同初始数值就可以实现不同功能。如果用到了其他内部硬核比如PLL,DSP,RAM需要进行实例化。这一步骤的结果我们成为网表(NETLIST)。步骤2,NETLIST里面就好像一个原理图结合PCB库导入到PCB文件里,接下来要进行布局和布线,将原件放在实际的位置上,生成对每个FPGA/CPLD内部连接的开关以及LUT的初始化文件。这一步可以叫做布局布线.原创 2022-06-09 12:04:25 · 6251 阅读 · 3 评论 -
16位片内地址的I2C SLAVE接口设计
15位片内地址的I2C SLAVE接口设计原创 2022-06-02 00:47:12 · 1323 阅读 · 0 评论 -
GIT上手实践笔记之2 基本的文件上传
上一篇BLOG主要设置KEY并获取了TOKEN。其中KEY是我们GIT客户端生成的拷贝到GITHUB页面上,而KOTEN是相当于一组授权码,是GITHUB生成的,拷贝下来保存待对远程库进行操作时候使用。首先在git的命令行输入 h...原创 2022-04-27 22:52:50 · 262 阅读 · 0 评论 -
GIT上手实践笔记之1 软件安装以及环境配置
很早之前就在GITHUB上注册了mcupro这个账号,当时不会用git命令就直接在网页上上传文件。近期注册了HexSDR这个账号打算好好搞搞,学会使用git命令行长传和管理文件。高楼万丈平地起,我循序渐进的学习,打算做一系列笔记,记录总结并和大家分享。1,首先注册一个github的账号,在gtihub.com上点击sign up,使用邮箱就可以注册一个,我注册是的是HexSDR。2,如果使用ubuntu系统,可以安装git。我也用win系统,在win下有个git for win的工具,跟linux下原创 2022-04-27 00:23:37 · 245 阅读 · 0 评论 -
12位符号数转归一化float的实现
AD9361输出基带的12位数,表示范围是【-2048,2047】,我们现在要转成【-1,1】范围的浮点数。最简答的实现方式就是用查表的方法。我们先用以下代码做一个表格数组:int main (){int i , j = 0;float f ;for(i=-2048;i<=2047;++i) {f = (float )i/2048 ;printf("%f," , f);j++;if (j==16) { j=0;printf("\n");}} }从上面代码看我...原创 2022-03-30 00:37:45 · 650 阅读 · 0 评论 -
支持多线程的FIFO实现
支持多线程的FIFO实现#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <unistd.h>#include <pthread.h> #include "thread_safe_fifo.h"#define MAX_BIT 8#define MAX_SIZE (1<<MAX_BIT) #define CH_SIZE 4..原创 2022-03-23 07:26:13 · 440 阅读 · 0 评论 -
一个DC FIFO的仿真实验
咱们FPGA里面开发遇到FIFO一般分单时钟和双时钟FIFO,双时钟FIFO是读写各自不同的时钟。由于时钟相位频率关系不可预知,所有也有人叫做异步FIFO。真正的异步FIFO不是这样,是没有时钟的,写入信号通过写信号的上升边缘实现,类似早期的asram。双时钟FIFO的实现有两大重点:使用格雷码,跨域时钟域要打两个拍子。这其实不就是CDC的基本原则嘛。格雷码能保证多位中每次只有一个BIT发生变化,打两个拍子能防止亚稳态。这样能将跨越时钟的数据出错概率降到最低。这两个重点主要是用在信号传递部分,而具体的数原创 2021-12-10 10:35:18 · 1169 阅读 · 0 评论 -
在仿真环境使用两个UDP实体实现全栈仿真的方法:实验设置
书接上篇。这个仿真第一个实验就是要做实体A发送数据给实体B,顶层的verilog代码如下:module tb_top ; wire [31:0]my_a_ip ={8'd192,8'd168,8'd0,8'HAA} ;wire [47:0]my_a_mac =48'HA1A2A3A4A5A6;wire [31:0]my_a_udp_port = 'h1234 ;wire [31:0]my_b_ip ={8'd192,8'd168,8'd0,8'HBB} ;wire [47:0]my原创 2021-12-09 07:06:10 · 766 阅读 · 0 评论 -
在仿真环境使用两个UDP实体实现全栈仿真的方法:总体简介
写代码比较容易,稍微难点的是写注释和细节介绍,再难点的是写介绍文档(比我blog的文章,要简介明了还要争取面面俱到),最难就是写这BLOG文章的题目,题目看上去要像个题目,还要能简单概括,让知道你要写什么,还要重点突出。不过一种情况下题目是不重要的,就是认证的阅读完全文就是知道我到底想要墨迹什么了。既然说到题目就围绕题目展开:”在仿真环境使用两个UDP实体实现全栈仿真的方法“这里说的仿真环境是icarvous verilog,使用的代码开发环境前期是notepad++写好每一个模块,后面使用qu原创 2021-12-09 06:47:32 · 308 阅读 · 0 评论 -
UDP发送部分的模块组装在一起
之前写好了UDP ,IP ARP,MAC,ETHER层的各个发送和接收,今天时间有限之做了一件事,就是将发射部分拼装起来了。方框图如下:这里简单说说我的思路,按照实际场景来说明:0,如果我们的MAC接收到一个发给我们IP的ARP_REQUEST包,则要做两件事A,保存目标IP地址和物理地址到ARP_CACHE(这样我们发给他IP包时候就不需要询问他的物理地址了),B,返回一个ARP_REQPLY让对方知道我们的物理地址。这里说的物理地址就是48位MAC地址。1,上述这条实际...原创 2021-12-07 20:20:14 · 898 阅读 · 0 评论 -
生成arp报文的verilog实现
刚刚对照着wirsharp写了arp报文生成的verilog代码。下面16进值每个字节,都会在对应的解析里面高亮说明意思。另外我说,三屏幕的工作效率太高了。原谅我写的代码每行比较长,因为我写代码用的扁宽的带鱼屏。/*arp_gen arp_gen (.clk ( ), .rst( ) ,.s_valid( ),.s_ready( ),.my_ip( ),.dst_ip( ),.my_mac( ),.dst_mac( ),.req0_rep1( ) ...原创 2021-12-06 20:08:20 · 1124 阅读 · 4 评论 -
MAC层接收并处理ARP地址请求的实现代码
刚刚写了一部分代码,对接收到的数据进行解析,现在只写对ARP的判断,代码如下:module mac_rx_tb ; reg rst = 0 ,clk = 0 ;always #5 clk = ~clk ;integer i;initial begin $dumpfile("mac_rx_tb.vcd");$dumpvars;rst = 1;@(posedge clk) ;@(posedge clk) ;rst = 0; @(posedge clk) ;for(i=原创 2021-12-06 16:04:51 · 488 阅读 · 0 评论 -
以太网PHY->MAC接收代码的实现
今早写了从gmii接收到字节,去掉前导字节和起始字节,以及校验得到mac层数据流,并校验crc输出指示此帧是否有错。实现代码如下: /* ether_rx ether_rx ( .clk( ) , .rst( ) , .phy_din( ) , .phy_dv( ), .sof( ), .eof( ), .crc_err( ), .valid( ), .dout( ) );*/module ether_rx (input clk , ..原创 2021-12-06 07:26:15 · 903 阅读 · 0 评论 -
UDP-IP-MAC-PHY发送部分仿真实验完毕
今天写是写UDP网络实现的第三天,事情很多,穿插着写的调试的。现在实现了UDP-IP-MAC-PHY的打包过程,关于CHECK SUM以及CRC校验的生成也都完全实现了。这里非常感谢www.fpga4fun.com这个网站,我进行前仿真需要生成可以参考的数据包进行校验。正好这个网站提供了这个工具https://www.fpga4fun.com/files/EthernetUDP.zip并带有所有delphi源码,算法是pascal实现的,我对pascal很熟悉,直接用那些代码确认了我以前模棱两可的知识点原创 2021-12-05 23:00:52 · 872 阅读 · 0 评论 -
check sum 的C和VERILOG实现方式
在LWIP协议栈的inet_chksum.c文件里面提供了三种check sum的代码,我直接全部贴出这个文件如下:/** * @file * Incluse internet checksum functions.\n * * These are some reference implementations of the checksum algorithm, with the * aim of being simple, correct and fully portable. Che..原创 2021-12-05 06:35:45 · 2418 阅读 · 0 评论 -
以太网通讯MAC层的CRC校验
`timescale 1ns / 1psmodule crc (Clk, Reset, Data_in, Enable, Crc,CrcNext);parameter Tp = 1;input Clk;input Reset;input [7:0] Data_in;input Enable;output [31:0] Crc;reg [31:0] Crc;output [31:0] CrcNext;wire [7:0] Data;assign Data={Data_i...原创 2021-12-04 16:30:59 · 5654 阅读 · 0 评论 -
关于UDP的VERILOG实现的功能以及总体架构
预计设计实现功能:1,支持ARP主动发起。2,支持ARP回应。3,支持PING回应,不支持IP分包。4,支持UDP主动发起。5,支持UDP接收。6,尽量少的延迟。7,尽量少的时间开销。8,接口明确清晰。设计的总体架构:A,发送部分,下面生成的包都是直接转给MAC层(其中ARP_REQ比较特殊,注意一下目标MAC的处理)。1,UDP_IP_TX : 模块直接目的IP和端口本地IP和端口生成数据报,直接转给MAC层发出。2,ARP_REQ:生成询问对方MAC地原创 2021-12-03 17:37:40 · 698 阅读 · 0 评论 -
以太网帧MAC层组包的分析和VERILOG实现(未完)
参考文档:以太网数据帧格式(结构)图解原创 2021-12-03 17:08:12 · 1222 阅读 · 0 评论 -
ICMP的分析和VERILOG实现
参考文档:IP报文及ICMP报文结构原理 - xss - 博客园这里实现ICMP主要是为了响应PING命令。并不会主动发出PING命令。、//定义ICMP首部typedef struct _icmphdr{unsigned char i_type; //8位类型unsigned char i_code; //8位代码unsigned short i_cksum; //16位校验和, 从TYPE开始,直到最后一位用户数据,如果为字节数为奇数则补充一位unsigned short i_i原创 2021-12-03 17:01:44 · 896 阅读 · 0 评论 -
ARP包的结构以及实现代码
参考文档:ARP报文格式详解ARP 报文总长度为 28 字节,MAC 地址长度为 6 字节,IP 地址长度为 4 字节。其中,每个字段的含义如下。硬件类型:指明了发送方想知道的硬件接口类型,以太网的值为 1。协议类型:表示要映射的协议地址类型。它的值为 0x0800,表示 IP 地址。硬件地址长度和协议长度:分别指出硬件地址和协议的长度,以字节为单位。对于以太网上 IP 地址的ARP请求或应答来说,它们的值分别为 6 和 4。操作类型:用来表示这个报文的类型,ARP 请求为 ...原创 2021-12-03 16:55:20 · 860 阅读 · 0 评论 -
XILINX的PCIE实现分析:LINUX下PCIE对应文件的介绍和使用
前几天实验了一下XILINX官方的提供的在UBUNTU平台下的PCIE驱动,以下文字做个简单记录和总结。时间有限简单写写,可能以后有补充。1,在LINUX下安装驱动后在/dev/目录里面多了十多个xdma0_开头的设备。设备一:xdma0_c2h_0设备:xdma0_c2h_0 是一个只读设备,用open函数打开后直接调用read函数进行读,如果FPGA段接的不是AXI STREAM,而是带有地址的AXI 接口,可以调用seek函数进行起始地址的指定。操作完毕后关闭文件用close函数。以下代码原创 2021-12-02 06:59:00 · 7489 阅读 · 4 评论 -
可寻址配置的寄存器代码
可寻址配置的寄存器代码,是openofdm里面的文件,是ettus写的。//// Copyright 2011 Ettus Research LLC//// This program is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundatio原创 2021-11-18 15:40:50 · 438 阅读 · 0 评论 -
VIVADO的.XCI文件探索之一:创建XCI文件
VIVADO使用XCI文件来标识一个软件自带IP以及设置信息。我猜测XCI应该是Xlinx Core Interface的意思。建立XCI文件步骤:A,打开或者创建一个新的VIVADO项目,注意选择想要的器件。B,按照下图,点IP CATALOG之后搜索想要的IP名字,双击想要的IP。C,双击后进入参数设置界面,设置一下名称,配置一下参数。D,保存后生成。这时候在项目目录里面的.srcs\sources_1\ip\目录下面可以找到刚才生成的IP项目和.XCI文件...原创 2021-11-10 05:20:58 · 7773 阅读 · 0 评论 -
做一个2ASK试验 之一
2ASK调试模式比较简单,就是用有信号和没有信号来表示0,1。现在问题就是如何从基带层面判断一个信号是有还是没有。当然是通过幅度。我们做一个模块算出波谷的绝对值,和波峰相加就得到了幅度。之后设置两个阈值,大于这个阈值1就认为是数值1,小于阈值0就认为是数值0,而在0,1之间的就保持之前的数值状态。module amp_cal(input clk ,input [11:0] adc_va...原创 2020-03-03 01:34:03 · 629 阅读 · 0 评论 -
一个非常棒的CDC实现方法
//// Copyright 2014 Ettus Research LLC// Copyright 2018 Ettus Research, a National Instruments Company//// SPDX-License-Identifier: LGPL-3.0-or-later//module synchronizer #( parameter WI...原创 2020-02-25 01:36:10 · 785 阅读 · 1 评论 -
AD9361 自检功能所采用的数据
输出TONE数据时候正交的两路如下: 0,-1024,391,-946,724,-725,946,-392,1023,0,946,391,724,724,391,946,0,1023,-392,946,-725,724,-946,391,-1024,0,-946,-392,-725,-725,-392,-946,0,-1024, // 依次循环以上是I...原创 2020-02-10 03:09:02 · 2372 阅读 · 2 评论 -
替换掉NO_OS逻辑和代码中的SPI部分
在纯粹逻辑的配置中我写一个外设,进行SPI接口的读写。几乎是跟AD9361定制的SPI接口:发送三个字节,接收到一个字节。这个小控制器为了简单,只实现对一个AD9361寄存器的读写。我打算将这个一直到NO-OS那套软件硬件代码里面这样减少对ZYNQ硬件外设的依赖,使得这套C代码更容易移植。关于AD9361中SPI的时序,在接口手册上明确写了,并给出了波形和时序。这里贴出来部分这个控制器...原创 2020-02-08 23:04:18 · 1614 阅读 · 2 评论 -
生成SIN波形的一个小工具
#include<stdio.h>#include<math.h>//要用到的sin和cos在这个头文件里 int main(){ int n; int factor = 4096/2 ; float _sin,_cos ; short is,ic; double pi=acos(-1.0); for(n=0;n...原创 2019-12-27 11:58:08 · 2288 阅读 · 0 评论