questasim/modelsim独立仿真vivado ddr3控制器(mig)

本文介绍了在工程使用DDR做数据缓存时的仿真方法。当用Vivado默认仿真器速率慢,联合仿真流程麻烦,因此将Vivado仿真DDR3所需文件扣出到Questasim独立编译仿真。详细说明了联合仿真环境搭建、流程查看,以及移植到Questasim独立仿真步骤,还提及了MEM_BITS注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.使用场合介绍

当工程中使用DDR做数据缓存时,使用vivado默认仿真器进行功能仿真时速率特别慢,而使用vivado和questasim联合仿真选项虽然能加速仿真(相当于从vivado跳转到questasim进行仿真),但是调试过程中每次修改代码都需要在vivado工具上修改并编译后再跳转到questasim进行波形仿真,流程比较麻烦。本文通过将vivado仿真ddr3控制器所需要的仿真文件扣出来到questasim中进行独立编译仿真。

2.使用vivado联合questasim仿真

为了了解仿真DDR3所需要的文件以及编译流程,先通过vivado跳转到questasim仿真查看编译了哪些文件。

2.1搭建仿真环境

2.1.1导出mig仿真例程

根据自己板子的ddr3芯片型号和使用需求生成mig,本文将mig ip核生成名为ddr3,勾选AXI4 Interface选项,在source框右击ddr3,选择Open Ip Example Design...选项,创建仿真工程ddr3_ex。

仿真工程生成好后找到ddr3_ex文件夹路径下imports文件夹,导入ddr3_model.sv,ddr3_model_parameters.vh,wiredly.v到自己工程目录下,并将sim_tb_top.v中的example_top换成自己需要仿真的顶层文件。最终如下图所示

2.2.2设置vivado仿真工具

点击Tools->setting

修改如下设置

点击Run Simulation跳转到questasim进行仿真,如下图所示

 仿真波形

2.2.3 查看仿真流程

进入工程路径下XX.sim->sim_1->behav->questa,有三个脚本可执行文件compile.bat,elaborate.bat和simulate.bat。分别代表仿真的三个步骤:综合,优化,执行仿真。

compile.bat:综合脚本,对源文件进行综合。脚本调用了DDR_AXI_tb_compile.do

@echo off
REM ****************************************************************************
REM Vivado (TM) v2021.1 (64-bit)
REM
REM Filename    : compile.bat
REM Simulator   : Mentor Graphics Questa Advanced Simulator
REM Description : Script for compiling the simulation design source files
REM
REM Generated by Vivado on Sun Mar 24 21:40:16 +0800 2024
REM SW Build 3247384 on Thu Jun 10 19:36:33 MDT 2021
REM
REM IP Build 3246043 on Fri Jun 11 00:30:35 MDT 2021
REM
REM usage: compile.bat
REM
REM ****************************************************************************
set bin_path=D:\\questa202101\\win64
call %bin_path%/vsim  -c -do "do {DDR_AXI_tb_compile.do}" -l compile.log
if "%errorlevel%"=="1" goto END
if "%errorlevel%"=="0" goto SUCCESS
:END
exit 1
:SUCCESS
exit 0

DDR_AXI_tb_compile.do

包含Mig控制器仿真需要的所有源文件路径,将所有路径下的源文件拷贝出来,后期使用questasim独立综合使用。

######################################################################
#
# File name : DDR_AXI_tb_compile.do
# Created on: Sun Mar 24 21:40:16 +0800 2024
#
# Auto generated by Vivado for 'behavioral' simulation
#
######################################################################
D:\\questa202101\\win64\\vlib questa_lib/work
D:\\questa202101\\win64\\vlib questa_lib/msim

D:\\questa202101\\win64\\vlib questa_lib/msim/xil_defaultlib

D:\\questa202101\\win64\\vmap xil_defaultlib questa_lib/msim/xil_defaultlib

