文档详情

modelsim仿真教程.ppt

发布:2018-03-12约5.42千字共55页下载文档
文本预览下载声明
测试双向端口实例 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 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 时间精度 格式:`timescale reference_time/precision reference_time:单位时间,根据用户模块的输入输出时钟周期来决定; precision:单位时间精确度,即参考时钟可达的最大精度; 示例:`timescale 1ns/100ps 单位时间为1ns,可精确到0.xx位;比如1.23/3.75; 延时单位 格式:#times [ns/us/ms/min] 示例:#2ns; #40; 说明:延时2ns; 延时40个单位时间; 在TB文件中,通过延时#,可以设置各个信号的赋值情况; initial begin reset = 0; #100; reset = 1; end t0 t100 时钟激励 在TB中,时钟激励源的生成有好几种方式; 比如生成50M时钟,周期为20ns,则可以用如下方式: `timescale 1ns/100ps parameter CLK_PERIOD = 20; always #(CLK_PERIOD / 2) clk_50m = ~clk50m; 或者: forever #(CLK_PERIOD / 2) clk_50m = ~clk50m; 信号生成 1:单个控制信号可以采用延时语句来生成; 比如: initial begin rst_n = 1’b0; ld = 1’b0; en = 1’b0; #20; rst_n = 1’b1; ld = 1’b1; #20; ld = 1’b0; en = 1’b1; end 2多个信号 当有多个信号需要生成时,可根据各种事情来生成; 3数据流 数据流除了可以采用条件生成外,还可以通过$readmemh/readmemb语句生成;或者把数据包以*.mif/*.coe格式存放到ROM中来调用; initial $readmemh ( “*.mif“ , rom ) $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各端口信号变化并打印; 宏定义 在TB 文件中,可以以宏定义语句来设置各种不同的仿真任务; `define TBASE_100M `ifdef TBASE_100M ……..//仿真任务1,执行100M的仿真任务 `else ........//仿真任务2,默认10M的仿真任务 `endif 上面语句中,通过TBASE_100M宏来仿真100M/10M时两种情况; synopsys translate_off / synopsys translate_on 在模块中,可
显示全部
相似文档