当前位置:文档之家› modelsim仿真教程

modelsim仿真教程


Modelsim版本介绍


针对不同的应用,modelsim分modelsim XE、modelsim PE、 modelsim SE、modelsim_altera等版本; a,modelsim XE针对xilinx的FPGA器件的仿真应用,用户 使用时无须库编译; b,modelsim_altera 针对altear的FPGA器件的仿真应用, 仿真库已经编译好,用户可直接使用; c,modelsim PE主要是做设计验证用,altera/Xilinx/lattice 器件,都需要进行库编译与指定;modelsim PE不支持 verilog与vhdl的混合仿真;相比SE版本,仿真速度也不快; d,modelsim SE 也是做设计验证用,使用时,需要对不同 厂家的器件库进行编译,并且要指定相应库路径; modelsim SE 支持混合设计及仿真;并且仿真速度很快;另 外带许多其它附加功能,比如代码覆盖率等;
时钟激励 在TB中,时钟激励源的生成有好几种方式; 比如生成50M时钟,周期为20ns,则可以用如下 方式: `timescale 1ns/100ps parameter CLK_PERIOD = 20; always #(CLK_PERIOD / 2) clk_50m = ~clk50m; 或者: forever #(CLK_PERIOD / 2) clk_50m = ~clk50m;

双向端口的激励 inout端口在TB中定义为wire型变量;在TB中双向 端口设置中间变量inout_reg ,作为inout 的输出寄 存,然后用输出使能控制传输方向; ……… wire inout_port; reg inout_reg; reg oe; assign inout_port = oe ? inout_reg : 1’bz; …….
基于modelsim的仿真
内容概要

FPGA设计哪些过程需要仿真? 前仿真与后仿真 Modelsim的不同版本 Modelsim的仿真过程 测试向量的编写
FPGA设计中哪些过程需要仿真
设计规范 设计输入 设计输入 RTL仿真 设计综合 布局布线 门级仿真 时序分析 系统验证
系统产品

synopsys translate_off / synopsys translate_on 在模块中,可以通过translate_off/translate_on与 宏定义相配合来设置各种仿真条件(包括监视打 印)。此方式可以让用户知道逻辑的运行情况; //synopsys translate_off `ifdef TBASE_100M if(rising_edge_syn) $display(“have check the valid IP !!”); `endif // synopsys translate_on 介于两者之间的语句只在仿真时起作用,不会综 合成门电路;

$monitor/$display modelsim 可以通过一些系统函数来打印输出相关 的信号;为仿真提供监测与比较; ……… $timeformat(-9,1,"ns",12); $display(" Time clk rst_n ld en d q"); $monitor(“%t %b %b %b %b %b %b“,$time,clk,rst_n,ld,en,d,q); …… 上面的语句是监视DFF各端口信号变化并打印;
module test_bidir_ver; reg read_writet; reg [1:0] data_in; wire [1:0] datat, data_out; bidir_infer uut (datat, read_writet); assign datat = (read_writet == 1) ? data_in : 2’bz; assign data_out = (read_writet == 0) ? datat : 2’bz; initial begin read_writet = 1; data_in = 11; #50 read_writet = 0; end endmodule







测试双向端口实例 module bidir_infer (DATA, READ_WRITE); input READ_WRITE ; inout [1:0] DATA ; reg [1:0] LATCH_OUT ; always @ (READ_WRITE or DATA) begin if (READ_WRITE == 1) LATCH_OUT <= DATA; end assign DATA = (READ_WRITE == 1) ? 2’bZ : LATCH_OUT; endmodule

编译成功
编译成功

启动仿真 源文件全编译成功后,就可加载仿真
simulate
加载库文件 altera常用的库有:220_models/altear_mf/sgate 不同的器件有不同的库


加载OK的库

加载工作库(work)
<1>在work库下加载TB文件;
<2>加载成功后
加载的源文件
run 500us
当运行完后,可看到仿真波形
仿真波形

查看波形 <1>放大波形局部 可通过I/O,F5/F6/F7来放大缩小波形;
<2>放大后的波形

波形测量 <1>新增光标
<2>定位光标
<3>测量信号波形
测量结果

波形颜色设置 <1>属性
<2>设置颜色
<3>设置后的波形显示
<4>多种颜色设置效果

信号生成 <1>:单个控制信号可以采用延时语句来生成; 比如: initial begin rst_n = 1’b0; ld = 1’b0; ld en = 1’b0; #20; d rst_n = 1’b1; ld = 1’b1; clk DFF #20; en ld = 1’b0; en = 1’b1; end rst_n
小结 1,基于modelsim的仿真,可以最大程度的验证逻辑 代码的时序情况; 2,仿真文件(TB)的编写,有各种不同的风格与方 式,可以参考各种范例代码,比如大的IP core都 提供相关的自测代码;Altera/Xilinx的MAC/DDR2等 大型的IP都提供相关的自测代码,并且风格各一 ,仔细阅读可学到不少东西; 3,推荐阅读《hdl chip design》《writing testbench 》

其它仿真方式 <1>Triple Speed Ethernet MAC的仿真 [方法一] 1,modelsim中新建工程,把*.vo、tb.v、及MAC 的测试模块的所能*.v文件加入工程; 2,编译加入的所有文件; 3,启动仿真,指定库路径:220model、 altera_mf、sgate; 仿真库在$90\modelsim_ae\altera\verilog下; 4,打开wave窗口,加入需要观察的信号即可;
FPGA设计中哪些过程需要仿真



FPGA设计过程中,主要用到的仿真是RTL仿真、门级仿真; RTL仿真就是通常所说的前仿真或者功能仿真,它只考虑在 理想情况下,用户代码的时序的正确性;用户可通过功能仿 真,来检验逻辑功能的时序是否是期待的时序; 门级仿真又叫后仿真,它是通过综合、布局布线生成网表后, 把各种延时信息进行综合考虑的一种仿真;通过后仿真,用 户可知道实际电路运行的情况,及相关的时序信息;
[方式二] 1,打开modelsim,关闭其它工程; 2,指定路径到已生成的MAC工程TB文件下; 3,在TB文件下找到*.tcl文件,然后在modelsim TCL窗口敲入:source *.tcl; 4, 等待软件自动编译源文件,加载库,并输出波形;
<2>DDR2的仿真 1,根据选择的DDR2芯片,到其网站下载该DDR2芯片的仿真 模型(有verilog,vhdl两个版本); 2,将下载后的DDR2芯片仿真模型解压后,复制到TB文件下; 3,用DDR2芯片仿真模型替换TB.v文件中的DDR2例化文件, 注意修改各参数; 4,打开modelsim,指定路径到DDR2工程/TB文件/modelsim; 5,在modelsim TCL窗口输入: set memory_model ddr2 source *.tcl //*.tcl文件在modelsim目录下 6, 等待软件自动编译源文件,加载相应的库,并生成信号波形 ,如果需要观察其它信号,用户可手动加入,并保存;

时间精度
格式:`timescale reference_time/precision reference_time:单位时间,根据用户模块的输入输出时钟 周期来决定; precision:单位时间精确度,即参考时钟可达的最大精度; 示例:`timescale 1ns/100ps 单位时间为1ns,可精确到0.xx位;比如1.23/3.75;

宏定义 在TB 文件中,可以以宏定义语句来设置各种不同 的仿真任务; `define TBASE_100M `ifdef TBASE_100M ……..//仿真任务1,执行100M的仿真任务 `else ........//仿真任务2,默认10M的仿真任务 `endif 上面语句中,通过TBASE_100M宏来仿真 100M/10M时两种情况;

延时单位 格式:#times [ns/us/ms/min] 示例:#2ns; #40; 说明:延时2ns; 延时40个单位时间; 在TB文件中,通过延时#,可以设置各个信号的赋 值情况; initial begin reset = 0; #100; reset = 1; end t0 t100
相关主题