D:\\questa202101\\win64\\vlog  -incr -mfcu -work xil_defaultlib  "+incdir+../../../../../imports" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/axi/mig_7series_v4_2_axi_ctrl_addr_decode.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/axi/mig_7series_v4_2_axi_ctrl_read.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/axi/mig_7series_v4_2_axi_ctrl_reg.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/axi/mig_7series_v4_2_axi_ctrl_reg_bank.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/axi/mig_7series_v4_2_axi_ctrl_top.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/axi/mig_7series_v4_2_axi_ctrl_write.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/axi/mig_7series_v4_2_axi_mc.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/axi/mig_7series_v4_2_axi_mc_ar_channel.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/axi/mig_7series_v4_2_axi_mc_aw_channel.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/axi/mig_7series_v4_2_axi_mc_b_channel.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/axi/mig_7series_v4_2_axi_mc_cmd_arbiter.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/axi/mig_7series_v4_2_axi_mc_cmd_fsm.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/axi/mig_7series_v4_2_axi_mc_cmd_translator.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/axi/mig_7series_v4_2_axi_mc_fifo.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/axi/mig_7series_v4_2_axi_mc_incr_cmd.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/axi/mig_7series_v4_2_axi_mc_r_channel.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/axi/mig_7series_v4_2_axi_mc_simple_fifo.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/axi/mig_7series_v4_2_axi_mc_wrap_cmd.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/axi/mig_7series_v4_2_axi_mc_wr_cmd_fsm.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/axi/mig_7series_v4_2_axi_mc_w_channel.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/axi/mig_7series_v4_2_ddr_axic_register_slice.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/axi/mig_7series_v4_2_ddr_axi_register_slice.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/axi/mig_7series_v4_2_ddr_axi_upsizer.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/axi/mig_7series_v4_2_ddr_a_upsizer.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/axi/mig_7series_v4_2_ddr_carry_and.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/axi/mig_7series_v4_2_ddr_carry_latch_and.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/axi/mig_7series_v4_2_ddr_carry_latch_or.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/axi/mig_7series_v4_2_ddr_carry_or.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/axi/mig_7series_v4_2_ddr_command_fifo.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/axi/mig_7series_v4_2_ddr_comparator.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/axi/mig_7series_v4_2_ddr_comparator_sel.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/axi/mig_7series_v4_2_ddr_comparator_sel_static.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/axi/mig_7series_v4_2_ddr_r_upsizer.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/axi/mig_7series_v4_2_ddr_w_upsizer.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/clocking/mig_7series_v4_2_clk_ibuf.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/clocking/mig_7series_v4_2_infrastructure.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/clocking/mig_7series_v4_2_iodelay_ctrl.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/clocking/mig_7series_v4_2_tempmon.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/controller/mig_7series_v4_2_arb_mux.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/controller/mig_7series_v4_2_arb_row_col.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/controller/mig_7series_v4_2_arb_select.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/controller/mig_7series_v4_2_bank_cntrl.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/controller/mig_7series_v4_2_bank_common.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/controller/mig_7series_v4_2_bank_compare.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/controller/mig_7series_v4_2_bank_mach.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/controller/mig_7series_v4_2_bank_queue.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/controller/mig_7series_v4_2_bank_state.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/controller/mig_7series_v4_2_col_mach.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/controller/mig_7series_v4_2_mc.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/controller/mig_7series_v4_2_rank_cntrl.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/controller/mig_7series_v4_2_rank_common.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/controller/mig_7series_v4_2_rank_mach.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/controller/mig_7series_v4_2_round_robin_arb.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/ecc/mig_7series_v4_2_ecc_buf.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/ecc/mig_7series_v4_2_ecc_dec_fix.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/ecc/mig_7series_v4_2_ecc_gen.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/ecc/mig_7series_v4_2_ecc_merge_enc.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/ecc/mig_7series_v4_2_fi_xor.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/ip_top/mig_7series_v4_2_memc_ui_top_axi.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/ip_top/mig_7series_v4_2_mem_intfc.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/phy/mig_7series_v4_2_ddr_byte_group_io.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/phy/mig_7series_v4_2_ddr_byte_lane.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/phy/mig_7series_v4_2_ddr_calib_top.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/phy/mig_7series_v4_2_ddr_if_post_fifo.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/phy/mig_7series_v4_2_ddr_mc_phy.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/phy/mig_7series_v4_2_ddr_mc_phy_wrapper.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/phy/mig_7series_v4_2_ddr_of_pre_fifo.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/phy/mig_7series_v4_2_ddr_phy_4lanes.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/phy/mig_7series_v4_2_ddr_phy_ck_addr_cmd_delay.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/phy/mig_7series_v4_2_ddr_phy_dqs_found_cal.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/phy/mig_7series_v4_2_ddr_phy_dqs_found_cal_hr.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/phy/mig_7series_v4_2_ddr_phy_init.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/phy/mig_7series_v4_2_ddr_phy_ocd_cntlr.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/phy/mig_7series_v4_2_ddr_phy_ocd_data.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/phy/mig_7series_v4_2_ddr_phy_ocd_edge.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/phy/mig_7series_v4_2_ddr_phy_ocd_lim.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/phy/mig_7series_v4_2_ddr_phy_ocd_mux.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/phy/mig_7series_v4_2_ddr_phy_ocd_po_cntlr.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/phy/mig_7series_v4_2_ddr_phy_ocd_samp.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/phy/mig_7series_v4_2_ddr_phy_oclkdelay_cal.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/phy/mig_7series_v4_2_ddr_phy_prbs_rdlvl.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/phy/mig_7series_v4_2_ddr_phy_rdlvl.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/phy/mig_7series_v4_2_ddr_phy_tempmon.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/phy/mig_7series_v4_2_ddr_phy_top.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/phy/mig_7series_v4_2_ddr_phy_wrcal.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/phy/mig_7series_v4_2_ddr_phy_wrlvl.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/phy/mig_7series_v4_2_ddr_phy_wrlvl_off_delay.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/phy/mig_7series_v4_2_ddr_prbs_gen.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/phy/mig_7series_v4_2_ddr_skip_calib_tap.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/phy/mig_7series_v4_2_poc_cc.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/phy/mig_7series_v4_2_poc_edge_store.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/phy/mig_7series_v4_2_poc_meta.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/phy/mig_7series_v4_2_poc_pd.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/phy/mig_7series_v4_2_poc_tap_base.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/phy/mig_7series_v4_2_poc_top.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/ui/mig_7series_v4_2_ui_cmd.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/ui/mig_7series_v4_2_ui_rd_data.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/ui/mig_7series_v4_2_ui_top.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/ui/mig_7series_v4_2_ui_wr_data.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/ddr3_mig_sim.v" \
"../../../../project_1.gen/sources_1/ip/ddr3/ddr3/user_design/rtl/ddr3.v" \
"../../../../../src/fdma_test.v" \
"../../../../../src/signal_sync.v" \
"../../../../../src/uiFDMA.v" \
"../../../../../imports/wiredly.v" \

