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.edf
和wujian100_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
为:
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
脚本,脚本内容如下:
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上运行、验证设计;
附:功耗:
附:资源利用率: