基于modelsim的仿真 教程_第1页
基于modelsim的仿真 教程_第2页
基于modelsim的仿真 教程_第3页
基于modelsim的仿真 教程_第4页
基于modelsim的仿真 教程_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于modelsim的仿真

内容概要FPGA设计哪些过程需要仿真?前仿真与后仿真Modelsim的不同版本Modelsim的仿真过程测试向量的编写FPGA设计中哪些过程需要仿真设计规范

设计输入RTL仿真设计综合布局布线门级仿真时序分析系统验证系统产品设计输入FPGA设计中哪些过程需要仿真FPGA设计过程中,主要用到的仿真是RTL仿真、门级仿真;RTL仿真就是通常所说的前仿真或者功能仿真,它只考虑在理想情况下,用户代码的时序的正确性;用户可通过功能仿真,来检验逻辑功能的时序是否是期待的时序;门级仿真又叫后仿真,它是通过综合、布局布线生成网表后,把各种延时信息进行综合考虑的一种仿真;通过后仿真,用户可知道实际电路运行的情况,及相关的时序信息;Modelsim版本介绍针对不同的应用,modelsim分modelsimXE、modelsimPE、modelsimSE、modelsim_altera等版本;a,modelsimXE针对xilinx的FPGA器件的仿真应用,用户使用时无须库编译;b,modelsim_altera

针对altear的FPGA器件的仿真应用,仿真库已经编译好,用户可直接使用;c,modelsimPE主要是做设计验证用,altera/Xilinx/lattice器件,都需要进行库编译与指定;modelsimPE不支持verilog与vhdl的混合仿真;相比SE版本,仿真速度也不快;d,modelsimSE也是做设计验证用,使用时,需要对不同厂家的器件库进行编译,并且要指定相应库路径;modelsimSE支持混合设计及仿真;并且仿真速度很快;另外带许多其它附加功能,比如代码覆盖率等;Modelsim的仿真过程窗口介绍workspaceobjectswavetranscript新建工程<1>准备需要仿真的源文件及TB文件;<2>启动modelsim_altera6.4a,新建工程:sim_tech_ttModelsim的仿真过程加载源文件及TB文件<1>点击addexitingfile<2>Browse<3>selectfiles<4>源文件加载后的未编译状态文件未编译编译源文件及TB文件<1>编译所有文件CompileAll编译的文件<2>编译出错

当编译出错时,会指示哪个源文件出错<3>查找错误

通过点击出错的源文件,会找出源文件的错误点<4>具体的错误定位

通过点击错误行,就能定位到源文件中错误编译成功编译成功启动仿真

源文件全编译成功后,就可加载仿真simulate加载库文件

altera常用的库有:220_models/altear_mf/sgate不同的器件有不同的库加载OK的库加载工作库(work)<1>在work库下加载TB文件; <2>加载成功后加载的源文件选择要观察的信号 <1>在objects栏时,选择要观察的信号; <2>加入到wave窗口 <3>已加入的信号Restart

modelsim软件有三种操作方式:命令/GUI/TCL

在transcript窗口键入:restartrestartrun

用户可以根据需要来确定仿真时间长度;

时间单位:ns/us/ms/minrun500us

当运行完后,可看到仿真波形仿真波形查看波形 <1>放大波形局部

可通过I/O,F5/F6/F7来放大缩小波形; <2>放大后的波形波形测量 <1>新增光标 <2>定位光标

<3>测量信号波形测量结果波形颜色设置 <1>属性 <2>设置颜色 <3>设置后的波形显示 <4>多种颜色设置效果testbench编写测试向量文件

