自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 收藏
  • 关注

原创 ZYNQ7000平台的PL 到 PS&PS到上位机的波形显示

step3 : PS接收到中断执行 将数据通过 PS 的ETH0 使用UDP协议发送到上位机,PS发送10000个点,可自定义。PL自定义了DMA功能,具备支持用户设置的任意长度字节的数据,但是DMA地址需要是4K整数倍。step1 : PS 通知 PL 开始写数据,告知PL DMA地址,非固定DMA字节长度。step2 : PL 写完数据,拉起中断通知 PS,中断是上升沿触发。step4 : 上位机设置接收2000个采样点,将接收到数据显示。5、下次突发长度根据剩余突发长度判断接下来所突发的长度。

2025-11-13 14:29:34 346

原创 自定义AXI DMA 模块和 FIFO的故事

关于AXI模块比较容易对接的FIFO是AXI接口的,或者 Native 接口的FWFT模式的FIFO。本质都是有“预读取”的存在。1、AXI写数据跑在AXI写地址前面,主要是AWREADY来的太晚。修改以上BUG,设计一个自定义DMA对接FIFO数据。2、RREADY 的设计是等着RVALID有效才拉高。3、BREADY 设计是等着BVALID有效才拉高。很简单逻辑就能实现,核心在于WREADY。

2025-11-12 14:59:16 158

原创 zynq7000- linux平台 PS读写PL测试

FPGA代码简单,可在vivado 自定义 AXI slave ip上的代码更改即可。linux上运行程序。vivado上BD分配的物理地址要和下面代码上能够对上。1、遍历 PL寄存器,自定义测试寄存器个数。2、自定义测试轮数,指定对某寄存器读写。

2025-10-30 17:02:12 219

原创 FPGA驱动LTC1856 ADC芯片

本文分享一个FPGA驱动LTC1856 ADC代码。可根据具体需求修改。主要功能:受用户接口控制,获取相应8个通道的ADC数据。

2025-10-06 20:51:43 295

原创 Altera Fpga PCI master 设计

本文代码未提供更完全功能以及优化的内容,可以继续优化完善,感兴趣的同学,可以自行完善。3、DMA设计,其实比较简单,因人而异,本文只是每次传输一次数据发起DMA传输,达到目的字节长度,结束传输,等待下一次DMA传输开始,这个DMA 地址和字节长度是由其它主控决定。4、处理PCI异常,总线上难免会遇到异常情况,从IP提供的状态寄存器可以记录PCI总线上的异常,这个用户逻辑需要处理。可以在本代码上展开完善。1、需要熟悉PCI IP 手册上的时序关系,本文设计的是mem 写操作,单周期模式。

2025-10-06 10:34:17 203

原创 FPGA控制AD5754R DAC芯片

分享一个自己写的AD5754R DAC驱动。

2025-06-27 15:24:19 333

原创 Altera PCI IP target设计分享

主要实现:主控作为主设备,FPGA作为从设备,主控对FPGA IO读写的功能。后续会分享FPGA作为主设备, 从 FPGA通过 memory写到主控内存。

2025-06-26 17:15:58 432 1

原创 使用verilog 实现cordic 算法 ---- 向量模式

分享个人写的 coridic 向量模式的RTL:cordic 算法向量模式主要作用是求出向量的模值以及 arctan (x/y) 值;首先从仿真图去了解cordic 算法向量模式的 作用,不同数据测试;后续拓展:将旋转模式和向量模式在同一个module封装使用起来。

2025-02-11 18:20:52 1132

原创 使用verilog 实现 cordic 算法 ----- 旋转模式

● 了解cordic 算法原理,公式,模式,伸缩因子,旋转方向等,推荐以下链接视频了解 cordic 算法。在verilog 需要用 ram 存储的值:列举了13次迭代的tan值和对应角度;● 在FPGA中用 verilog 实现,注意使用有符号变量以及小数点定点化处理。● 用matlab 或者 c 实现一遍算法。b. 以第一象限为例子:0 ~ 90°。

2025-02-11 12:22:17 1399

原创 xilinx FPGA 进行 FFT

