
Verilog
文章平均质量分 81
语法知识总结,代码分享
徐晓康的博客
本硕毕业于南京航空航天大学电气工程专业,现从事控制硬件相关工作,健康工作,热爱生活。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Verilog 功能模块--RAM 和 ROM(03)--自编 RAM 与 Vivado RAM IP 功能对比实测
摘要:本文对自编RAM与Vivado RAM IP的功能特性进行了对比测试,重点分析了两者在初始化、使能控制、输出寄存器和操作模式等方面的差异。测试主要针对TDPRAM实现,在300MHz高频条件下验证了模块性能,并采用冲突抑制机制避免读写冲突(包括写-写冲突和读-写冲突)对测试结果的影响。文章通过随机信号测试方法,对比了两种RAM实现的关键功能表现,为FPGA存储器设计提供了实践参考。原创 2025-06-07 12:11:10 · 800 阅读 · 0 评论 -
Verilog功能模块--RAM和ROM(02)--同步写-写冲突与读-写冲突实测
本文主要探讨Xilinx FPGA中RAM IP模块的冲突行为测试方法。文章通过上板实测方式,重点分析了TDPRAM在同步时钟下的写-写冲突和读-写冲突行为。实验设计思路包括高频性能验证、使能信号测试、三种操作模式验证以及初始化功能测试等内容。测试方案采用ILA抓取信号的方式,在顶层文件中专门设计了写冲突检测信号,如write_collision_clka_locked和addr_locked等寄存器,用于观测冲突发生时的具体行为。作者指出,由于仿真不能完全反映真实硬件行为,因此需要通过实测来确保自编RAM原创 2025-06-07 12:09:54 · 866 阅读 · 0 评论 -
Verilog功能模块--RAM和ROM(01)--功能说明与关键代码解析
FPGA内存模块自研实现方案解析 摘要:本文介绍了FPGA开发中自研RAM/ROM模块的必要性与实现方案。与商业IP核相比,自研模块具有更好的代码移植性,适用于基础功能场景。文章详细阐述了模块支持的三种RAM类型(单端口、简单双端口、真双端口)和两种ROM类型,实现了写优先/读优先/无变化三种操作模式,并兼容COE文件初始化功能。模块设计参考了Vivado BRAM IP的接口标准,但暂未实现字节写和位宽转换等高级功能。通过参数化设计,该方案能满足多数基础应用需求,同时保持代码的跨平台兼容性。 (148字)原创 2025-06-07 12:08:25 · 1113 阅读 · 0 评论 -
Verilog编程技巧01——如何编写三段式状态机
规范更注重编码的格式,像变量命名、缩进、注释风格等,而编程技巧则更偏重更直观易读、更便于维护、综合效果更好的Verilog/SV代码写法,像:如何编写状态机、如何进行参数化设计、如何进行流水线设计等。四段式的综合效果在非常复杂场景可能略好于三段式,但绝大多数场景下,三段式的综合效果同样优异,两者区别不大,所以两者都标注为三颗星。最后,本文分享了Verilog与SV的三段式状态机模板。中的内容,四段式状态机在复杂逻辑的综合中会有一定优势,但三段式代码更加简洁,更符合直观逻辑,所以在FPGA开发中,作者推荐。原创 2025-06-06 23:31:30 · 442 阅读 · 0 评论 -
Verilog仿真模块--真随机数生成器
因为波形配置文件(如 genRandomNum_behav.wcfg),文件内部是保存了参数值 SEED 值,所以再次运行 tcl,SEED 值改变,原本的波形配置文件会因为 SEED 值改变而失效(会报警告),所以,在重启仿真之前,需要读取 wcfg 文件,替换 SEED 值为新值,这部分代码对应以下 tcl 文件的。除此之外,在实际应用时,还考虑到,保存波形配置文件与恢复波形的问题。要产生真随机数,其实就是要改变每次仿真时,初始用到的种子,通常的做法是使用系统时间作为种子,有的方案里使用的是。原创 2025-04-30 19:59:37 · 1614 阅读 · 0 评论 -
Verilog功能模块——读写位宽不同的同步FIFO
前面的博文已经讲了异步FIFO、读写位宽不同的异步FIFO与同步FIFO,本文使用纯Verilog实现了读写位宽不同的同步FIFO,并仿真验证了设计的正确性。原创 2023-10-24 16:32:05 · 1823 阅读 · 0 评论 -
Verilog功能模块——读写位宽不同的异步FIFO
前面的博文已经讲了异步FIFO和同步FIFO,但并没有实现FIFO的读写位宽转换功能,此功能是FIFO的主要功能之一,应用十分广泛,因此,在前面两个模块的基础上,本文使用纯Verilog实现了读写位宽不同的FIFO,并仿真验证了设计的正确性。原创 2023-10-24 11:18:21 · 4320 阅读 · 4 评论 -
Verilog功能模块——同步FIFO
实现了纯Verilog的同步FIFO,包含FWFT功能与almost信号功能原创 2023-10-12 22:23:38 · 1239 阅读 · 1 评论 -
Verilog功能模块——异步FIFO
Verilog自编实现异步FIFO,并实现了FWFT、Almost_full与Almost_empty功能原创 2023-10-12 11:24:39 · 1712 阅读 · 2 评论 -
Verilog功能模块——标准FIFO转FWFT FIFO
我使用FWFT FIFO作为读端口的接口,但是在使用安路的EG4系列FPGA时,开发工具TD(TangDanasty)只提供了标准FIFO,没有FWFT FIFO选项。为了解决这个问题,我设计了一个名为standardFIFO2FWFTFIFO.v的模块,可以将标准FIFO的读端口转换为FWFT FIFO的读端口,以确保模块逻辑正常工作。原创 2023-09-21 21:21:59 · 2102 阅读 · 2 评论 -
Verilog功能模块——Uart收发
本文分享了一种通用的Uart收发模块,可实现Uart协议所支持的任意波特率,任意位宽数据(5~8),任意校验位(无校验、奇校验、偶校验、1校验、0校验),任意停止位(1、1.5、2)的数据传输。此模块需要搭配FIFO使用,以消除发送端和接收端波特率不一致导致的累计误差。此模块经过多次测试与实际使用验证,可实现连续10万+数据无间隔连续发送与接收无错误。原创 2022-11-09 17:28:44 · 3218 阅读 · 5 评论 -
避免重复造轮子,我们去哪找FPGA IP或是HDL功能模块?
FPGA开源IP网站原创 2022-02-27 16:30:13 · 10039 阅读 · 0 评论 -
Verilog功能模块 —— 按键消抖
SystemVerilog编写的按键消抖模块, 能实现自动检测按键是否按下的功能, 不用关心初始电平。原创 2021-12-21 22:39:06 · 13258 阅读 · 0 评论 -
Verilog功能模块——AXI4-Lite协议主机-单次写-使用FIFO
模块功能:AXI4-Lite协议主机,从FWFT FIFO(首字直通FIFO)中读取地址和数据,实现将数据写入到设定的地址中的操作。原创 2021-12-11 14:14:07 · 3442 阅读 · 1 评论 -
Verilog编程陷阱——数组的声明和使用
Verilog数组声明和使用时很可能会遭遇的陷阱原创 2021-12-10 21:39:31 · 27310 阅读 · 4 评论 -
Verilog自编函数clog2替代SV中的系统函数$clog2
先放函数,已验证和$clog2输出一致,注意需满足输入n ≥ 1。// 返回以2为底的n的对数function integer clog2 (input integer n); n = n - 1; for (clog2 = 0; n > 1; clog2 = clog2 + 1) n = n >> 1;endfunction一.为什么需要以2为底n的对数的函数在Verilog编写代码过程中,经常需要根据一个常量来定义一个变量的位宽,例如,要编写一个计数器,计.原创 2021-11-07 22:22:22 · 14901 阅读 · 10 评论 -
Verilog功能模块——取滑动平均值(使用FIFO)
模块功能:对输入信号取滑动平均值。滑动平均值:又名移动平均值,在简单平均值的基础上,通过顺序逐期增加新数据、减去旧数据求算移动平均值,借以消除偶然变动因素。参考百度百科:[滑动平均法](https://baike.baidu.com/item/%E6%BB%91%E5%8A%A8%E5%B9%B3%E5%9D%87%E6%B3%95/22657430?fr=aladdin)应用场景:- 对平均值会变化,但变化速度较慢的信号求平均值- 数字滤波中去除信号的直流偏置原创 2021-05-21 00:19:05 · 6990 阅读 · 7 评论 -
Verilog功能模块——AXI4-Lite协议主机-连续区间写-使用FIFO
模块功能:AXI4-Lite协议主机,从FWFT FIFO(首字直通FIFO)中不断读取数据,写入到一段地址中。应用场景:DDR读写,BRAM读写等AXI接口的存储器件读写。原创 2021-05-19 00:10:32 · 1627 阅读 · 0 评论 -
Verilog功能模块——符号位扩展
模块功能:符号位扩展应用场景:DDR等存储器通常是32/64位的,数据需要转为合适的位数再存入。原创 2021-05-14 23:47:55 · 8855 阅读 · 0 评论 -
Verilog功能模块——取滑动平均值(使用寄存器组)
模块功能:对输入信号取滑动平均值。滑动平均值:又名移动平均值,在简单平均值的基础上,通过顺序逐期增加新数据、减去旧数据求算移动平均值,借以消除偶然变动因素。参考百度百科:[滑动平均法](https://baike.baidu.com/item/%E6%BB%91%E5%8A%A8%E5%B9%B3%E5%9D%87%E6%B3%95/22657430?fr=aladdin)应用场景:- 对平均值会变化,但变化速度较慢的信号求平均值- 数字滤波中去除信号的直流偏置原创 2021-05-06 21:29:32 · 8012 阅读 · 32 评论 -
Verilog功能模块——降采样
模块功能:对输入信号进行降采样。应用场景:- 输入数据量太大,后级难以处理,需要减小信号量而不丢失关键信息原创 2021-05-05 16:01:25 · 4189 阅读 · 1 评论 -
Verilog功能模块——时钟分频
模块功能:对输入时钟进行任意倍数分频。应用场景:- 需要对时钟进行分频,而PLL不能满足要求或者使用起来不方便- 需要固定倍数关系的时钟原创 2021-04-30 16:58:47 · 14454 阅读 · 1 评论 -
Verilog功能模块——串行数据转并行数据
模块功能:接收串行数据,转为并行数据。应用场景:在SPI,Uart等串行协议接收侧均有应用。原创 2021-04-24 16:28:57 · 6726 阅读 · 6 评论