![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
软件无线电
mcupro
这个作者很懒,什么都没留下…
展开
-
PCIE的AXI LITE MASTER端使用
思路就是用XILINX提供的XDMA的PCIE核,用AXIS_MASTER和AXIS_SLAVE 接口实现数据流接驳AD9361的数据口,使用PCIE核提供的AXI_LITE_MASTER控制若干需要的AXI_LITE外设。这里我们看到使用了mmap函数,首先获取_user文件的基本虚拟地址,之后再加上图ADDERESS EDITER里面列的偏移地址,就是AXI_LITE_SALVE的REG0地址,当然REGn的话只需要在这个偏移量基础上加4*n就可以。运行后显示OK,试验成功。原创 2023-03-20 23:39:23 · 1214 阅读 · 0 评论 -
ZC706P+ADRV9009连接RADIOVERSE详解之三
打开软件界面我们看到,板子默认的地址为192.168.1.10 端口号为55555.我们一定也设置跟板子连接的以太网口处于192.168.1网段,并且子网掩码是255.255.255.0,另外也可以先暂时关闭掉其他网络接口,比如无线网卡等。之后会有更新进度条,大约几十秒后,会提示板子将从新启动,我们再次等待板子的LD0~LD3闪烁完毕,板子能ping通状态下,就可以再次connect. 再次强调每个SD卡只需这样更新一次。对这个软件的进一步的操作,我们尝试在接下来的blog继续探究。步骤3 :更新固件。原创 2023-01-01 20:08:41 · 1090 阅读 · 2 评论 -
ZC706P+ADRV9009连接RADIOVERSE详解之二
如果这里出现一堆内存错误提示,应该是SD卡没有做好,尝试用另外一个新的SD卡从新做烧写启动映像。(因为这种内存写卡是基于物理层扇区而不是基于文件系统,所以无法规避SD卡的坏块,存在写不成功的可能)。5,30.72M的外接参考时钟(不需要专门的高精度时钟,可以临时使用一个有源晶振搭一个)。阶段2:几十秒钟后LD10亮,表明SD卡配置信息已经被加载,PL配置完毕。阶段4:LD0 ~ LD3 不再亮,此时板子已经就绪可以通过网线连接了。2,上一篇文章中做好的SD卡。7,设置为SD卡启动方式。原创 2023-01-01 20:07:13 · 1000 阅读 · 0 评论 -
ZC706P+ADRV9009连接RADIOVERSE详解之一
其中ADRV9371-SDCARD内有1G多,是一个SD卡映像文件,内有EXT4和FAT32两个文件系统,我们将此映像烧写到SD卡(具体步骤下面介绍)之后,再将ADRV9009这个盘压缩包(只有若干启动文件,无EXT4文件系统)拷贝到烧写好的SD卡的FAT32分区覆盖之前ADRV9371启动盘的内容就可以。之后使用WIN32 DISK IMAGER,找到解压缩的IMG文件,之后点WRITE ,用这个工具烧写ADRV9371的映像文件。3,用SD卡映像打包软件从新生成IMG文件,之后压缩,上传网盘供下载。原创 2023-01-01 20:05:08 · 1540 阅读 · 0 评论 -
lmx2594的verilog驱动
应朋友请求写了一个纯VERILOG的LMX2594的配置。下面是顺便写的lmx2582的驱动。都是一个套路生成的代码。原创 2022-12-22 19:15:02 · 1800 阅读 · 4 评论 -
CDCM61002的原理图以及实测
实验一下CDCM61002的频率输出原创 2022-10-08 17:16:10 · 998 阅读 · 0 评论 -
验证ZC706Pro的10G光口
验证ZC706PRO的光口原创 2022-10-08 16:29:27 · 385 阅读 · 0 评论 -
基于sdrpi的openwifi实践6:sdrpi实现无线路由器
我们这个blog要实现一个路由器功能,就是接入openwifi的手机可以通过openwifi来上网。原创 2022-09-23 17:13:15 · 1732 阅读 · 1 评论 -
sdrpi兼容pluto模式下的实践1:安装pluto的支持库
sdrpi作为pluto兼容外设要在gnuradio里面使用是需要安装一些支持包,这篇博客咱们在已经装好gunraio3.8的基础上安装这些支持包。原创 2022-09-23 15:59:30 · 703 阅读 · 0 评论 -
基于sdrpi的openwifi实践5:启动openwifi开始实验
之前四个实践我们生成了所需要的文件并做好了SD卡,这里我们开始实际运行openwifi.原创 2022-09-22 16:49:09 · 2208 阅读 · 1 评论 -
基于sdrpi的openwifi实践4:制作openwifi的启动盘
这个博客我们制作openwifi的启动盘,并将上几个实践中由源码编译生成的文件更新到这个启动盘里面,进行实际的运行。原创 2022-09-22 12:00:11 · 1129 阅读 · 1 评论 -
基于sdrpi的openwifi实践3:生成BOOT.BIN
这篇blog我们使用实践1中生成的.BIT文件和ZYNZ_FSBL.ELF文件来生成BOOT.BIN文件。我们知道生成BOOT.BIN要包含三个内容:FSBL配置文件,BIT流文件,用户程序或者UBOOT启动代码,这里因为要引导LINUX因此是UBOOT。原创 2022-09-21 14:04:32 · 1344 阅读 · 2 评论 -
基于sdrpi的openwifi实践2:编译openwifi的内核和驱动
openwifi用到了linux内核,是一个比较完整的嵌入式linux系统。这里还是需要用到装好vivado2018.3的ubuntu系统(虚拟机也可)。因为openwifi作者已经做好了很方便的脚本,所以我们操作的步骤也是非常简单。原创 2022-09-20 15:20:27 · 2490 阅读 · 0 评论 -
基于sdrpi的openwifi实践1:编译openwifi-hw
下面文字我就按照openwifi-hw的README步骤详细走一遍,每步都有截图和大家对照分享。原创 2022-09-20 14:46:16 · 3473 阅读 · 3 评论 -
OPENWIFI实践1:下载并编译SDRPi的HDL源码
OPENWIFI实践1:下载并编译SDRPI的HDL源码原创 2022-07-31 12:35:04 · 1825 阅读 · 1 评论 -
国产CPLD中AG1280Q48进行开发的实践之一:思路分析
FPGA开发软件大约的工作流程是这样的:步骤1,首先将我们的VERILOG代码进行分析编译成基本的LUT表和寄存器,虽然是相同的LUT表,但是给内部赋予不同初始数值就可以实现不同功能。如果用到了其他内部硬核比如PLL,DSP,RAM需要进行实例化。这一步骤的结果我们成为网表(NETLIST)。步骤2,NETLIST里面就好像一个原理图结合PCB库导入到PCB文件里,接下来要进行布局和布线,将原件放在实际的位置上,生成对每个FPGA/CPLD内部连接的开关以及LUT的初始化文件。这一步可以叫做布局布线.原创 2022-06-09 12:04:25 · 5838 阅读 · 3 评论 -
16位片内地址的I2C SLAVE接口设计
15位片内地址的I2C SLAVE接口设计原创 2022-06-02 00:47:12 · 1228 阅读 · 0 评论 -
2022年新版openwifi学习试验之1:编译基于zedboard+fmcomms3的HDL项目生成BIT文件
2022年四月左右,openwifi进行了大的改版,发布了新的版本。这篇BLOG我根据openwifi官方的步骤,实现一下zedboard_fmcomms3平台下的软件编译。本BLOG就是我学习试验https://github.com/open-sdr/openwifi-hw这个页面中讲述的步骤,也是笔记,边做边记录,给大家分享可以让大家少走弯路。步骤1 :需要的软件: Pre-conditions: Xilinx Vivado (with SDK and HLS) 20.原创 2022-05-10 12:21:13 · 5136 阅读 · 7 评论 -
使用在线路线逻辑分析仪ILA调试模块的小技巧
在CSDN这个BLOG中我详细给出了如何在VIVADO中插入在线逻辑分析仪进行信号获取。这里再记录一下自己用的一个小技巧:实例化一个统一的多款口大位宽的ILA,在多处使用。我们在一个模块内插入ILA要测试的端口数和位宽都不一样,根据每个需求做生成一个ILA显然工作量有点大,也生成了那么多ILA只用一次调试完就丢弃的化,项目文件也就比较乱了。我们可以先实例化一个多个端口,比方说16个端口,在模块中最大的寄存器是64BIT,我们就实例化一个16个端口,每个端口都是64位的ILA,如下图实际使用时候.原创 2022-05-08 13:26:59 · 1023 阅读 · 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 · 386 阅读 · 0 评论 -
LINUX 下通过UDP端口发送命令以及接收反馈的代码
#include <stdio.h>#include <sys/types.h> #include <sys/socket.h>#include <string.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h>#include <stdl...原创 2022-03-22 23:30:37 · 1186 阅读 · 0 评论 -
LINUX 下进行UDP收发的C代码
#include <stdio.h>#include <sys/types.h> #include <sys/socket.h>#include <string.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h>#include <stdl...原创 2022-03-22 22:32:10 · 1122 阅读 · 0 评论 -
仿真测试一个2路、4路IQ数据转成字节流的模块
代码前几天写好的,今天打算上VIVADO实际试验了,觉得没仿真不踏实,就仿真一把。模块代码如下:将4路(可以通过使能控制是使用2路)的12位从AD9361采集到的原始数据转换成字节流(用以发送给后续的FPGA实现的千兆以太网)。module IQ2FIFO(input clk,rst,input en,a_valid,b_valid,input [11:0] d0,d1,d2,d3,output reg rd_ab_io,input wr_full, // when first f原创 2022-03-22 12:11:50 · 590 阅读 · 1 评论 -
关于K7中是否每一组MGT接口都可以接10G SFP的试验
在做新的一版SDR平台时候有一个疑问就是,就是关于K7高速口的分配,要用到6组高速口接SFP,其中QSFP占用4对,单路SFP两个占用两对。这些高速对是否可以任意分配到高速口上呢,这就是接下来试验要解决的问题。首先从已经有的经验,之前做PCIEX4时候那高速线是可以任意成组分配的。一成组分配我们说的意思是,比如tx1_p,tx1_n,rx1_p,rx1_n这四根信号线可以对应的跟tx2_p,tx2_n,rx2_p,rx2_n一一交换,并且一交换就要交换四根(交换四根肯定可以,但不太确定只交换tx或者rx原创 2022-01-26 18:04:09 · 1668 阅读 · 0 评论 -
GNURADIO中USRP组件的介绍
GNURADIO中USRP组件的介绍1,搜索组件USRP,可以看到SOURCE 和SINK组件。我们放置source和sink,之后数据段口链接起来。双击USRP_SOURCE看设置:这里我们看到有很多参数可以设置,这些参数都是传递给UHD的。一个一个看:OUTPUT TYPE : 输出类型,COMPLEX 是复数的意思,实际包含实部和虚部。我们一般选的是COMPLEX FLAOT32。...原创 2022-01-26 07:15:17 · 4761 阅读 · 3 评论 -
无中频软件无线电芯片AD9361的基本介绍
AD9361在咱们产品中的很多,这也是一个很典型软件无线电芯片架构。我们在这里从软件角度简单介绍一下:抛弃硬件细节,对于我们软件程序员来说面对的只有两个通路:数据通路和控制通路。先说控制通路,通过SPI读写AD9361的寄存器实现对芯片的控制,在实际实现时候官方给出了C函数直接调用,比如设置射频频率为2.4G我们之需要调用函数set_rf_frqunce(2.4E9),之后函数根据2.4E9计算出所需要的各个寄存器的数值,之后通过SPI口打下去给AD9361。这样下来就咱们虽然可以通过.原创 2022-01-26 07:07:46 · 9904 阅读 · 3 评论 -
二进值bin文件转mcs文件的小工具
INTEL的.HEX文件只能表示小于64K字节的文件,XILINX 的.MCS文件在此基础上,每64K字节加入了一个起始地址,就能表示高达64K*64K的文件了。下面代码是生成的代码: static void show_a_seg(){ unsigned char b[] = { 0x02,0x00,0x00,0x04,0x00,0x00,0x00 }; static unsigned char b4 = 0 ,b5 = 0 ; unsigned char b...原创 2022-01-24 11:01:45 · 6577 阅读 · 0 评论 -
TPS7A8300画了一个简单的转接板
TPS7A8300有5X5MM和3.5X3.5MM两个封装,我囤了一些5X5MM封装的,但是做一个12层射频板子时候PCB封装化成了3.5X3.5MM的。3.5X3.5MM封装的价格已经涨到天上去了,并且样板要用20多个,所以打算自己做一个小板子,飞线到电路上替代3.5X3.5MM的芯片,想试验通过,正式量产再改封装。这里20K电阻数值实际是0R,通过焊和不焊确定电压数值,另外R1 R3数值也不是实际数值,要根据所需要电压进行计算。详细可以看TPS7A8300的数据手册。...原创 2022-01-11 20:59:01 · 1417 阅读 · 3 评论 -
10G光口UDP协议实现之UDP_IP打包实现代码
这里主要是加上了UDP和IP和HEADER。为了简化设计提高运行效率,这里UDP没有实现CHECK SUM。代码编译通过,接下来要进行仿真,死磕时序,可能今晚有时间搞搞。module pack_udp_ip_tb ;reg clk = 0 , rst = 1 ;always #5 clk = ~clk ; initial begin $dumpfile("v.vcd");$dumpvars(0);#100000;$finish ;end wire [31:0原创 2022-01-05 15:00:47 · 1729 阅读 · 0 评论 -
10G光口UDP协议的实现
这里根据千兆以太网的arp模块修改而成。逻辑比较简单,这里不多啰嗦,写好了代码直接上代码:module tb_arp_gen ;reg clk = 0 , rst = 1 ;always #5 clk = ~clk ; initial begin $dumpfile("v.vcd");$dumpvars(0); end wire [31:0] my_ip = {8'd192,8'd168,8'd1,8'd3} ;wire [31:0] dst_ip..原创 2022-01-04 22:04:59 · 1596 阅读 · 0 评论 -
用在XGMII的UDP协议实现一个字节序列处理模块
10G光口数据宽度是8字节,我们在实现UDP协议时候,每一层的头部不是正好的8字节,比如IP头部是20字节,这样就要求我们在IP层上PLAYLOAD要处理一下:图中阴影部分可以是UDP,以及ICMP报文等。我们看到8字节对齐的内容要加上20字节的IP包头要先输出一个4字节补齐之前IP报头缺少的。为了更加通用,我写了下面这个模块。/*module bit_ff_tb ; reg clk = 0 , rst = 1 ;always #5 clk = ~clk ; ini...原创 2022-01-04 16:42:56 · 1405 阅读 · 0 评论 -
10G光口关于以太网数据包物理接口的分析
fmadio | 10G Ethernet Layer1 Frame XGMIIz上面连接有介绍,但是实际用ILA抓波形发现对应不上。还是比较郁闷。1,我试验环境使用移植好的verilog-thernet,用网络调试助手进行回环测试,在WIRESHARK 抓包也看到没问题:ARP协议有,UDP协议也有,完整的对话。但是看ILA抓物理总线上的包:就摸不到头脑了,根据本文开头那个篇文档,收到数据时候rxc对应的bit是0,而我发送16字节数据,在...原创 2022-01-01 13:31:15 · 874 阅读 · 0 评论 -
在VIVADO项目插入ILA逻辑分析仪实现信号抓取的技巧
在QUARTUSII环境下有很好用的SIGAL TAPII ,在VIVADO下实现内部信号抓取可以使用所谓的DEBUG,其实就是设置DEBUG后,项目使用XDC命令自动加入了逻辑分析仪,我们这里讲讲的是主动实例化加入ILA的技巧。可以随便插入到代码的任何位置。1,新建一个BOLCK DESIGN ,设置成为NATIVE 类型并设置好端口数量以及位宽,深度等等细节不多说。2,端口扩展出来。3,生成HDL_WRAPPER。后看代码:module ILA_1_1_8_64_w.原创 2022-01-01 09:25:51 · 6190 阅读 · 0 评论 -
关于XILINX FPGA上的DDR_VRP和VRN引脚
Xilinx Customer CommunityThese signals have been defined this way since Xilinx introduced DCI (with Virtex II if I remember correctly). VRN is aNFET that drives low against a pull-up (open drain) and VRP is aPFET that drives high against a pull-down...原创 2021-12-31 10:36:22 · 3179 阅读 · 2 评论 -
ADF5355的C设置代码
#include "config.h" //26MHZ 0.5PPM 本振源#define R00 0X201050#define R01 0X89D89D1#define R02 0X1180822#define R03 0x3#define R04 0X30008B84 //差分时钟输入(目前芯片有问题)#define R04_EN 0X30008B94#define R05 0X800025 #define R06 0X35A08076#define R07 0...原创 2021-12-27 15:22:50 · 822 阅读 · 0 评论 -
ADF5355的VERILOG接口代码
参照这个图就可以写出VERILOG代码:这里用的简单直接的列举所有时序边缘的写法,非常简单,根本不用动脑。代码看上去是多了点但是执行效率没有影响。module tb ;reg clk = 0 , rst = 1 ;always#5 clk <= ~clk;reg write= 0 ;reg [31:0] din =0;wire busy ;task wr_adf5355 ;input [31:0] v ;begin din = v;@(...原创 2021-12-27 15:15:39 · 492 阅读 · 0 评论 -
UDP的用户接口
此模块由用户指定IP,PORT以及对方的IP(可选),符合上述条件的内容被放在FIFO里,供上层用户执行读取操作。module fifo_ether2user_if #( parameter AW = 12 , // NOT LESS THAN 10 parameter DW = 16 // 16 FOR SIMULATION ,8 FOR REAL USE )(input clk,rst,input [31:0] cfg_my_ip,input [..原创 2021-12-26 22:25:36 · 1157 阅读 · 0 评论 -
用户发送UDP的接口设计
已经写好了并调试好了代码,直接上代码:module tb_axis_user2ether_if ;reg clk = 0 ,rst = 0 ;always#5 clk =~clk ; initial begin $dumpfile("tb_axis_user2ether_if.vcd");$dumpvars;end reg [31:0] c = 0 ;always @(posedge clk) c<=c+1; reg[15:0] r=0; reg s_va原创 2021-12-26 21:41:02 · 1084 阅读 · 0 评论 -
UDP设计完毕后的总结1:TOP接口介绍以及性能测试
TOP层接口代码。module udp_top( input clk , rst , //ip address and mac address input [31:0] cfg_my_ip, input [47:0] cfg_my_mac, // udp output port input [31:0] s_udp_dst_ip, input [15:0] s_udp_s..原创 2021-12-18 08:26:57 · 1883 阅读 · 0 评论 -
用C语言写的合并BOM和坐标文件的小工具
ALLEGRO画PCB的软件生成的坐标文件里面没有原件的参数数值,比如没有电容容量,电阻阻值。如下图:焊接厂生产的时候希望我在里面加上原件参数。我这边反复看了ALLEGRO设置,都无法在同一个文件输出左边文件和原件参数。要想可口,自己动手。我琢磨自己合并一下。打算和BOM单合并一下就可以了。基本思路就是从BOM单只提取原件标号和参数,保存成一个bom文件。之后程序遍历坐标文件每一行,处理每一行时候,找到标号之后从bom里面根据标号找到参数,之后将见参数加到这一行就OK。我们将BOM文件精简.原创 2021-12-15 10:35:31 · 1851 阅读 · 0 评论