1.首先使用 matlab 生成 信号的 dat 文件(此dat文件包含信号的采样信息数据)作为DDS 信号。这一界面展示了 数据位置,以及config 信号是指示 傅里叶正变化还是 反变化,1是正变化。c. 仿真观察 数据数据 以及 对比 matlab FFT 后的数据。b. 输入数据的格式 浮点数或者截取、不截取的定点数。a. 给 FFT IP 配置信号为1,设置为正变化。这里输入数据,因为输入的是实数,虚数位宽为0。a. 输入数据的数据类型 定点或者浮点数。下图是傅里叶开始变化的开始信号。

2025-02-07 20:00:38 698

原创 xilinx FPGA 平台实现数字信号 -- 低通滤波

b. 设置好,可以看到下图在50k左边几乎是没有衰减的,右边频率经过 -40db的衰减。3. 需要注意 fir IP 会对输入信号增益放大到一定倍数,所以最后IP核出来的数据需要缩小相应倍数。c. 送入 fir IP 数据都是 整数,没有小数,所以需要设置 下图参数为定点数,小数设置为0。1.发现相位和data_all信号有偏差,相位是随机的,没有办法调整;3.配置 fir IP 核,加载 matlab 产生的 滤波系数。1.matlab 产生的 data_all 信号的 dat文件。

2025-01-15 19:22:54 1659

原创 xilinx平台使用多个 FIFO 拼接

Xilinx FIFO IP 输入 的最大位宽 是 1024 bit ,当需要缓存的数据是 1280bit 又或者是 1536等。有一个办法就是拆数据,将1280拆成 256倍速(其它位宽也行,32bit等是8的倍数);将所有 子 FIFO IP的 empty 信号 与起来;将所有 子FIFO IP的 full 信号 或 起来;使用如下rtl 代码处理即可;

2025-01-11 15:47:16 444

原创 Xilinx 平台 drp 动态调节 mmcm

d. vco 频率越高,分频系数越高,相位越精细,如果是 10分频那么VCO输出一周期就是便宜360/10 = 36°。d. edge 将high time 再扩展半个vco 周期 ,可以用来奇数分频 变成 50%占空比。e. high time 和 low time的 和 是 分频值。a. high time 是VCO 高电平 持续周期。b. low time 是 VCO 低电平持续周期。c. no count 是 VCO时钟周期的计数。怎么控制 输出频率?a. 先生成高频 的 VCO。

2024-12-24 16:03:50 605

原创 xilinx IDDR和ODDR原语回环实验-opposite edge 模式

【代码】IODDR原语回环实验-opposite edge 模式。

2024-12-11 17:42:36 438

原创 VHDL 注意点总结

vhdl tb 写法,在仿真中 ,process 是不断进行运行,所以需要挂起,使用一个sim_stop 信号巧妙解决时钟不断运行问题。port 输出 不能被使用,除非作为 buffer 模式,或者使用 另一个变量 作为使用。仿真是可以 混合 语言 去实现,也就是可以用 verilog 写 tb 仿真 vhdl。一个 bit 二进制 用 单引号 ,多个 bit 使用 双引号。使用 状态机的时候 可以自定义 编码格式,一般自动。vhdl 需要加载库 ,使用 库中的函数。下图 同步复位 和 异步 复位。

2024-12-10 15:17:05 402

原创 Xilinx IOserdes 原语使用 ---- 回环实验

bitslip 必须在clkdiv 的一个周期下作用,等待两个周期后采样的Q4到Q1数据才有效,serdes 的复位至少需要两个时钟周期。首先需要调节 bitslip 对齐,可以自己自定义序列接收检测,方可传输数据。下面RTL 代码,仅供参考,参考手册 :xilinx UG471。Xilinx IOserdes 原语使用 ---- 回环实验。

2024-12-10 14:30:08 760

原创 AXI4控制MIG遍历 1GB的 DDR3

连续 读写 MIG 时候,中途 bvalid 不拉高。暂未查到问题,可能是过程中硬件出现问题,DDR传输出现错误。下面代码直接上板测试,遍历整个DDR空间,仅供参考。遍历DDR3 test,内存大小1GB。

2024-12-09 23:54:38 410

原创 Xilinx LVDS 接口中的时钟对齐模块的RTL编写

自己写的一个时钟对齐的模块。

2024-12-09 18:07:21 856

