首先 ddr_eval_se.do 文件
if {[file exists work]} { file delete -force work } vlib work vmap work work #==== compile vlog -novopt +define+NO_DEBUG +define+ECP +define+ECP2 \ -y ../../../models/ecp3 +libext+.v \ -y ../../../models/mem +libext+.v \ -y C:/ispTOOLS8_1/ispcpld/tcltk/lib/ipwidgets/ispipbuilder/../../../../../cae_library/simulation/verilog/ecp3 +libext+.v \ -y C:/ispTOOLS8_1/ispcpld/tcltk/lib/ipwidgets/ispipbuilder/../../../../../cae_library/simulation/verilog/pmi +libext+.v \ +incdir+../../../testbench/tests/ecp3 \ +incdir+../../src/params \ +incdir+../../../models/mem \ ../../src/params/ddr_sdram_mem_params.v \ ../../../models/ecp3/DQSBUFF.v \ ../../../../ddr_beh.v \ ../../../../ddr.v \ ../../sim/ddr_sdram_mem_top.v \ ../../../testbench/top/ecp3/monitor.v \ ../../../testbench/top/ecp3/test_mem_ctrl.v #==== run the simulation vsim -novopt -t 1ps work.test_mem_ctrl -l ddr_eval.log do wave.do
vlib - 建立一个新的工作库。
如:vlib work
在当前目录建立逻辑库work,运行后会在当前目录下找到work文件夹。
vlog - 编译verilog文件
如:vlog +incdir+YOUR_SOURCE_PATH -work work foo.v
编译foo.v文件到制定的逻辑库中,这里指定的是work库。+incdir+YOUR_SOURCE_PATH
选项是指在verilog文件中出现`include "xxx.v" 时包含文件的搜索路径,缺省是搜索当前路径,然后是YOUR_SOURCE_PATH指定的路径。
+define+<macro_name>[=<macro_text>]
允许用户在命令行中定义宏定义,等效于编译器指令:
`define <macro_name> <macro_text>
用户可以指定多个宏定义,如下:
vlog +define+one=r1+two=r2+three=r3 test.v
命令行的宏定义会覆盖在源文件中用`define定义的相同名字的宏定义
vmap - 映射逻辑库名到指定的目录
vsim - 启动仿真
如:vsim -c -l vsim.log -do ./YourDo.do -L ./work work.foo
开始仿真,-c 选项让vsim工作在commandline模式;-l 选项是输出log文件到vsim.log; -do 选项是开始仿真后运行tcl脚本文件;-L 选项是指定工作逻辑库;work.foo是仿真的top level module。
//////////////////////////////////////////////////////////////////////////////////////////////////////////
modelsim的一些常用命令
vlib work 建库
vmap work work 映射
vlog div.v tdiv.v 编译verilog写的代码
vcom div.vhl tdiv.vhl 编译vhdl 写的代码
vsim work.module 仿真相应模块
view wave/dataflow 显示波形窗口/数据流窗口
restart -f
run -all
quit -sim 退出仿真
pwd
cd
add wave /tdiv/* 把tdiv中的所有信号都加到wave波形图中
当然在modelsim中也可以用批处理文件,比如有一批处理文件file.do,则可用如下命令来调用它
do file.do
关于do文件的编写,有一个快速学习的好方法:
你执行的每一步鼠标点击or选择操作,在modelsim的命令行都有相应的代码输
出,你可以仿照写出正确的do文件。
下面 是我修改的 test_mem_ctrl.v文件附上 链接 (http://download.csdn.net/detail/angelbosj/6689137)
讲一下 testbench , 我是测试一下 从地址 004403中 写进去 (64bit * 4 = 32 byte )然后去读这个连续 去读这个地址。有图 如下:
不过 有一点 需要 特别注意的是 : 必须保证 数据 完全 写进 ddr 里面去 再去 读, 不然写进去的第一个 8字节的数据 会 读不出来 。所以在 写完数据后 延时了 5000ps后,我才去 读数据, 事实上这也很合乎逻辑。
终于 算是 会用了这个 iP,前前后后 我花了 近 半个月的时间, 不过还是很有收获的。 突然间意识中 冥冥之中就是 验证了一句真理, 难者不会,会者不难。