页眉内容
ModelSim的仿真
1.仿真的分类
仿真过程是正确实现设计的关键环节,用来验证设计者的设计思想是否正确,及在设计
实现过程中各种分布参数引入后,其设计的功能是否依然正确无误。仿真主要分为功能仿真
和时序仿真。功能仿真是在设计输入后进行; 时序仿真是在逻辑综合后或布局布线后进行。
1). 功能仿真 ( 前仿真 )
功能仿真是指在一个设计中, 在设计实现前对所创建的逻辑进行的验证其功能是否正
确的过程。 布局布线以前的仿真都称作功能仿真, 它包括综合前仿真( Pre-Synthesis
Simulation )和综合后仿真( Post-Synthesis Simulation )。 综合前仿真主要针对基于原理
框图的设计 ; 综合后仿真既适合原理图设计 , 也适合基于 HDL 语言的设计。
2). 时序仿真(后仿真)
时序仿真使用布局布线后器件给出的模块和连线的延时信息, 在最坏的情况下对电路
的行为作出实际地估价。 时序仿真使用的仿真器和功能仿真使用的仿真器是相同的, 所需
的流程和激励也是相同的; 惟一的差别是为时序仿真加载到仿真器的设计包括基于实际布
局布线设计的最坏情况的布局布线延时, 并且在仿真结果波形图中,时序仿三七粉每日用量 真后的信号加
载了时延, 而功能仿真没有。
后仿真也称为时序仿真或者布局布线后仿真,是指电路已经映射到特定的工艺环境以
后,综合考虑电路的路径延迟与门延迟的影响,验证电路能否在一定时序条件下满足设计构
想的过程,是否存在时序违规。其输入文件为从布局布线结果中抽象出来的门级网表、
Testbench 和扩展名为 SDO 或 SDF 的标准时延文件。SDO 或 SDF 的标准时延文件不仅
包含门延迟,还包括实际布线延迟,能较好地反映芯片的实际工作情况。一般来说后仿真是
必选的,检查设计时序与实际的 FPGA 运行情况是否一致,确保设计的可靠性和稳定性。
2.仿真的作用
1). 设计出能工作的电路:因此功能仿真不是一个孤立的过程,其和综合、时序分析等形
成一个反馈工作过程,只有这个过程收敛,各个环节才有意义。而孤立的功能仿真通过是没
有意义的,如果在时序分析过程中发现时序不满足需要更改代码,则功能仿真必须从新进行。
因此正确的工作流程是:
页眉内容
将设计划分成便于团队
协调工作的“模块”
编写/修改模块代码
(电路的90%的性能由
Coding Style 决定)
不满足
在模块及进行功能仿真
针对特定的期间或工艺
综合模块,分析电路是否
满足时序约束要求
2).代码排错:功能仿真是代码排错的最重要的手段之一。4).仿真检验代码质量的一个
重要手段。测试激励的代码覆盖率至少要达到95%以上,才能基本认为代码在逻辑上是通
过质量控制的,才能进入综合步骤;5).在大的设计中,如果想通过一个激励就验证完一
个设计或者模块是不现实的。一方面是从逻辑功能上很难做到;另外一方面是因为如果在一
个激励中包括了各种情况,整个仿真过程的速度会随着计算机内存的消耗而成线性下降,效
率低下,而利用仿真能很好地解决这些问题。6).通常的做法是每一个激励只验证电路功
能的某个方面。整个电路的功能验证由数个激励共同完成。在这种验证方法中代码覆盖率更
显重要,因为可以通过代码覆盖率来控制激励对功能的覆盖程度。7).modelsim的Code
coverage不但能记录各个激励对代码的“行覆盖”和“分支覆盖”,而且能够将各个激励的覆盖
记录进行合并,做到对覆盖率的全面监测。
页眉内容
3.仿真的过程
1).综合前的功能仿真
下面以一个线性反馈移位寄存器为例用ModelSim进行功能仿真,由于用编写do文件的
方法进行仿真能极大提高仿真设计的效率,我们采用编写do文件的方式来仿真。
<1>编写TestBench文件。
<2>编写do文件。
<3>打开ModelSim,打开命令File-New-Project,在窗口中输入工程名LFSR_MS,并制定do
文件所在文件夹路径。
<4>命令控制栏中直接输入“run ”按回车进行仿真,并查看波形。
2).综合后功能仿真
<1>为工程添加库文件。去除modelsim安装目录下的只读属性(使得这个.ini
的配置文件可以被修改)
<2>打开Modelsim,更改目录File->Change directory到根目录下。
<3>新建一个库取名为alteralibrary。我使用的是Modelsim的6.2b版本,步骤是:File->
New->Library,打开之后在Library Name中写上alteralibrary,点击ok就可以了。
<4> 在Quartus安装目录先找到四个库文件,我的目录是F:Program Files Quartusquartus
edasim_lib,并复制到D:FPGA_Examp东吴 leLFSRModelSim目录下待用。
<5>在Modelsim的环境下对alteralibrary库文件进行编译。步骤是Compile -->Compile,打
开对话框,Library中选择你刚才建的库名alteralibrary,在查找范围内添加第三部我们从
Quartus中复制过来的库文件,我这里是D:FPGA_ ExampleLFSRModelSim,如果你是用
vhdl编写代码的则选择vhdl,verilog编写代码的话就选verilog(我选择的是verilog),再点击
Compile,编译完成后点击done。这10月8号是什么星座 样我们的库文件就编译完成了,其编译后的文件就存放
在我们建立的库文件alteralibrary中。
<6>打开文件,在[Library]下可以看到alteralibrary = alteralibrary,那就修改下路
径就成alteralibrary存放的路径,我把路径修改为D:/FPGA_Example/LFSR/ModelSim/Postsim
/alteralibrary。
<7>再把的只读属性选上就可以开工了,重启Modelsim就能在Library栏看到
你添加的库啦。
<8>在Quartus中打开Assignment-> Setting -> Simulation,在Tool name中选择Modelsim,在
Output Directory中指定生成的网表文件的路径,在more tting中将Generate Netlist for
Functional Simulation Only中选择ON,点击仿真就能在你指定的文件夹中输出仿真所需要
的网表文件。
<9>在Modelsim中新建工程,并添加网表文件和TestBench文件,并编译。
页眉内容
<10>仿真。首先执行Simulate->Start Simulation 在窗口中的Libraries中选择add添加
alteralibrary库文件,在work中选择仿真的TestBench文件,点击OK.
<11>添加波形并仿真。点击View-> Wave,然后将Object中的端口添加到波形查看窗口中,
在状态命令栏中输入run 20000,就能查看波形了。
3).布线后的时序仿真
对于布线后的时序仿真我们需要布线后的网表,延时文件*.sdo,testbench文件,仿真原型文
件。其仿真过程和综合后的仿真过程大体一致,只是添加的文件有所不同,这里不再重复。
附录:
线性移位寄存器verilog程序:
module LFSR
(
//input ports
SYSCLK,
RST_B,
//output port
DATA_OUT
);
//=================================
//input and output declaration
//=================================
input SYSCLK;
input RST_B;
output [7:0] DATA_OUT;
//=================================
//wire and reg declaration
//=================================
wire SYSCLK;
wire RST_B;
reg [7:0] DATA_OUT;
wire [7:0] DATA_OUT_N;
wire DO_GEN;
//=================================
//logic
//=================================
always@(podge SYSCLK or negedge RST_B)
begin
if(!RST_B)
DATA_OUT <= 8'b00000001;
e面字开头的成语 l
DATA_OUT <= DATA_OUT_N;
end
assign DO_GEN= DATA_OUT[7]^DATA_OUT[3]^DATA_OUT[2]^DATA_OUT[1];
assign DATA_OUT_N = {DATA_OUT[6:0],DO_GEN};
页眉内容
endmodule
testbench程序:
module LFSR_TB;
reg SYSCLK;
reg RST_B;
wire [7:0] DATA_OUT;
LFSR I_LFSR_TB
(
.SYSCLK (SYSCLK),
.RST_B (RST_B ),
.DATA_OUT(DATA_OUT) 什么是职能部门
);
always #20 SYSCLK = ~SY玄秘塔碑 SCLK;
initial
begin
#0 SYSCLK = 0;
RST_B = 0;
#50 RST_B = 1;
end
endmodule
do文件程序:
#新建一个工作库
vlib work
#将建立的一个工程与工作库之间映射
vmap work work
#编译两个文件
vlog ../Src/LFSR.v
vlog ../TestBench/LFSR_TB.v
#仿真,不进行优化
vsim -novopt _TB
#添加波形
add wave LFSR_TB/SYSCLK
add wave民事调解 LFSR_TB/RST_B
add wave LFSR_TB/DATA_OUT
add wave I_LFSR_TB/DO_GEN
#运行20000ns
run 20000
本文发布于:2023-04-26 22:17:59,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/fan/89/849818.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |