|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
功能仿真又叫逻辑仿真,是指在不考虑器件延时和布线延时的理想情况下对源代码进行逻辑功能的验证;而时序仿真是在布局布线后进行,它与特定的器件有关,又包含了器件和布线的延时信息,主要验证程序在目标器件中的时序关系。在有些开发环境中,如 Xilinx ISE 中,除了上述的两种基本仿真外,还包括综合后仿真,转换(post-translate)仿真,映射后(post-map)仿真等,这样做完每一步都可进行仿真验证,从而保证设计的正确性。& Y$ B0 m9 C5 d4 ?
- C5 b) Q! h, L! q* M
ModelSim 是mentor Graphics 子公司MentorTechnology 的产品,是当今最通用的FPGA 仿真器之一。ModelSim 功能强大,它支持FPGA 设计的各个阶段的仿真,不仅支持VHDL 仿真,Verilog仿真,而且支持VHDL 和Verilog 混合仿真。它不仅能做仿真,还能够对程序进行调试,测试代码覆盖率,对波形进行比较等。ModelSim 有很多版本,像ModelSim/SE 是首要版本, 除此之外还有ModelSim/XE 和ModelSim/AE,分别是为Xilinx公司和Altera 公司提供的OEM 版,其中已包含各公司的库文件,故用特定公司OEM 版进行仿真时就不需编译该公司的库了。
3 O# U" y6 h1 |
1 N z0 T% [7 C用ModelSim 进行功能仿真
! Z# T& i3 G+ n% d1 z; h4 a
4 n9 x, K5 f1 ^. P8 Y1 E0 q进行功能仿真首先要检查设计的语法是否正确;其次检查代码是否达到设计的功能要求。下文主要介绍仿真步骤和测试激励的加载。
7 [7 z" l& d' J
+ D4 z* \" k( h3 c6 T仿真步骤
* b2 |) S7 L# [4 e0 I: a( |1 M; c8 ]& I4 `9 {
(1)建立库并映射库到物理目录1 s6 C N0 _5 Q$ l
2 M# q6 j6 w0 F) T0 m
因为用ModelSim 进行仿真是建立在仿真库的基础上的(此处进行的是功能仿真,因而不用编译特定厂商的库),所以首先要建立库并把库映射到实际的物理路径。通常用户编译的文件都放在work库中,所以必须先建立work 库。有两种方法建立并映射库,第一种方法是通过图形界面,在菜单Design→Create a New Library 弹出对话框,如图1 所示。在Library Name 中输入work,如果建立其它库,可以输入其它名字。Library Map to 是映射的物理路径。第二种方法是用命令行的形式,建立库用ModelSim>vlib,映射库用ModelSim> vmap , 如建立并映射库work,就可以在ModelSim 主窗口命令提示符下输入
% D, g: }& c/ j1 d
# g/ e4 X7 n0 W, @* a8 z7 Jvlib work L, m2 s* M3 L
( z$ _" h5 O- \4 M: Qvmap work work
! m2 B4 U" ^2 `4 I" T% s4 z1 d! R* l, L; U; I% Y! J: ~. s; n# u. c
(2)编译源代码
$ p5 N$ r" @* J: q3 I" K* Z$ j( u' o$ `$ t
该步骤主要检查源文件的语法错误。实现方法有两种,一是通过菜单Design→Compile,出现选择源文件对话框,选择要编译的源文件,编译即可;二是通过命令行方式,这一步对于VHDL 和Verilog 所使用的命令是不一样的,对于VHDL 代码用vcom-work.vhd.vhd , 对于Verilog 代码用vlog-work.v.v,文件按出现的先后顺序编译,且支持增量编译。编译后的文件会放在缺省当前work 库中。$ o) u% i. r6 u/ R
( |) [' h$ `* p(3)启动仿真器7 K* V( g g* K, u+ e& c' q
Z$ b5 n4 y( k8 C# {" U5 ~该步骤主要是把所有仿真的文件加载到当前的仿真环境中。实现的方法两种,一是通过菜单Design→Load Design,出现加载对话框,选择要仿真的程序即可;二是通过命令行的形式vsim-lib , 这条命令对于VHDL 和Verilog 都一样。9 ^/ e* i) N0 E0 i+ [' _) X
+ c( L' m4 c: D) j(4)执行仿真
( x6 }& q( W5 _: y/ j8 i
- m& e+ Y9 Q3 m该步骤是正式执行仿真了,在仿真前最重要的一个步骤就是加载激励,如要对下面的加法器进行仿真,加法器实体说明如下:
& N$ B* M2 W' A: c0 h: }) C$ L! ]3 G
entityAdd is) K B0 o, K( }$ i+ B
4 C& x: o/ x% \" {port(D1: in std_logic_vector(7 downto 0);--输入
! o* w/ f; p; T, _1 A' W; p l# x& J" F, b
+ D6 s$ n c: H8 M5 V- B; b6 xD2: in std_logic_vector(7 downto 0);--输入
" y8 ?/ p- A& Z
% C2 v# P/ Z+ E8 Z q' X+ AD0: out std_logic_vector(7 downto 0);--输出
7 k& S: [$ M7 _/ t! L5 r; b4 r3 w: |' Z) _
CE: in std_logic;-使能,低有效
% I( \, X c; g% L" @- W, I/ s7 `) d/ K9 {$ a% f1 d" x/ a
Clk: in std_logic);--时钟
3 Y; D6 T! h1 O! R
) k) l1 [7 {, O5 ~; ], a3 OendAdd;5 Z/ c& Q" W) z9 n
, E2 c/ a8 u5 {. \, Y& [6 e
测试激励的加载
9 M9 D4 z; B5 b( @- @/ y1 E# v2 T' H1 y* O# S0 {
|
|