原创 Xilinx IDDR和 ODDR原语使用和仿真

/ 本测试内容 是 50MHZ 的 8bit (1~126) 数据进入 IDDR – ODDR 输出。IDDR 和 ODDR 时钟 200MHZ。// IODDR 回环 ,使用 SAME_EDGE 模式,注意的是 从 ODDR输出 时钟需要偏移90度,不然数据 上下沿采样错误。// 数据从 IDDR 输出时,最好将 数据和 frame 有效信号 同步在偏移90度的时钟下。后续研究 OPPOSITE_EDGE 模式。数据输入 的时候,ODDR 输出延时一拍。IDDR 数据输出延时一拍。

2024-12-09 18:01:21 630

原创 FPGA 遍历读 LMK04803 寄存器

4.注意的是写寄存器是 32bit (data[31:5] + addr[4:0]),读出来数据是 27bit[26:0]2.遍历LMK04803所有寄存器,将读到的每个寄存器的值显示在VIO上。3.遍历指的是 从 R0 开始读,R0读完接着读 R1,一直到R31 结束。1.使用 VIO 输出信号控制什么时候开始读LMK04803寄存器。开始读取,从R0 开始读,接着 R1 …结束读取,32个寄存器全部读取完毕。通过 ILA 抓取的波形。

2024-12-05 18:03:41 421

原创 verilog 注意事项:同一个always 多个 if else

/ 当多个独立的 if else 控制一个变量时,只执行顺序最后的条件,其它条件工具忽略,而且在多个独立 if else 之间可以插入打拍语句,并行执行。// 不同多个独立 if else 之间 存在 case 语句时候,同样它们都是并行执行。// 多个独立的 if else 在always 里面,当变量值不一样时,是并行执行的。// 独立嵌套的 if else 也是 并行运行。

2024-11-15 17:32:21 1388

原创 不容错过的verilog注意事项

夏宇闻《从算法设计到硬线逻辑的实现》

2023-03-02 17:49:18 247

原创 c语言之共用体和枚举

