平头哥开源项目wujian100_open | 基于synplify+vivado生成bitfile

2022-04-06 19:44:53 浏览数 (1)

1.仿真补充:补充上节仿真流程 2.基于synplify vivado生成bitfile: synplify进行综合生成edf网表 vivado进行布线布局生成bitfile 3.synplify vivado命令行操作和vivado界面操作;

仿真补充

生成fsdb波形

在tb.v中打开fsdb dump波形

在run_case中加上-full64 -fsdb选项

执行仿真:

代码语言:javascript复制
 ../tools/run_case -sim_tool vcs ../case/dma/dma_test.c

可以看到fsdb生成log和TEST PASS

打开verdi,加载fsdb波形

代码语言:javascript复制
verdi -ssv -ssy -ssz -sverilog -nologo       
 -f ../tb/tb_file.list -top wujian100_open_tb 

基于synplify vivado生成bitfile

1.可以把代码加进vivado,单独用vivado进行综合布线布局生成bitfile; 2.我这里直接用synplify生成网表wujian100_open.edfwujian100_open_edif.xdc约束;然后用vivado布线布局;

synplify综合

在wujian100_open_200t_3b.prj中加上sdc2fdc命令

Use the sdc2fdc Tcl shell command to convert the timing constraints.

执行synplify综合:

代码语言:javascript复制
synplify -batch  ./wujian100_open_200t_3b.prj

由于加了sdc2fdc,所会生成一个FDC_constraints文件;

综合完成,wujian100_open.edf网表和wujian100_open_edif.xdc约束是后续vivado 布线布局需要用到的文件;

vivado PR 命令行操作

打开C7A200T3B.xdc修改第33行,把 _c去掉;

修改wujian100_open_edif.xdc为:

代码语言:javascript复制
create_clock -name {EHS} [get_pins {PIN_EHS}] -period {50.000} -waveform {0.000 25.000}
create_clock -name {JTAG_TCLK} [get_pins {PAD_JTAG_TCLK}] -period {500.000} -waveform {0.000 250.000}
create_clock -name {I_RTC_EXT_CLK} [get_pins {x_aou_top/x_rtc0_sec_top/x_rtc_aou_top/x_rtc_clk_div/i_rtc_ext_clk_keep/I}] -period {1000.000} -waveform {0.000 500.000}
create_clock -name {RTC_CLK_DIV} [get_pins {x_aou_top/x_rtc0_sec_top/x_rtc_aou_top/x_rtc_clk_div/rtc_clk_div_keep/I}] -period {2000.000} -waveform {0.000 1000.000}
create_clock -name {CLKDIV} [get_pins {x_pdu_top/x_sub_apb0_top/x_pwm_sec_top/x_pwm/x_pwm_ctrl/x_pwm_clkmux/clk_out/I2}] -period {200.000} -waveform {0.000 100.000}
create_clock -name {wujian100_open_top|PAD_JTAG_TCLK} [get_ports {PAD_JTAG_TCLK}] -period {1000.000}
set_clock_groups -asynchronous -name {clkgroup_2} -group [get_clocks {CLKDIV PIN_EHS}]
set_clock_groups -asynchronous -name {clkgroup_3} -group [get_clocks {PAD_JTAG_TCLK}]
set_clock_groups -asynchronous -name {clkgroup_4} -group [get_clocks {I_RTC_EXT_CLK RTC_CLK_DIV}]
set_clock_groups -name {Inferred_clkgroup_0} -asynchronous -group [get_clocks {wujian100_open_top|PAD_JTAG_TCLK}]
set_property ASYNC_REG TRUE [get_cells {x_aou_top/x_rtc0_sec_top/x_rtc_pdu_top/x_rtc_clr_sync/pclk_load_sync2}]
set_property ASYNC_REG TRUE [get_cells {x_aou_top/x_rtc0_sec_top/x_rtc_pdu_top/x_rtc_clr_sync/rtc_load_sync2}]
set_property ASYNC_REG TRUE [get_cells {x_aou_top/x_rtc0_sec_top/x_rtc_pdu_top/x_rtc_clr_sync/pclk_load_sync1}]
set_property ASYNC_REG TRUE [get_cells {x_aou_top/x_rtc0_sec_top/x_rtc_pdu_top/x_rtc_clr_sync/rtc_load_sync1}]
set_property ASYNC_REG TRUE [get_cells {x_cpu_top/CPU/x_cr_had_top/A15d/A74/A10b}]
set_property ASYNC_REG TRUE [get_cells {x_cpu_top/CPU/x_cr_had_top/A15d/A74/A18597}]
set_property ASYNC_REG TRUE [get_cells {x_cpu_top/CPU/x_cr_had_top/A15d/A1862d/A10b}]
set_property ASYNC_REG TRUE [get_cells {x_cpu_top/CPU/x_cr_had_top/A15d/A1862d/A18597}]
set_property ASYNC_REG TRUE [get_cells {x_cpu_top/CPU/x_cr_had_top/A15d/A75/A10b}]
set_property ASYNC_REG TRUE [get_cells {x_cpu_top/CPU/x_cr_had_top/A15d/A75/A18597}]

运行wujian100_open_200t_3b_prj.tcl脚本,脚本内容如下:

代码语言:javascript复制
create_project -force project_3b ./project_3b -part xc7a200tfbg484-2l
set_property design_mode GateLvl [current_fileset]
add_files -norecurse {../synplify/wujian100_open_200t_3b_rev/wujian100_open.edf}
set_property top wujian100_open [get_filesets sources_1]
add_files -fileset constrs_1 -norecurse {../synplify/wujian100_open_200t_3b_rev/wujian100_open_edif.xdc ../xdc/XC7A200T3B.xdc}
set_property top_file ../synplify/wujian100_open_200t_3b_rev/wujian100_open.edf [current_fileset]
launch_runs impl_1 -to_step write_bitstream -jobs 2

在vivado目录下执行:

代码语言:javascript复制
vivado -mode batch -source wujian100_open_200t_3b_prj.tcl

等待bitfie生成,可以在wujian100_open/fpga/vivado/project_3b/project_3b.runs/impl_1/runme.log查看log

查看Timing ,满足时序要求:

wujian100_open/fpga/vivado/project_3b/project_3b.runs/impl_1下找到生成bitfile;

在bit文件生成后,将bit文件下载到FPGA开发板上验证;

vivado PR GUI界面操作

Tcl Console中输入tcl命令: source wujian100_open_200t_3b_prj.tcl

出现错误,显示XC7A200T3B.xdc的第33行:

打开XC7A200T3B.xdc,修改第33行,把 _c去掉;

再重新run;

然后结果WHS为负,保持时间不满足;

点击违例Path,查看时序违例的具体路径;

双击违例路径Path查看详细情况;

右键违例Path,选择Schematic,打开这条路径的电路图;

双击器件的时钟端口C(红色框处),查看器件时钟的连接;

修改wujian100_open_edif.xdc为(和vivado PR 命令行操作修改成一样的):

再重新run;可以看到时序满足要求;

生成bitfile,并加载到FPGA中,PPGA上运行、验证设计;

附:功耗:

附:资源利用率:

0 人点赞