七月时候去了南京参加xilinx暑期学校,认识了很多可爱的伙伴,真诚不掺假的交流令我产生一种想法:技术的提升除了实践也要积极输出。
接下来会不定时按照暑期学校的‘课程与实验安排’更新尽量详细的实验流程,具体操作在每次实验的.md文档中,不再赘述。
目标 objectives
- 使用提供的XDC文件约束电路时序
- 优化设计
- 使用提供的基本时序约束综合设计
- 分析综合后的设计的输出
- 改变综合的设置并且观察这些设置对于输出的影响
- 分析综合后的结果
步骤steps
- 创建工程,在github中已经有源码,加载进去
- 分析设计源文件的层次结构
- 打开xdc约束文件查看内容
- 修改Block Design中的设计
- 综合设计
- 分析时序报告
- 生成资源使用率和功耗的报告1
- 改变综合的设置为flatten,再次综合并分析结果
- 查看checkpiont
步骤及相关源码:https://github.com/louisliuwei/FPGA-Design-Flow-using-Vivado/tree/master/source/lab2
代码codes
- uart_top.v
`timescale 1ns / 1ps
module uart_top(
// Write side inputs
input clk_pin, // Clock input (from pin)
input rst_pin, // Active HIGH reset (from pin)
input btn_pin, // Button to swap high and low bits
output [7:0] led_pins // 8 LED outputs
);
wire rx_cross;
uart_led U0(
// Write side inputs
.clk_pin(clk_pin), // Clock input (from pin)
.rst_pin(rst_pin), // Active HIGH reset (from pin)
.btn_pin(btn_pin), // Button to swap high and low bits
.rxd_pin(rx_cross), // RS232 RXD pin - directly from pin
.led_pins(led_pins) // 8 LED outputs
);
//以下部分由block desgin中的部分组成
system_wrapper U1
(
.DDR_addr(),
.DDR_ba(),
.DDR_cas_n(),
.DDR_ck_n(),
.DDR_ck_p(),
.DDR_cke(),
.DDR_cs_n(),
.DDR_dm(),
.DDR_dq(),
.DDR_dqs_n(),
.DDR_dqs_p(),
.DDR_odt(),
.DDR_ras_n(),
.DDR_reset_n(),
.DDR_we_n(),
.FIXED_IO_ddr_vrn(),
.FIXED_IO_ddr_vrp(),
.FIXED_IO_mio(),
.FIXED_IO_ps_clk(),
.FIXED_IO_ps_porb(),
.FIXED_IO_ps_srstb(),
.GPIO_O(rx_cross)
);
endmodule
- uart_led.v
- meta_harden.v (作用为打两拍,使异步信号同步)
- uart_rx.v
- uart_baud_gen.v
- uart_rx_ctl.v
- led_ctl.v
- uart_led_timing_pynq.xdc
- uart_led_pins_pynq.xdc
以上代码见文中的github连接,source/lab2中
原理图schematic
闪光点flicker
- 在synthesis后,flow navigator/synthesis/open synthesized desgin/内有很多report,可以报告当前设计的时序/资源利用/延迟/功耗 等。
综合的相关内容参考官网中ug901 vivado synethesis:https://www.xilinx.com/support/documentation/sw_manuals/xilinx2019_1/ug901-vivado-synthesis.pdf ↩︎