测试文件(Testbench)以模拟的方式来验证逻辑时序的正确性;它以源的方式来激励用户编写的逻辑功能模块;测试激励源测试激励结果用户逻辑模块TB文件结构 <1>TB文件只是用来测试的模块,对外没有输入输出信号引脚; `timescale1ns/100ps//时间精度 modulemii_top_tb();…… ……

endmodule <2>激励端口

相对于TB文件,被测模块的输入是TB的输出,而被测模块的输出是TB的输入;

即在TB文件中,相应于被测试模块的输入激励设置为reg型,输出相应设置为wire类型,双向端口inout在测试中需要进行处理。modulemii_top_tb();

reg

clk,rst wiremii_tx_en; wire[3:0]mii_tx_dat; …….

endmoduleTB被测试模块双向端口的激励

inout端口在TB中定义为wire型变量;在TB中双向端口设置中间变量inout_reg,作为inout

的输出寄存,然后用输出使能控制传输方向;

………

wireinout_port;

reg

inout_reg;

reg

oe; assigninout_port=oe?inout_reg:1’bz; …….测试双向端口实例modulebidir_infer(DATA,READ_WRITE);inputREAD_WRITE;inout[1:0]DATA;reg[1:0]LATCH_OUT;always@(READ_WRITEorDATA)beginif(READ_WRITE==1)LATCH_OUT<=DATA;endassignDATA=(READ_WRITE==1)?2’bZ:LATCH_OUT;endmodulemoduletest_bidir_ver;

reg

read_writet;

reg[1:0]data_in; wire[1:0]datat,data_out;

bidir_infer

uut(datat,read_writet); assigndatat=(read_writet==1)?data_in:2’bz; assigndata_out=(read_writet==0)?datat:2’bz;initialbegin

read_writet=1;

data_in=11; #50read_writet=0;endendmodule时间精度格式:`timescalereference_time/precisionreference_time:单位时间,根据用户模块的输入输出时钟周期来决定;precision:单位时间精确度,即参考时钟可达的最大精度;示例:`timescale1ns/100ps单位时间为1ns,可精确到0.xx位;比如1.23/3.75;延时单位 格式:#times[ns/us/ms/min]

示例:#2ns;#40; 说明:延时2ns;延时40个单位时间; 在TB文件中,通过延时#,可以设置各个信号的赋值情况;

initialbegin reset=0;#100;reset=1;endt0t100时钟激励 在TB中,时钟激励源的生成有好几种方式; 比如生成50M时钟,周期为20ns,则可以用如下方式:

`timescale1ns/100ps

parameterCLK_PERIOD=20;always#(CLK_PERIOD/2)clk_50m=~clk50m;

或者:

forever#(CLK_PERIOD/2)clk_50m=~clk50m;信号生成

<1>:单个控制信号可以采用延时语句来生成;

比如:

initialbegin

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; endDFFldqclkdenrst_n

<2>多个信号 当有多个信号需要生成时,可根据各种事情来生成;

<3>数据流 数据流除了可以采用条件生成外,还可以通过$readmemh/readmemb语句生成;或者把数据包以*.mif/*.coe格式存放到ROM中来调用; initial$readmemh(“*.mif“,rom)$monitor/$display

modelsim

可以通过一些系统函数来打印输出相关的信号;为仿真提供监测与比较;

………

$timeformat(-9,1,"ns",12);

$display("Timeclk

rst_nldendq"); $monitor(“%t%b%b

%b

%b

%b%b“,$time,clk,rst_n,ld,en,d,q);

……

上面的语句是监视DFF各端口信号变化并打印;宏定义 在TB文件中,可以以宏定义语句来设置各种不同的仿真任务;

`defineTBASE_100M `ifdefTBASE_100M ……..//仿真任务1,执行100M的仿真任务`else ........//仿真任务2,默认10M的仿真任务`endif

上面语句中,通过TBASE_100M宏来仿真100M/10M时两种情况;

synopsys

translate_off/synopsys

translate_on 在模块中,可以通过translate_off/translate_on与宏定义相配合来设置各种仿真条件(包括监视打印)。此方式可以让用户知道逻辑的运行情况;

//synopsys

translate_off`ifdefTBASE_100M

if(rising_edge_syn) $display(“havecheckthevalidIP!!”);`endif//synopsys

translate_on

介于两者之间的语句只在仿真时起作用,不会综合成门电路;其它仿真方式

<1>TripleSpeedEthernetMAC的仿真

[方法一]

1,modelsim中新建工程,把*.vo、tb.v、及MAC 的测试模块的所能*.v文件加入工程;

2,编译加入的所有文件;

3,启动仿真,指定库路径:220model、 altera_mf、sgate; 仿真库在$90\modelsim_ae\altera\verilog下;

4,打开wave窗口,加入需要观察的信号即可;

[方式二]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,在modelsimTCL窗口输入:

setmemory_modelddr2 source*.tcl//*.tcl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论