数模混合信号电路设计第三讲verilog基本概念和仿真工具使用2013课件_第1页
数模混合信号电路设计第三讲verilog基本概念和仿真工具使用2013课件_第2页
数模混合信号电路设计第三讲verilog基本概念和仿真工具使用2013课件_第3页
数模混合信号电路设计第三讲verilog基本概念和仿真工具使用2013课件_第4页
数模混合信号电路设计第三讲verilog基本概念和仿真工具使用2013课件_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

数模混合信号集成电路设计

第三讲Verilog基本概念

和仿真工具使用电子工程系杨骁凌朝东硬件描述语言HDL硬件描述语言利用计算机的巨大能力对用HDL建模的复杂数字逻辑进行仿真,然后再自动综合以生成符合要求且在电路结构上可以实现的数字逻辑网表(Netlist),根据网表和某种工艺的器件自动生成具体电路然后生成该工艺条件下这种具体电路的延时模型。仿真验证无误后用于制造ASIC芯片或写入CPLD和FPGA器件中。VerilogHDLVerilogHDL是硬件描述语言的一种,用于数字电子系统设计。设计者可用它进行各种级别的逻辑设计,可用它进行数字逻辑系统的仿真验证、时序分析、逻辑综合。它是目前应用最广泛的一种硬件描述语言。VerilogHDL语言于1990年被推向公众领域,于1995年成为IEEE标准,称为IEEEStd1364-1995。VerilogHDL在2001年做了一次重要更新,对IEEEStd1364-1995进行了诸多改进,该版本称为Verilog2001。Verilog基本概念模块的结构由在module和endmodule关键词之间的四个主要部分组成:1、端口定义2、端口声明3、内部信号声明4、功能定义Verilog基本概念端口在模块名字后的括号中列出端口可以说明为input,output及inout端口等价于硬件的引脚(pin)注意模块的名称DFF,端口列表及说明模块通过端口与外部通信Verilog基本概念模块的端口定义module模块名(口1,口2,口3,口4,………);端口声明输入端口:input[信号位宽-1:0]端口名1;

input[信号位宽-1:0]端口名2;输出端口:output[信号位宽-1:0]端口名1;

output[信号位宽-1:0]端口名2;输入出端口:inout[信号位宽-1:0]端口名1;

inout[信号位宽-1:0]端口名2;Verilog基本概念内部信号声明:在模块内用到的和与端口有关的wire和reg变量的声明。如:reg[width-1:0]R变量1,R变量2…;

wire[width-1:0]W变量1,W变量2…;Verilog主要有两类数据类型:wire(线网):线网类型主要表示VerilogHDL中结构化元件之间的物理连线,其数值由驱动元件决定。如果没有驱动元件接到线网上,则其默认值为高阻z。Verilog程序模块中输入输出信号类型缺省时自动定义为wire型register(寄存器):寄存器类型主要表示数据的存储单元,其默认值为不定x,寄存器只能在always语句和initial语句中赋值。二者最大的区别在于:寄存器类型数据保持最后一次的赋值,而线网类型数据则需要持续的驱动。Verilog基本概念功能定义:模块中最重要的部分是逻辑功能定义部分。有三种方法可在模块中产生逻辑。用assign语句(数据流描述):

assigna=b&c;-用实例元件(结构化描述):

and2and_inst(q,a,b);-用“always”块(行为描述):

always@(posedgeclkorposedgeclr)beginif(clr)q<=0;elseif(en)q<=d;end举例moduleMUX2_1(out,a,b,sel);//Portdeclarationsoutputout;inputa,b,sel;wireout,a,b,sel;wiresel_,a1,b1;//Thenetlistnot(sel_,sel);and(a1,a,sel_);and(b1,b,sel);or(out,a1,b1);endmodule注释行已定义的Verilog基本单元的实例a,b,sel是输入端口,out是输出端口。所有信号通过这些端口从模块输入/输出。另一个模块可以通过模块名及端口说明使用多路器。实例化多路器时不需要知道其实现细节。这正是自上而下设计方法的一个重要特点。模块的实现可以是行为级也可以是门级,但并不影响高层次模块对它的使用。多路器由关键词module和endmodule开始及结束。Verilog主要有两类数据类型:wire(线网):线网类型主要表示VerilogHDL中结构化元件之间的物理连线,其数值由驱动元件决定。如果没有驱动元件接到线网上,则其默认值为高阻z。Verilog程序模块中输入输出信号类型缺省时自动定义为wire型register(寄存器):寄存器类型主要表示数据的存储单元,其默认值为不定x,寄存器只能在always语句和initial语句中赋值。二者最大的区别在于:寄存器类型数据保持最后一次的赋值,而线网类型数据则需要持续的驱动。如何选择正确的数据类型?输入口(input)可以由寄存器或网络连接驱动,但它本身只能驱动网络连接。输出口(output)可以由寄存器或网络连接驱动,但它本身只能驱动网络连接。输入/输出口(inout)只可以由网络连接驱动,它本身也只能驱动网络连接。如果信号变量是在过程块(initial块或always块)中被赋值的,必须把它声明为寄存器类型变量选择数据类型时常犯的错误举例修改前:moduleexample(o1,o2,a,b,c,d);inputa,b,c,d;outputo1,o2;regc,d;rego2andu1(o2,c,d);always@(aorb)if(a)o1=b;elseo1=0;endmodule修改后:moduleexample(o1,o2,a,b,c,d);inputa,b,c,d;outputo1,o2;//regc,d;//rego2rego1;andu1(o2,c,d);always@(aorb)if(a)o1=b;elseo1=0;endmoduleexample.v选择数据类型时常犯的错误举例Compilingsourcefile"example.v"Error!Illegalleft-hand-sideassignment[Verilog-ILHSA]"example.v",11:o1=b;Error!Illegalleft-hand-sideassignment[Verilog-ILHSA]"example.v",12:o1=0;2errors第一次编译信息verilog–cexample.v第二次编译信息Compilingsourcefile"example.v"Error!Incompatibledeclaration,(c)definedasinputatline2[Verilog-IDDIL]"example.v",5:Error!Incompatibledeclaration,(d)definedasinputatline2[Verilog-IDDIL]"example.v",5:Error!Gate(u1)hasillegaloutputspecification[Verilog-GHIOS]"example.v",8:3errors一个完整的简单例子testbench被测试器件DUT是一个二选一多路器。测试装置(testbench)提供测试激励及验证机制。Testbench使用行为级描述,DUT采用门级描述。下面将给出Testbench的描述、DUT的描述及如何进行混合仿真。Testbench模板moduletestbench;//Datatypedeclaration//Instantiatemodules//Applystimulus//Displayresultsendmodule为什么没有端口?由于testbench是最顶层模块,不会被其它模块实例化。因此不需要有端口。MUX的实例化语句包括:模块名字:与引用模块相同实例名字:任意,但要符合标记命名规则端口列表:有两种方法,(1)采用位置关联,即端口列表与引用模块的次序相同;(2)采用名字关联,用”.”来关联。TestBench—如何说明实例moduletestbench;//Datatypedeclaration//InstantiatemodulesMUX2_1mux(out,a,b,sel);//Applystimulus//Displayresultsendmodule多路器实例化语句MUX的实例化语句包括:模块名字:与引用模块相同实例名字:任意,但要符合标记命名规则端口列表:有两种方法,(1)采用位置关联,即端口列表与引用模块的次序相同;(2)采用名字关联,用”.”来关联。TestBench—如何说明实例moduletestbench;//Datatypedeclaration//InstantiatemodulesMUX2_1mux(.a(c),.b(d),.sel(e),.out(f));//Applystimulus//Displayresultsendmodule多路器实例化语句Testbench—过程(proceduralblock)通常采用过程语句进行行为级描述。testbench的激励信号在一个过程语句中描述。过程语句的活动与执行是有差别的1、所有过程在时间0处于活动状态,并根据用户定义的条件等待执行;2、所有过程并行执行,以描述硬件内在的并行性;Testbench激励描述moduletestbench;//Datatypedeclaration

rega,b,sel;wireout;MUX2_1mux(out,a,b,sel);//Applystimulus

initialbegina=0;b=1;sel=0;#5b=0;#5b=1;sel=1;#5a=1;#5$finish;end//DisplayresultsendmoduleTimeValues absel0 01050001001115111例子中,a,b,sel说明为reg类数据。reg类数据是寄存器类数据信号,在重新赋值前一直保持当前数据。#5指示等待5个时间单位。$finish结束仿真的系统任务。ModelSim仿真工具由Mentor技术公司开发工业上最通用的仿真器之一可在Verilog和VHDL仿真OEM版本允许Verilog仿真或者VHDL仿真Model技术公司的ModelSimmain主窗口:structure结构窗口process处理窗口:Signal&variable信号和变量窗口dataflow数据流窗口source源窗口Wave&list波形和列表窗口ModelSim实现方法交互式的命令行(Cmd)唯一的界面是控制台的命令行,没有用户界面用户界面(UI)能接受菜单输入和命令行输入课程主要讨论批处理模式从DOS或UNIX命令行运行批处理文件基本仿真步骤1

建立项目2

建立库3编译源代码 -所有的HDL代码必须被编译 -Verilog和VHDL是不同的4启动仿真器5执行仿真1、建立项目打开MODELSIM选择,

出现右图所示的界面。ProjectName项目名称ProjectLocation项目存放路径DefaultLibraryName缺省库名(一般情况为work,系统会在项目存放路径自建work子目录)2、建立库—ModelSim库需编译的引入文件激励文件源文件源文件调用的子模块库的两种类型

本次新建需编译的库(缺省值

work)包含当前被编译的设计单元编译前必须建立一个work库每个项目只允许一个work库引用已有的库包含能被当前编译引用的设计单元在编译期间允许多个命令:vlibwork3编译源代码(Verilog)UI)CompileCmd)vlog

-work<library_name><file1>.v<file2>.v文件按出现的顺序被编译文件的顺序或者编辑的顺序不重要支持增量式编译缺省编译到work库例如.vlogmy_design.v4启动仿真器UI)Simulate->StartsimulateCmd)vsim

-lib<library_name><top_level_design>Verilogvsimtop_level1top_level2仿真多个top级模块5执行仿真UI)RunCOM)run<time_step><time_units>按timesteps指定的时间长度执行仿真run命令举例run1000从当前位置运行仿真

1000timestepsrun2500ns从当前位置运行仿真2500nsrun@3000运行仿真到

timestep3000DO文件自动完成仿真步骤的宏文件库设置编译仿真强制仿真激励能在所有的ModelSim模式里被调用UI)Macro->ExecuteCOM)do<>.do能调用其他的DO文件Run.bat//////////////////////run

温馨提示

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

评论

0/150

提交评论