博文内容依旧来自南京xilinx暑期培训,相关源码依然在github可查。
坚持输出,也是一种对自我的输入
IP核的使用在FPGA中举足轻重,以此为契机再次熟悉IP核在Vivado中的使用
目标Objectives
- 在项目中使用IP核
- 生成一个时钟IP并实例化进项目
- 使用IP Intergrator生成Block Design
- 实例化BD
- 生成比特流并硬件验证
设计描述Design Description
此次实验中生成一个波形生成器/信号发生器。PC通过RS232串口通信,波形生成器与外部DAC相连,使用简单的分频实现命令控制波形生成。
在设计中有3个时钟域:clk_rx,clk_tx,clk_samp。时钟生成模块会例化这三个模块,这三个时钟被clk_pin驱动,频率为125Mhz。
使用ARM Cortex-A9控制的USB-UART转换(位于PL)。
步骤 Steps
- 创建Vivado工程
- 添加文件1
- 使用tcl文件生成ps(使用了DDR,GPIO,FIXED_IO)
- 生成并例化时钟模块
- 生成bitstream在FPGA上实现
- 去掉源文件中的fifo,使用IP catalog生成fifo并例化进源
- 验证新工程的功能性
源码Codes
这里使用的模块不是很多,但是每一个都是小系统。
虽然不是很大,其中的原理也略知,但是没有亲自写过,这不算是优秀的学习者。
要给自己定个具体的时间点把这些代码都打一遍。
- wave_gen.v 包含了以下模块
-
clk_gen.v (用于uart传输时的时钟生成)[(8/15)写了该模块]
实例化div和clk的ip,其中的亮点是学习了MMCM2- clk_div.v [(8/14)写了该模块]
虽然是煎蛋的分频,不得不感概下工程师的高级使用技巧en_clk_samp <= #5 (cnt == 16'b1) 当cnt为1是括号内为1否则为0,直接作为判断赋给en_clk_samp
- clk_div.v [(8/14)写了该模块]
-
rst_gen.v [8/15写了该模块]
-对输入的3个reset进行异步变同步- reset_bridge.v (打两拍将异步变同步)
-
uart_rx.v (uart接收模块)
-
cmd_parse.v (待学习)
-
samp_ram.v (待学习,猜测是采样ram)
-
resp_gen.v (待学习,感觉很重要)
- to_bcd.v (像 转为bcd的)
-
char_fifo.xci (xilinx的fifo核)
-
uart_tx.v (uart发送模块)
-
lb_ctl.v 学
- debouncer.v
- meta_harden.v
-
clkx_bus.v
-
samp_gen.v
-
dac_spi.v
-
- system_wrapper.v
-system.bd
闪光点 flicker
- 使用IP对于硬件编程来说必不可少的技能,在这里简单的使用clk与fifo,是为了熟悉ip核如何引用,但是真正需要理解各模块的原理及代码逻辑的编写。
- 需要停下来把这整个程序复盘一下了。