D:\\questa202101\\win64\\vlog  -incr -mfcu -sv -work xil_defaultlib  "+incdir+../../../../../imports" \
"../../../../../imports/ddr3_model.sv" \

D:\\questa202101\\win64\\vlog  -incr -mfcu -work xil_defaultlib  "+incdir+../../../../../imports" \
"../../../../../tb/DDR_AXI_tb.v" \

# compile glbl module
D:\\questa202101\\win64\\vlog -work xil_defaultlib "glbl.v"

quit -force

elaborate.bat:优化

@echo off
REM ****************************************************************************
REM Vivado (TM) v2021.1 (64-bit)
REM
REM Filename    : elaborate.bat
REM Simulator   : Mentor Graphics Questa Advanced Simulator
REM Description : Script for elaborating the compiled design
REM
REM Generated by Vivado on Sun Mar 24 21:40:34 +0800 2024
REM SW Build 3247384 on Thu Jun 10 19:36:33 MDT 2021
REM
REM IP Build 3246043 on Fri Jun 11 00:30:35 MDT 2021
REM
REM usage: elaborate.bat
REM
REM ****************************************************************************
set bin_path=D:\\questa202101\\win64
call %bin_path%/vsim  -c -do "do {DDR_AXI_tb_elaborate.do}" -l elaborate.log
if "%errorlevel%"=="1" goto END
if "%errorlevel%"=="0" goto SUCCESS
:END
exit 1
:SUCCESS
exit 0

 DDR_AXI_tb_elaborate.do

######################################################################
#
# File name : DDR_AXI_tb_elaborate.do
# Created on: Sun Mar 24 21:40:34 +0800 2024
#
# Auto generated by Vivado for 'behavioral' simulation
#
######################################################################
D:\\questa202101\\win64\\vopt +acc=npr -L xil_defaultlib -L unisims_ver -L unimacro_ver -L secureip -L xpm -work xil_defaultlib xil_defaultlib.DDR_AXI_tb xil_defaultlib.glbl -o DDR_AXI_tb_opt