共用体共用体类型,使几个不同类型的变量共享同一段类型的结构。就是共用体里面所描述的类型都是共享一个地址空间,并且同一个时刻只能用一个类型的值。union 共用体名{ int i; //成员列表 char ch; float f;}a,b,c; //变量列表union data{ int i; //成员列表 char ch; float f;}; //变量列表union data a,b,c; union //无名共用体{ int i;

2021-07-18 17:01:20 294

原创 74HC595芯片

芯片 74HC595该芯片的作用是移位寄存器,通过移位的方式,节省 FPGA 的管脚。原理移位寄存器芯片的作用就是将data端传进来的串行数据转化为并行输出。上图是模拟移位寄存器的结构。data数据端传进来的1001经过四个周期一级一级的传送后,每个触发器的Q端都有输出。所以四个周期后,D3,D2,D1,D0,都有数据输出,那么有个疑问,如果经过第三个周期呢,可以发现,D0的值是不确定的,也就是说,输出端不稳定,所以就需要加上开关,当每个触发器的Q端有值输出时,就可以打开开关,稳定的输出D3,D

2021-07-16 10:15:56 1748

原创 SPI协议_FLASH

SPI协议SPI(Serial Peripheral Interface,串行外围设备接口) 通讯协议,是 Motorola 公司提出的一种同步串行接口技术,是一种高速、全双工、同步通信总线,在芯片中只占用四根管脚用来控制及数据传输,广泛用于 EEPROM、 Flash、 ADC(数模转换器)、 DSP(数字信号处理器)以及数字信号解码器上,是常用的也是较为重要的通讯协议之一。SPI 通讯协议的优点是支持全双工通信,通讯方式较为简单,且相对数据传输速率较快;缺点是没有指定的流控制,没有应答机制确认数据是否

2021-06-22 15:14:02 1517

原创 DDS信号发生器

DDS 信号发生器 DDS 是直接数字式频率合成器( Direct Digital Synthesizer)的英文缩写,是一项关键的数字化技术。与传统的频率合成器相比, DDS 具有低成本、低功耗、高分辨率和快速转换时间等优点,广泛使用在电信与电子仪器领域,是实现设备全数字化的一个关键技术。作为设计人员,我们习惯称它为信号发生器,一般用它产生正弦、锯齿、方波等不同波形或不同频率的信号波形,在电子设计和测试中得到广泛应用。基本结构了解dds,下面的dds基本的结构需要了解清楚。DDS,无非就

2021-06-22 12:08:26 4283 2

原创 I2C协议_EEPROM

I2C**I2C 通讯协议(Inter-Integrated Circuit**)是由 Philips 公司开发的一种简单、双向二线制同步串行总线, 只需要两根线即可在连接于总线上的器件之间传送信息。I2C 通讯协议和通信接口在很多工程中有广泛的应用,如数据采集领域的串行 AD, 图像处理领域的摄像头配置,工业控制领域的 X 射线管配置等等。除此之外,由于 I2C 协议占用引脚特别少, 硬件实现简单, 可扩展型强, 现在被广泛地使用在系统内多个集成电路(IC)间的通讯。I2C总线可以进行

2021-06-18 21:17:23 799

原创 fir低通滤波器

fir 有限冲激响应( Finite Impulse Response, FIR)滤波器,又被称为非递归线性滤波器,是数字信号处理系统中最基本的元件。 FIR 滤波器的脉冲响应由有限个采样值构成,长度(抽头数)为 N、阶数为 N−1 的 FIR 系统的转移函数、差分方程和单位冲激响应分别如下列三式所示。 无限冲激响应( Infinite Impulse Response, IIR)滤波器,又被称为递归线性滤波器。顾名思义, FIR 和 IIR 是相对的,相比于 IIR, FIR 具备线性相位

2021-06-17 16:07:05 9349

原创 DDS与DA

信号发生器 信号发生器是一种能提供各种频率、输出电平的电信号的设备,又称信号源或振荡器。其在各种电信系统的振幅、频率、传输特性等电参数以及元器件的特性与参数的测量中得到了广泛的应用。直接数字式频率合成器( Direct Digital Synthesizer,DDS)是一项关键的数字化技术,其将先进的数字处理理论与方法引入频率合成技术,通过数/模转换器将一系列数字量形式的信号转换成模拟量形式的信号。DA9709芯片***DA9709芯片***是双通道,位宽 8bit 的芯片,速率高达 1

2021-06-16 22:14:07 2667 1

原创 简单操作matlab之图像

Image1.打开matlab就先把路径给切换好 准备的图片放在路径下,后面就可以随意用matlab来调取2.建立.m文件 建立脚本就可以任意输入命令,回车不运行。3.输入命令下面是我自己编的命令处理图像:以下命令主要是提取图片的rgb分量。图片是由三基色组成,RGB(红,绿,蓝)查看图片的信息:clc;clear;pic_rgb = imread('zz.jpg');从当前路径读取图片信息pic_r = pic_rgb;//赋值pic_g = pic_rgb;pi

2021-06-14 17:39:40 4236

原创 异步fifo

FIFOFIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,它与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序的读出数据,其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址。FIFO是非常重要的数字器件,用途非常多,像跨时钟域的处理,多比特的异步信号的处理。FIFO的IP核有同步的还有异步的,这取决于写数据和读数据采用的时钟。下面简单仿真一下异步FIFO的功能:异步FI

2021-06-14 15:41:23 299

原创 用状态机设计uart——顶层模块

顶层模块module uart_state( input wire sys_clk, input wire sys_rst_n, input wire rx, output wire tx);wire rx_data;wire data_value;wire [7:0] rcv_data;uart_rcv uart_rcv_inst1( . sys_clk (sys_clk), . sys_rst_n (sys_rst.

2021-05-20 15:46:42 835 1

原创 用状态机设计uart——发送模块

发送模块状态图:发送模块代码module uart_txd( input wire sys_clk , input wire sys_rst_n , input wire value_d , input [7:0] data_rx , output reg txd_data);parameter IDLE = 4'b0001 , START = 4'b0010 , ..

2021-05-20 15:29:47 1075 1

原创 用状态机设计uart——接收模块

uart设计由于是自己通过不断仿真测试,进行对代码的修改,设计肯定不是完美的,请大家指出我的问题!!!也可以在评论区评论,指出问题!!!或者有疑问的提出来!!!本设计采用三段式状态机分析与综合后的状态图:接收模块代码:module uart_rcv( input wire sys_clk , input wire sys_rst_n , input wire rx_data , ou.

2021-05-19 21:38:14 1408

原创 Uart2

FPGA设计思路那rs232举例来说,它采用的是全双工,有两条数据线,rx和tx,每次只能传输1bit,用FPGA设计一个具有uart功能其实不难,只要了解它的功能是什么。uart功能就是:接收数据时。将串行数据转换成并行数据;在发送数据时,将并行的数据再转换成串行数据。我们只要在FPGA内部实现这个功能描述就可以了。一般只要两个模块就能解决,发送模块和接收模块。这两个模块分别诠释了uart的功能。野火的波形图教学非常好,明白了时序是怎样的,那么代码就游刃有余了,大家可以根据下图的.

2021-05-13 21:38:01 1322

原创 UART1

串口Uart,它是异步串行,一类协议,并不是一种协议(串口总称)Uart类型的接口有许多,像常见的rs232,rs422,rs485等,各自有自己的电平标准。为何说是异步的呢?Uart通常用来PC和外围设备就进行通行,但是使用的都是各自的时钟,不像SPI和I2C主机和从机使用相同的时钟来控制数据的传输。我们来讲讲rs232这种串行接口,有9个引脚,其中两个引脚是核心,RX和TX,处于2和3引脚,所以使用的数据线就这两条,位宽1bit,就是说在创数时只能一位一位的传。缺点就是传输距离短,速率低。

2021-05-12 23:26:47 1667

原创 FPGA之状态机

状态机1.状态机定义状态机的本质就是对具有逻辑顺序和时序规律的事件的一种描述方法,它有三个要素:状态、输入、输出:状态也叫做状态变量(比如可以用电机的不同转速作为状态),输出指在某一个状态的特定输出,输入指状态机中进入每个状态的条件。有限状态机(Finite State Machine, FSM),根据状态机的输出是否与输入有关,可分为Moore型状态机和Mealy型状态机。Moore型状态机输出仅仅与现态有关,Mealy型状态机不仅与现态有关,也与输入有关,所以会受到输入的干...

2021-05-02 22:34:25 2030

原创 大彻大悟之C语言数组_Part1

数组赋值在c语言中,常用的是一维数组和二维数组;数组其实就是存储一系列的数字或者,字符;首先讲一讲初始化,在赋值的过程中要注意什么。下面是我列举的例子:一维数组的赋值:int arr[5] = {1,2,3,4,5};//定义5个整型元素int arr[] = {1,2,3,4,5};//定义5个整型元素int arr[5] = {1,2,3};//定义的5个元素为1,2,3,0,0;char arr[5] = {'a','b','c'};//定义的5个元素为a,b,c,0,

2021-04-28 22:27:03 147

原创 “人生苦短,我用python”之小笔记

人生苦短,我用Python!学过C语言,相信python就很容易上手,主要是因为其表达方式简单,不繁琐。我来总结一下,python最最最基础的知识:No.1 变量变量就是用来存储那些数据的并可以任意更改的,像整型(int)、字符串(str)、浮点型(float)等。eg1:my_name= '小兔崽子';age = 30;注意点:变量名字;赋值符号;变量的名字:规定数字、字母、下划线来命名,但不能是数字开头,最好也不要用下划线开头!、赋值符号:=eg2:mengx..

2021-04-27 23:03:09 160

原创 与FPGA中亚稳态的‘量子纠缠’

亚稳态说实话,这玩意我也是琢磨许久,不搞懂心里难受!!!这也让我觉得匪夷所思的地方!!!这玩意不搞懂,我是睡不着觉的!!!!为啥会出现亚稳态?组合逻辑有吗?组合逻辑是靠电平触发,每次会有确定的电平值0或1,但组合逻辑会有个竞争冒险现象,这个现象与亚稳态一样是个小祸害,阻碍整个系统变得优秀!!!(我这说的委婉,可能会导致系统奔溃)那么在时序逻辑中呢?这涉及到很重要的数字器件,那就是触发器,它具有记忆功能还可以储存一位二进制数据。为什么提到触发器呢,因为它是导火索,所有亚稳态都与它有着千丝.

2021-04-25 23:25:44 326

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除