quit -force

simulate.bat:启动仿真

@echo off
REM ****************************************************************************
REM Vivado (TM) v2021.1 (64-bit)
REM
REM Filename    : simulate.bat
REM Simulator   : Mentor Graphics Questa Advanced Simulator
REM Description : Script for simulating the design by launching the simulator
REM
REM Generated by Vivado on Sun Mar 24 21:40:47 +0800 2024
REM SW Build 3247384 on Thu Jun 10 19:36:33 MDT 2021
REM
REM IP Build 3246043 on Fri Jun 11 00:30:35 MDT 2021
REM
REM usage: simulate.bat
REM
REM ****************************************************************************
set bin_path=D:\\questa202101\\win64
call %bin_path%/vsim   -do "do {DDR_AXI_tb_simulate.do}" -l simulate.log
if "%errorlevel%"=="1" goto END
if "%errorlevel%"=="0" goto SUCCESS
:END
exit 1
:SUCCESS
exit 0

 DDR_AXI_tb_simulate.do

######################################################################
#
# File name : DDR_AXI_tb_simulate.do
# Created on: Sun Mar 24 21:40:47 +0800 2024
#
# Auto generated by Vivado for 'behavioral' simulation
#
######################################################################
vsim -lib xil_defaultlib DDR_AXI_tb_opt

set NumericStdNoWarnings 1
set StdArithNoWarnings 1

do {DDR_AXI_tb_wave.do}

view wave
view structure
view signals

do {DDR_AXI_tb.udo}

run 1000ns

3.移植到questasim进行独立仿真

参照上面仿真步骤以及之前博文(使用tcl脚本在questasim中仿真vivado工程)中questasim脚本仿真流程,编写仿真脚本

sim_axi_ddr.tcl


set system_name      DDR_MIG
set TOP_LEVEL_NAME   DDR_AXI_tb

vlib   questa_lib
vlib ./questa_lib/work
vlib ./questa_lib/msim
vlib ./questa_lib/msim/work
# compile system, only need to run once (without IP and src changes)
alias build {
  # compile ddr3 simulation model
   vlog  -mfcu -work work -f  filelist.f
   vlog  -mfcu -work work   ../../../src/axi_ddr/imports/wiredly.v
   vlog  -mfcu -sv -work work   ../../../src/axi_ddr/imports/ddr3_model.sv
   # compile glbl module
   vlog -work work "glbl.v"
   # compile user module
   vlog -incr -mfcu -work work ../../../src/axi_ddr/*.v
   vlog  -incr -mfcu -work work DDR_AXI_tb.v
}
alias elab_ddr3 {
  vopt +acc=npr -L work -L unisims_ver -L unimacro_ver -L secureip -L xpm -work work work.DDR_AXI_tb work.glbl -o DDR_AXI_tb_opt
  vsim -lib work DDR_AXI_tb_opt
  set NumericStdNoWarnings 1
  set StdArithNoWarnings 1
  do {DDR_AXI_tb_wave.do}
  view wave
  view structure
  view signals

}


alias rerun {
   elab_ddr3
   log -rec /*
   run -all
}

 源文件filelist.f

../../../src/axi_ddr/rtl/axi/mig_7series_v4_2_axi_ctrl_addr_decode.v
../../../src/axi_ddr/rtl/axi/mig_7series_v4_2_axi_ctrl_read.v
../../../src/axi_ddr/rtl/axi/mig_7series_v4_2_axi_ctrl_reg.v
../../../src/axi_ddr/rtl/axi/mig_7series_v4_2_axi_ctrl_reg_bank.v
../../../src/axi_ddr/rtl/axi/mig_7series_v4_2_axi_ctrl_top.v
../../../src/axi_ddr/rtl/axi/mig_7series_v4_2_axi_ctrl_write.v
../../../src/axi_ddr/rtl/axi/mig_7series_v4_2_axi_mc.v
../../../src/axi_ddr/rtl/axi/mig_7series_v4_2_axi_mc_ar_channel.v
../../../src/axi_ddr/rtl/axi/mig_7series_v4_2_axi_mc_aw_channel.v
../../../src/axi_ddr/rtl/axi/mig_7series_v4_2_axi_mc_b_channel.v
../../../src/axi_ddr/rtl/axi/mig_7series_v4_2_axi_mc_cmd_arbiter.v
../../../src/axi_ddr/rtl/axi/mig_7series_v4_2_axi_mc_cmd_fsm.v
../../../src/axi_ddr/rtl/axi/mig_7series_v4_2_axi_mc_cmd_translator.v
../../../src/axi_ddr/rtl/axi/mig_7series_v4_2_axi_mc_fifo.v
../../../src/axi_ddr/rtl/axi/mig_7series_v4_2_axi_mc_incr_cmd.v
../../../src/axi_ddr/rtl/axi/mig_7series_v4_2_axi_mc_r_channel.v
../../../src/axi_ddr/rtl/axi/mig_7series_v4_2_axi_mc_simple_fifo.v
../../../src/axi_ddr/rtl/axi/mig_7series_v4_2_axi_mc_wrap_cmd.v
../../../src/axi_ddr/rtl/axi/mig_7series_v4_2_axi_mc_wr_cmd_fsm.v
../../../src/axi_ddr/rtl/axi/mig_7series_v4_2_axi_mc_w_channel.v
../../../src/axi_ddr/rtl/axi/mig_7series_v4_2_ddr_axic_register_slice.v
../../../src/axi_ddr/rtl/axi/mig_7series_v4_2_ddr_axi_register_slice.v
../../../src/axi_ddr/rtl/axi/mig_7series_v4_2_ddr_axi_upsizer.v
../../../src/axi_ddr/rtl/axi/mig_7series_v4_2_ddr_a_upsizer.v
../../../src/axi_ddr/rtl/axi/mig_7series_v4_2_ddr_carry_and.v
../../../src/axi_ddr/rtl/axi/mig_7series_v4_2_ddr_carry_latch_and.v
../../../src/axi_ddr/rtl/axi/mig_7series_v4_2_ddr_carry_latch_or.v
../../../src/axi_ddr/rtl/axi/mig_7series_v4_2_ddr_carry_or.v
../../../src/axi_ddr/rtl/axi/mig_7series_v4_2_ddr_command_fifo.v
../../../src/axi_ddr/rtl/axi/mig_7series_v4_2_ddr_comparator.v
../../../src/axi_ddr/rtl/axi/mig_7series_v4_2_ddr_comparator_sel.v
../../../src/axi_ddr/rtl/axi/mig_7series_v4_2_ddr_comparator_sel_static.v
../../../src/axi_ddr/rtl/axi/mig_7series_v4_2_ddr_r_upsizer.v
../../../src/axi_ddr/rtl/axi/mig_7series_v4_2_ddr_w_upsizer.v
../../../src/axi_ddr/rtl/clocking/mig_7series_v4_2_clk_ibuf.v
../../../src/axi_ddr/rtl/clocking/mig_7series_v4_2_infrastructure.v
../../../src/axi_ddr/rtl/clocking/mig_7series_v4_2_iodelay_ctrl.v
../../../src/axi_ddr/rtl/clocking/mig_7series_v4_2_tempmon.v
../../../src/axi_ddr/rtl/controller/mig_7series_v4_2_arb_mux.v
../../../src/axi_ddr/rtl/controller/mig_7series_v4_2_arb_row_col.v
../../../src/axi_ddr/rtl/controller/mig_7series_v4_2_arb_select.v
../../../src/axi_ddr/rtl/controller/mig_7series_v4_2_bank_cntrl.v
../../../src/axi_ddr/rtl/controller/mig_7series_v4_2_bank_common.v
../../../src/axi_ddr/rtl/controller/mig_7series_v4_2_bank_compare.v
../../../src/axi_ddr/rtl/controller/mig_7series_v4_2_bank_mach.v
../../../src/axi_ddr/rtl/controller/mig_7series_v4_2_bank_queue.v
../../../src/axi_ddr/rtl/controller/mig_7series_v4_2_bank_state.v
../../../src/axi_ddr/rtl/controller/mig_7series_v4_2_col_mach.v
../../../src/axi_ddr/rtl/controller/mig_7series_v4_2_mc.v
../../../src/axi_ddr/rtl/controller/mig_7series_v4_2_rank_cntrl.v
../../../src/axi_ddr/rtl/controller/mig_7series_v4_2_rank_common.v
../../../src/axi_ddr/rtl/controller/mig_7series_v4_2_rank_mach.v
../../../src/axi_ddr/rtl/controller/mig_7series_v4_2_round_robin_arb.v
../../../src/axi_ddr/rtl/ecc/mig_7series_v4_2_ecc_buf.v
../../../src/axi_ddr/rtl/ecc/mig_7series_v4_2_ecc_dec_fix.v
../../../src/axi_ddr/rtl/ecc/mig_7series_v4_2_ecc_gen.v
../../../src/axi_ddr/rtl/ecc/mig_7series_v4_2_ecc_merge_enc.v
../../../src/axi_ddr/rtl/ecc/mig_7series_v4_2_fi_xor.v
../../../src/axi_ddr/rtl/ip_top/mig_7series_v4_2_memc_ui_top_axi.v
../../../src/axi_ddr/rtl/ip_top/mig_7series_v4_2_mem_intfc.v
../../../src/axi_ddr/rtl/phy/mig_7series_v4_2_ddr_byte_group_io.v
../../../src/axi_ddr/rtl/phy/mig_7series_v4_2_ddr_byte_lane.v
../../../src/axi_ddr/rtl/phy/mig_7series_v4_2_ddr_calib_top.v
../../../src/axi_ddr/rtl/phy/mig_7series_v4_2_ddr_if_post_fifo.v
../../../src/axi_ddr/rtl/phy/mig_7series_v4_2_ddr_mc_phy.v
../../../src/axi_ddr/rtl/phy/mig_7series_v4_2_ddr_mc_phy_wrapper.v
../../../src/axi_ddr/rtl/phy/mig_7series_v4_2_ddr_of_pre_fifo.v
../../../src/axi_ddr/rtl/phy/mig_7series_v4_2_ddr_phy_4lanes.v
../../../src/axi_ddr/rtl/phy/mig_7series_v4_2_ddr_phy_ck_addr_cmd_delay.v
../../../src/axi_ddr/rtl/phy/mig_7series_v4_2_ddr_phy_dqs_found_cal.v
../../../src/axi_ddr/rtl/phy/mig_7series_v4_2_ddr_phy_dqs_found_cal_hr.v
../../../src/axi_ddr/rtl/phy/mig_7series_v4_2_ddr_phy_init.v
../../../src/axi_ddr/rtl/phy/mig_7series_v4_2_ddr_phy_ocd_cntlr.v
../../../src/axi_ddr/rtl/phy/mig_7series_v4_2_ddr_phy_ocd_data.v
../../../src/axi_ddr/rtl/phy/mig_7series_v4_2_ddr_phy_ocd_edge.v
../../../src/axi_ddr/rtl/phy/mig_7series_v4_2_ddr_phy_ocd_lim.v
../../../src/axi_ddr/rtl/phy/mig_7series_v4_2_ddr_phy_ocd_mux.v
../../../src/axi_ddr/rtl/phy/mig_7series_v4_2_ddr_phy_ocd_po_cntlr.v
../../../src/axi_ddr/rtl/phy/mig_7series_v4_2_ddr_phy_ocd_samp.v
../../../src/axi_ddr/rtl/phy/mig_7series_v4_2_ddr_phy_oclkdelay_cal.v
../../../src/axi_ddr/rtl/phy/mig_7series_v4_2_ddr_phy_prbs_rdlvl.v
../../../src/axi_ddr/rtl/phy/mig_7series_v4_2_ddr_phy_rdlvl.v
../../../src/axi_ddr/rtl/phy/mig_7series_v4_2_ddr_phy_tempmon.v
../../../src/axi_ddr/rtl/phy/mig_7series_v4_2_ddr_phy_top.v
../../../src/axi_ddr/rtl/phy/mig_7series_v4_2_ddr_phy_wrcal.v
../../../src/axi_ddr/rtl/phy/mig_7series_v4_2_ddr_phy_wrlvl.v
../../../src/axi_ddr/rtl/phy/mig_7series_v4_2_ddr_phy_wrlvl_off_delay.v
../../../src/axi_ddr/rtl/phy/mig_7series_v4_2_ddr_prbs_gen.v
../../../src/axi_ddr/rtl/phy/mig_7series_v4_2_ddr_skip_calib_tap.v
../../../src/axi_ddr/rtl/phy/mig_7series_v4_2_poc_cc.v
../../../src/axi_ddr/rtl/phy/mig_7series_v4_2_poc_edge_store.v
../../../src/axi_ddr/rtl/phy/mig_7series_v4_2_poc_meta.v
../../../src/axi_ddr/rtl/phy/mig_7series_v4_2_poc_pd.v
../../../src/axi_ddr/rtl/phy/mig_7series_v4_2_poc_tap_base.v
../../../src/axi_ddr/rtl/phy/mig_7series_v4_2_poc_top.v
../../../src/axi_ddr/rtl/ui/mig_7series_v4_2_ui_cmd.v
../../../src/axi_ddr/rtl/ui/mig_7series_v4_2_ui_rd_data.v
../../../src/axi_ddr/rtl/ui/mig_7series_v4_2_ui_top.v
../../../src/axi_ddr/rtl/ui/mig_7series_v4_2_ui_wr_data.v
../../../src/axi_ddr/rtl/ddr3_mig_sim.v
../../../src/axi_ddr/rtl/ddr3.v

打开questasim执行仿真脚本,结果与vivado联合questasim仿真结果一致

3.1在transcript命令行中cd到脚本文件路径下

3.2 source脚本文件,并执行build编译源文件

3.3 rerun,启动波形仿真

波形界面

4.注意事项

4.1 MEM_BITS

*如果需要仿真的地址空间太大需要修改ddr3_parameters.vh文件中的MEM_BITS,否则会报ERROR: Memory overflow. Write to Address 7000fe with data xxx will be lost You must increase the MEM_BITS parameter of define MAX_MEM.

MEM_BITS定义了ddr3_model.sv中地址位宽,默认为15
    在ddr3_parameters.vh文件中, 根据需要扩充MEM_BITS参数,比如修改至20。

### VivadoModelSim联合仿真配置教程 为了实现VivadoModelSim的联合仿真,需按照以下流程操作: #### 1. 安装环境准备 确保已正确安装VivadoModelSim软件。例如,在引用中提到的版本组合为Vivado 2019.2 和 ModelSim 10.7[^1] 或者更高版本如Vivado 2023.1 和 ModelSim 2023[^3]。 如果使用的ModelSim版本并非官方推荐版本,则可能会遇到一些兼容性问题,但仍可尝试运行。对于非推荐版本的情况,可能需要手动调整某些路径或忽略部分警告信息。 --- #### 2. 配置Vivado以支持ModelSimVivado环境中启用ModelSim作为外部仿真工具: - 打开 **Tools -> Settings**。 - 切换至 **Simulation** 页面。 - 将默认仿真器更改为 **"Use Specified Simulator"** 并选择 **"Mentor Graphics ModelSim/QuestaSim"**[^2]。 完成后保存设置并关闭窗口。 --- #### 3. 创建仿真库 创建用于存储设计文件的仿真库目录结构: ```bash mkdir -p ./simulation/modelsim/work ``` 随后通过命令行初始化该工作区: ```tcl vlib work vmap work work ``` 以上TCL脚本语句应在ModelSim控制台执行,目的是定义一个新的虚拟库 `work` 来存放后续编译的结果[^2]。 --- #### 4. 编译RTL源码到ModelSim 利用Vivado生成适用于ModelSim仿真的网表文件(Netlist),具体步骤如下: - 在项目管理界面右键点击顶层模块; - 依次选择 **Generate Tcl Script...**, 然后勾选选项框中的 “Include IP” 及其他必要参数; - 运行生成后的 `.tcl` 文件加载所有依赖项进入目标仿真环境; 接着启动ModelSim GUI模式,并导入由上述过程产生的全部组件对象[^1]。 --- #### 5. 设置波形观察点及激励信号输入 构建测试向量来驱动待验证电路行为表现正常与否的关键在于合理规划初始条件设定以及周期变化规律描述等方面的工作内容安排情况说明文档里面已经详细介绍过了所以这里不再赘述[^2]。 最后一步便是实际运行起来看效果啦! --- ### 注意事项 在整个过程中需要注意几个常见错误及其解决办法: - 如果发现无法识别特定语法特性可能是由于所选用的标准版本较低造成的,请适当提升它直到满足需求为止即可消除此类异常现象的发生几率降到最低限度之内去考虑其它可能性因素存在与否再做进一步判断处理措施实施计划方案制定出来之后再去付诸行动落实到位才行啊朋友们加油吧![^3] ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值