版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、集成电路设计技术与工具集成电路设计技术与工具 第十章第十章 集成电路系统设计简介集成电路系统设计简介内容提要内容提要v10.1 引言引言v10.2 数字系统硬件描述语言数字系统硬件描述语言v10.3 数字系统的数字系统的CPLD/FPGA硬件验证硬件验证v10.4 VLSI数字系统逻辑综合与物理实现数字系统逻辑综合与物理实现v10.5 混合信号系统硬件描述语言混合信号系统硬件描述语言v10.6 本章小结本章小结10.1 引言引言v数字系统实现模拟信号处理结构示意图数字系统实现模拟信号处理结构示意图 电路图电路图硬件描述语言(硬件描述语言(HDL: Hardware Description La
2、nguage)怎样设计复杂的数字系统?怎样设计复杂的数字系统?怎样设计复杂的数字系统?怎样设计复杂的数字系统? v基于基于HDL语言的数字集语言的数字集成电路设计参考流程成电路设计参考流程 10.2 数字系统硬件描述语言数字系统硬件描述语言v编程语言: 程序员利用一种由专家设计的既可以被人理程序员利用一种由专家设计的既可以被人理解,也可以被计算机解释的语言来表示算法解,也可以被计算机解释的语言来表示算法问题的求解过程。这种语言就是问题的求解过程。这种语言就是编程语言编程语言。v程序:由编程语言所表达的算法问题的求解由编程语言所表达的算法问题的求解过程就是。过程就是。 v常用的编程语言:C、Pa
3、scal、Fortran、Basic或汇编语言或汇编语言。 什么是硬件描述语言HDLv具有特殊结构能够对硬件逻辑电路的功能进行描述的一种高级编程语言v这种特殊结构能够:描述电路的连接描述电路的功能在不同抽象级上描述电路描述电路的时序表达具有并行性vHDL主要有两种:Verilog和VHDLVerilog起源于C语言,因此非常类似于C语言,容易掌握VHDL起源于ADA语言,格式严谨,不易学习。VHDL出现较晚,但标准化早。IEEE 1706-1985标准。?v使用HDL描述设计具有下列优点:设计在高层次进行,与具体实现无关设计开发更加容易早在设计期间就能发现问题能够自动的将高级描述映射到具体工艺
4、实现在具体实现时才做出某些决定vHDL具有更大的灵活性可重用可以选择工具及生产厂vHDL能够利用先进的软件更快的输入易于管理Verilog HDL - 较多的第三方工具的支持 - 语法结构比VHDL简单 - 学习起来比VHDL容易 - 仿真工具比较好使 - 测试激励模块容易编写VHDL - 比VerilogHDL早几年成为IEEE标准; - 语法/结构比较严格,因而编写出的 模块风格比较清晰; - 比较适合由较多的设计人员合作完成 的特大型项目(一百万门以上)。Verilog HDL vs. VHDL VHDL VITAL 系统级系统级 算法级算法级 寄存器传输级寄存器传输级 逻辑门级逻辑门级
5、 开关电路级开关电路级 行为级行为级 的抽象的抽象 Verilog HDL 与与 VHDL 建建 模模 能能 力力 的的 比比 较较 VerilogVerilog的历史vVerilog HDL是在1983年由GDA(GateWay Design Automation)公司的Phil Moorby所创。Phi Moorby后来成为Verilog-XL的主要设计者和Cadence公司的第一个合伙人。v在19841985年间,Moorby设计出了第一个Verilog-XL的仿真器。v1986年,Moorby提出了用于快速门级仿真的XL算法。v1990年,Cadence公司收购了GDA公司v1991年
6、,Cadence公司公开发表Verilog语言,成立了OVI(Open Verilog International)组织来负责Verilog HDL语言的发展。v1995年制定了Verilog HDL的IEEE标准,即IEEE1364。 Verilog HDL 公开发表 CADENCE 公司购买 Verilog 版权 1990 1989 1980s Verilog-XL 诞生 模拟和数字都适用的 Verilog 标准 公开发表 1998 ? VerilogHDLIEEE1364 标准 公开发表 有关 VerilogHDL 的全部权利都移交给 OVI(Open Verilog Internati
7、onal) 1995 1990Verilog HDL 的发展历史Verilog的用途vVerilog的主要应用包括:ASIC和FPGA工程师编写可综合的RTL代码高抽象级系统仿真进行系统结构开发测试工程师用于编写各种层次的测试程序用于ASIC和FPGA单元或更高层次的模块的模型开发Verilog HDL 的抽象级别行为综合逻辑综合综合前仿真综合后仿真布局布线技术说明: -设计文档设计文档/算法描述算法描述用高级行为的用高级行为的VerilogVerilog模块表示模块表示RTL/功能级:用可综合的用可综合的VerilogVerilog模块表示模块表示门级/结构级:用实例引用的用实例引用的Ver
8、ilogVerilog模块表示模块表示版图布局/物理级:用几何形状来表示用几何形状来表示Verilog HDL 的抽象级别vVerilog既是一种行为描述的语言也是一种结构描述语言。Verilog模型可以是实际电路的不同级别的抽象。这些抽象的级别包括:抽象级(Levels of Abstraction)v在抽象级上需要进行折衷系统说明系统说明-设计文档设计文档/算术描述算术描述RTL/功能级功能级-Verilog门级门级/结构级结构级-Verilog版图版图/物理级物理级-几何图形几何图形详细程度详细程度 低低 高高输入输入/仿真速度仿真速度 高高 低低抽象级(Levels of Abstra
9、ction)Verilog可以在三种抽象级上进行描述行为级行为级 用功能块之间的数据流对系统进行描述用功能块之间的数据流对系统进行描述 在需要时在函数块之间进行调度赋值。在需要时在函数块之间进行调度赋值。RTL级级/功能级功能级用功能块内部或功能块之间的数据流和控制信号描述系统用功能块内部或功能块之间的数据流和控制信号描述系统基于一个已定义的时钟的周期来定义系统模型基于一个已定义的时钟的周期来定义系统模型结构级结构级/门级门级用基本单元用基本单元(primitive)或低层元件或低层元件(component)的连接来描述系的连接来描述系统以得到更高的精确性,特别是时序方面。统以得到更高的精确性
10、,特别是时序方面。在综合时用特定工艺和低层元件将在综合时用特定工艺和低层元件将RTL描述映射到门级网表描述映射到门级网表抽象级(Levels of Abstraction)v设计工程师在不同的设计阶段采用不同的抽象级首先在行为级描述各功能块,以降低描述难度,提高仿真速度。在综合前将各功能模块进行RTL级描述。用于综合的库中的大多数单元采用结构级描述。在本教程中的结构级描述部分将对结构级(门级)描述进行更详细的说明。vVerilog还有一定的晶体管级描述能力及算法级描述能力行为级和RTL级vMUX的行为可以描述为:只要信号a或b或sel发生变化,如果sel为0则选择a输出;否则选择b输出。mod
11、ule muxtwo (out, a, b, sel); input a, b, sel; output out; reg out;always ( sel or a or b) if (! sel) out = a; else out = b;endmodule这个行为级这个行为级RTL描述不处理描述不处理X和和Z状态输入,并且没有延时。状态输入,并且没有延时。在行为级模型中,逻辑功能描述采用高级语言结构,如在行为级模型中,逻辑功能描述采用高级语言结构,如, while,wait,if, case。Testbench(test fixture)通常采用行为级描述。所有行为级结构在通常采用行为
12、级描述。所有行为级结构在testbench描描述中都可以采用。述中都可以采用。RTL模型中数据流都是基于时钟的。任何时钟元件在时钟沿处的行为都要精模型中数据流都是基于时钟的。任何时钟元件在时钟沿处的行为都要精确描述。确描述。RTL级描述是行为级级描述是行为级Verilog的子集。的子集。结构级描述v结构级Verilog适合开发小规模元件,如ASIC和FPGA的单元Verilog内部带有描述基本逻辑功能的基本单元(primitive),如and门。用户可以定义自己的基本单元UDP(User Defined Privitives)综合产生的结果网表通常是结构级的。用户可以用结构级描述粘接(glue
13、)逻辑。v下面是MUX的结构级描述,采用Verilog基本单元(门)描述。描述中含有传输延时。module twomux (out, a, b, sl); input a, b, sl; output out; not u1 (nsl, sl ); and #1 u2 (sela, a, nsl); and #1 u3 (selb, b, sl); or #2 u4 (out, sela, selb);endmodule综合不综合不支持支持!简单的简单的 Verilog HDL 模块示例模块示例目的:通过简单的例子了解Verilog模块的基本构成了解Verilog模块的层次结构和行为模块了解V
14、erilog模块的测试 下面先介绍几个简单的Verilog HDL程序,然后从中分析Verilog HDL程序的特性。例 1 module adder ( count,sum,a,b,cin ); input 2:0 a,b; input cin; output count; output 2:0 sum; assign count, sum=a+b+cin; endmodule 这个例子描述了一个三位的加法器。从例子中可以看出整个Verilog HDL程序是嵌套在module和endmodule声明语句里的。简单的简单的 Verilog HDL 模块模块例2:module compare (
15、 equal,a,b ); output equal; /声明输出信号声明输出信号equal input 1:0 a,b; /声明输入信号声明输入信号a,b assign equal=(a=b)?)?1:0; /*如果两个输入信号相等如果两个输入信号相等,输出为输出为1。否则为。否则为0*/endmodule这个程序描述了一个比较器.在这个程序中,/*.*/和/.表示注释部分,注释只是为了方便程序员理解程序,对编译是不起作用的。简单的 Verilog HDL 模块例3:module trist2(out,in,enable); output out; input in, enable; buf
16、if1 mybuf(out,in,enable);endmodule这个程序描述了一个三态驱动器。程序通过调用一个实例元件bufif1来实现其功能。简单的 Verilog HDL 模块 module trist1(out,in,enable); output out; input in, enable; mytri tri_inst(out,in,enable); endmodule module mytri(out,in,enable); output out; input in, enable; assign out = enable? In : bz; endmodule简单的简单的 V
17、erilog HDL 模块模块例4:上述程序例子通过另一种方法描述了一个三态门。在这个例子中存在着两个模块:模块trist1 调用模块 mytri 的实例元件 tri_inst。模块 trist1 是上层模块。模块 mytri 则被称为子模块。通过这种结构性模块构造可构成特大型模块。简单的 Verilog HDL 模块通过上面的例子可以看到通过上面的例子可以看到: Verilog HDL程序是由模块构成的。模块是可以进行层次嵌套的。正因为程序是由模块构成的。模块是可以进行层次嵌套的。正因为如此如此,才可以将大型的数字电路设计分割成不同的小模块来实现特定的功能才可以将大型的数字电路设计分割成不同
18、的小模块来实现特定的功能,最后通过顶层模块调用子模块来实现整体功能。最后通过顶层模块调用子模块来实现整体功能。 每个模块要进行端口定义每个模块要进行端口定义,并说明输入输出口并说明输入输出口,然后对模块的功能进行行为然后对模块的功能进行行为逻辑描述。逻辑描述。 Verilog HDL程序的书写格式自由程序的书写格式自由,一行可以写几个语句一行可以写几个语句,一个语句也可以一个语句也可以分写多行。分写多行。 除了除了endmodule语句外语句外,每个语句和数据定义的最后必须有分号每个语句和数据定义的最后必须有分号 可以用可以用/*.*/和和/.对对Verilog HDL程序的任何部分作注释。一
19、个好的程序的任何部分作注释。一个好的,有使有使用价值的源程序都应当加上必要的注释用价值的源程序都应当加上必要的注释,以增强程序的可读性和可维护性。以增强程序的可读性和可维护性。模块的结构模块的结构 Verilog的基本设计单元是的基本设计单元是“模块模块”(block)。一个模。一个模块是由两部分组成的:一)块是由两部分组成的:一)描述接口描述接口;二);二)描述逻辑功描述逻辑功能能,即定义输入是如何影响输出的。下面举例说明:,即定义输入是如何影响输出的。下面举例说明:模块的结构模块的结构从上面的例子可以看出:从上面的例子可以看出:- Verilog模块结构完全嵌在模块结构完全嵌在module
20、和和endmodule声明语句之间;声明语句之间;-每个每个Verilog程序包括四个主要部分:程序包括四个主要部分:端口定义、端口定义、I/O说明、说明、内部信号声明、内部信号声明、功能定义功能定义。模块的测试模块的测试如何检查上述例子其功能是否正确?如何检查上述例子其功能是否正确? 需要有测试激励信号输入到被测模块需要有测试激励信号输入到被测模块 需要记录被测模块的输出信号需要记录被测模块的输出信号 需要把用功能和行为描述的需要把用功能和行为描述的Verilog模块模块 转换为门级电路互连的电路结构(综合)。转换为门级电路互连的电路结构(综合)。 需要对已经转换为门级电路结构的逻辑需要对已
21、经转换为门级电路结构的逻辑 进行测试(门级电路仿真)。进行测试(门级电路仿真)。 需要对布局布线后的电路结构进行测试。需要对布局布线后的电路结构进行测试。 (布局布线后仿真)。(布局布线后仿真)。模块的测试被测模块被测模块激 励 和 控激 励 和 控制信号制信号输出响应输出响应和验证和验证模块的测试测试模块常见的形式:测试模块常见的形式:module t;reg ; /被测模块输入被测模块输入/输出变量类型定义输出变量类型定义wire; /被测模块输入被测模块输入/输出变量类型定义输出变量类型定义initial begin ; ; ; end /产生测试信号产生测试信号always #dela
22、y begin ; end /产生测试信号产生测试信号Testedmd m(.in1(ina), .in2(inb), .out1(outa), .out2(outb) );/被测模块的实例引用被测模块的实例引用initial begin .; .; . end /记录输出和响应记录输出和响应endmoduleinitial initial always所有的过程块都在所有的过程块都在0 0时时刻同时启动;它们是刻同时启动;它们是并行的,在模块中不并行的,在模块中不分前后。分前后。 initialinitial块块 只执行只执行一次。一次。 alwaysalways块块 只要符合只要符合触发条
23、件可以循环执触发条件可以循环执行。行。测试模块中常用的过程块:测试模块中常用的过程块:模块的测试模块的测试如何描述激励信号:module t;reg a, b, sel;wire out;/引用多路器实例引用多路器实例 mux2_m (out, a, b, sel);/加入激励信号加入激励信号initial begin a=0; b=1; sel=0; #10 b=0; #10 b=1; sel=1; #10 a=1; #10 $stop; end模块的测试如何观察被测模块的响应: 在在initial 块中,用系统任务块中,用系统任务$time 和和 $monitor $time 返回当前的仿
24、真时刻返回当前的仿真时刻 $monitor 只要在其变量列表中有某一个或某几个变只要在其变量列表中有某一个或某几个变 量值发生变化,便在仿真单位时间结束时显示其变量值发生变化,便在仿真单位时间结束时显示其变 量列表中所有变量的值。量列表中所有变量的值。例: initial begin $monitor ($time, , “out=%b a=%b sel=%b”, out,a,b,sel); end如何把被测模块的输出变化记录到数据库文件中?(文件格式为(文件格式为VCD,大多数的波形显示工具都能读取该格式)大多数的波形显示工具都能读取该格式)可用以下七个系统任务:$dumpfile(“fil
25、e.dump”); /打开记录数据变化的数据文件打开记录数据变化的数据文件$dumpvars(); /选择需要记录的变量选择需要记录的变量$dumpflush; /把记录在数据文件中的资料转送到硬盘保把记录在数据文件中的资料转送到硬盘保存存$dumpoff; /停止记录数据变化停止记录数据变化$dumpon; /重新开始记录数据变化重新开始记录数据变化$dumplimit(); /规定数据文件的大小(字节)规定数据文件的大小(字节)$dumpall; /记录所有指定信号的变化值到数据文件中记录所有指定信号的变化值到数据文件中模块的测试模块的测试如何把被测模块的响应变化记录到数据库文件中?举例说
26、明:$dumpvars; /记录各层次模块中所有信号的变化记录各层次模块中所有信号的变化$dumpvars(1,top); /只记录模块只记录模块top中所有信号的变化中所有信号的变化$dumpvars(2,top.u1); /记录记录top模块中实例模块中实例u1和它以下一层子模块所有信号的变化和它以下一层子模块所有信号的变化$dumpvars(0,top.u2,top.u1.u13.q); /记录记录top模块中实例模块中实例u2和它本层所有信号的变化和它本层所有信号的变化,还有还有top.u1.u13.q信号的变化。信号的变化。$dumpvars(3,top.u2,top.u1); /记
27、录记录top模块中模块中u2和和u1所有信号的变化(包括其两层以下子模所有信号的变化(包括其两层以下子模块的信号变化)。块的信号变化)。模块的测试模块的测试如何把被测模块的响应变化记录到数据库文件中?举例说明:下面的下面的 Verilog 代码段可以代替测试文件中的系统代码段可以代替测试文件中的系统任务任务$monitor initial begin $dumpfile(“vlog.dump”); $dumpvars(0,top); endVerilog HDL 语法要点语法要点Verilog HDL 语法要点语法要点Verilog 与与 C 的主要不同点的主要不同点:Verilog 有许多语
28、法规则与有许多语法规则与 C 语言一致。语言一致。 但与但与 C 语言有根本的区别:语言有根本的区别:- 并行性并行性- 块的含义:块的含义: initial 块块 和和 always块块- 两种赋值语句:两种赋值语句: 阻塞阻塞 赋值赋值 “ = ” 非阻塞赋值非阻塞赋值 “= ”空格空格和注释和注释 Verilog 是一种格式很自由的语言。是一种格式很自由的语言。 空格在文本中起一个分离符的作用,空格在文本中起一个分离符的作用, 别的没有其他用处。别的没有其他用处。 单行注释符用单行注释符用 /* 与与C 语言一致语言一致 多行注释符用多行注释符用 /* - */ 与与C 语言一致语言一致
29、空白符和注释空白符和注释module MUX2_1 (out, a, b, sel); / Port declarations output out; input sel, / control input b, /* data inputs */ a;/* The netlist logic selects input ”a” when sel = 0 and it selects ”b” when sel = 1.*/ not (sel_, sel); and (a1, a, sel_), (b1, b, sel); / What does this line do? or (out, a1
30、, b1);endmodule格式自由格式自由使用空白符提高可读性及代码组使用空白符提高可读性及代码组织。织。Verilog忽略空白符除非用于忽略空白符除非用于分开其它的语言标记。分开其它的语言标记。多行注释,在多行注释,在/* */内内单行注释单行注释到行末结束到行末结束整数常量和实数常量整数常量和实数常量v整数的大小可以定义也可以不定义。整数表示为: 其中 size :大小,由十进制数表示的位数(bit)表示。缺省为32位 base:数基,可为2(b)、8(o)、10(d)、16(h)进制。缺省为10进制 value:是所选数基内任意有效数字,包括X、Z。v实数常量可以用十进制或科学表示法
31、表示。 Verilog中,常量中,常量(literals)可是整数也可以是实数可是整数也可以是实数12 unsized decimal (zero-extended to 32 bits)H83a unsized hexadecimal (zero- extended to 32 bits)8b1100_ 0001 8-bit binary64hff01 64-bit hexadecimal (zero- extended to 64 bits)9O17 9-bit octal32bz01x Z-extended to 32 bits3b1010_ 1101 3-bit number, tru
32、ncated to 3b1016.3 decimal notation32e- 4 scientific notation for 0.00324.1E3 scientific notation for 4100整数常量和实数常量整数常量和实数常量v整数的大小可以定义也可以不定义。整数表示为:整数的大小可以定义也可以不定义。整数表示为:数字中(数字中(_)忽略,便于查看)忽略,便于查看没有定义大小没有定义大小(size)整数缺省为整数缺省为32位位缺省数基为十进制缺省数基为十进制数基数基(base)和数字和数字(16进制进制)中的字母无大小写之分中的字母无大小写之分当数值当数值value大于指
33、定的大小时,截去高位。如大于指定的大小时,截去高位。如 2b1101表示的是表示的是2b01v实数常量实数常量实数可用科学表示法或十进制表示实数可用科学表示法或十进制表示科学表示法表示方式:科学表示法表示方式: , 表示:表示: 尾数尾数10指数指数字符串(字符串(string)v字符串要在一行中用双引号括起来,也就是不能跨行。字符串要在一行中用双引号括起来,也就是不能跨行。v字符串中可以使用一些字符串中可以使用一些C语言转义语言转义(escape)符,如符,如t nv可以使用一些可以使用一些C语言格式符语言格式符(如如%b)在仿真时产生格式在仿真时产生格式化输出:化输出: ”This is
34、a normal string” ”This string has a t tab and ends with a new linen” ”This string formats a value: val = %b”Verilog中,字符串大多用于显示信息的命令中。中,字符串大多用于显示信息的命令中。Verilog没没有字符串数据类型有字符串数据类型字符串(字符串(string)转义符及格式符将在验证支持部分讨论转义符及格式符将在验证支持部分讨论 格式符格式符%h%o%d%b%c%s%v%m%thexoctdecbinACSIIstringstrengthmoduletime转义符tn”tab
35、换行换行反斜杠反斜杠双引号双引号ASCII representation of above格式符格式符%0d表示没有前导表示没有前导0的十进制数的十进制数标识符标识符(identifiers)v标识符是用户在描述时给标识符是用户在描述时给Verilog对象起的名字对象起的名字v标识符必须以字母标识符必须以字母(a-z, A-Z)或或( _ )开头,后面可以是字母、数字、开头,后面可以是字母、数字、( $ )或或( _ )。v最长可以是最长可以是1023个字符个字符v标识符区分大小写,标识符区分大小写,sel和和SEL是不同的标识符是不同的标识符v模块、端口和实例的名字都是标识符模块、端口和实例
36、的名字都是标识符module MUX2_1 (out, a, b, sel);output out;input a, b, sel; not not1 (sel_, sel); and and1 (a1, a, sel_); and and2 (b1, b, sel); or or1 (out, a1, b1);endmoduleVerilog标识符标识符标识符标识符(identifiers)v有效标识符举例:有效标识符举例: shift_reg_a busa_index _bus3v无效标识符举例:无效标识符举例: 34net / 开头不是字母或开头不是字母或“_” a*b_net / 包含
37、了非字母或数字,包含了非字母或数字, “$” “_” n238 /包含了非字母或数字,包含了非字母或数字, “$” “_”vVerilog区分大小写,所有区分大小写,所有Verilog关键词使用小写字母关键词使用小写字母。转义标识符( Escaped identifiers)v可以包含任何可打印字符可以包含任何可打印字符v反斜杠及空白符不是标识符的一部分反斜杠及空白符不是标识符的一部分module 2:1MUX (out, a, b, sel);output out;input a, b, sel; not not1(sel ,sel); and and1( a1, a, sel ); and
38、 and2( b1, b, sel); or or1( out, a1, b1);endmodulev使用转义符可能会产生一些问题,并且不是所有工具都支持。使用转义符可能会产生一些问题,并且不是所有工具都支持。有时用转义符完成一些转换,如产生逻辑图的有时用转义符完成一些转换,如产生逻辑图的Verilog网表。综网表。综合工具输出综合网表时也使用转义符。合工具输出综合网表时也使用转义符。不建议使用转义符。不建议使用转义符。转义标识符由反斜杠转义标识符由反斜杠“”开始,空白符结束开始,空白符结束Escaped Identifiers转义标识符转义标识符( Escaped identifiers)转
39、义标识符允许用户在标识符中使用非法字符。如:转义标识符允许用户在标识符中使用非法字符。如: #sel busa+ index A,B top. 3inst .net1 / 在层次化名字中转义符在层次化名字中转义符 转义标识符必须以空格结束转义标识符必须以空格结束语言专用标记语言专用标记( tokens)系统任务及函数系统任务及函数 $v$符号指示这是系统任务和函数符号指示这是系统任务和函数v系统函数有很多,如:系统函数有很多,如:返回当前仿真时间返回当前仿真时间$time显示显示/监视信号值监视信号值($display, $monitor)停止仿真停止仿真$stop结束仿真结束仿真$finis
40、h $monitor($time, “a = %b, b = %h”, a, b); 当信号当信号a或或b的值发生变化时,系统任务的值发生变化时,系统任务$monitor显示当前仿真显示当前仿真时间,信号时间,信号a值值(二进制格式二进制格式), 信号信号b值(值(16进制格式)。进制格式)。语言专用标记语言专用标记( tokens)延时说明延时说明v“#”用于说明过程用于说明过程(procedural)语句和门的实例的延时,但不能用语句和门的实例的延时,但不能用于模块的实例化。于模块的实例化。module MUX2_ 1 (out, a, b, sel) ;output out ;input
41、 a, b, sel ;not #1 not1( sel_, sel);and #2 and1( a1, a, sel_);and #2 and2( b1, b, sel);or #1 or1( out, a1, b1);endmodulev门延时有很多类名字:门延时门延时有很多类名字:门延时(gate delay),传输延时,传输延时(propagation delay),固有延时,固有延时(intrinsic delay),对象内在延,对象内在延时时(intra-object delay)编译引导编译引导(Compiler Directives)v( )符号说明一个编译指导。主键盘左上角小
42、写键符号说明一个编译指导。主键盘左上角小写键 “ ”v这些编译指导使仿真编译器进行一些特殊的操作这些编译指导使仿真编译器进行一些特殊的操作v编译指导一直保持有效直到被覆盖或解除编译指导一直保持有效直到被覆盖或解除vresetall 复位所有的编译指导为缺省值,应该在其它编译指复位所有的编译指导为缺省值,应该在其它编译指导之前使用导之前使用v常用的编译引导有:常用的编译引导有:v definev includev timescalev uselibv resetall .文本替换文本替换(substitution) - define编译指导编译指导define提供了一种简单的文本替换的功能提供了
43、一种简单的文本替换的功能 define 在编译时在编译时替换替换。可提高描述的可读性。可提高描述的可读性。define not_delay #1define and_delay #2define or_delay #1module MUX2_1 (out, a, b, sel);output out;input a, b, sel;not not_delay not1( sel_, sel);and and_delay and1( a1, a, sel_);and and_delay and2( b1, b, sel);or or_delay or1( out, a1, b1);endmodu
44、le定义定义not_delay使用使用not_delay文本替换文本替换(substitution)v解除定义的宏,使用解除定义的宏,使用 undef macro_namev使用编译指导使用编译指导define,可以,可以提高描述的可读性提高描述的可读性定义全局设计参数,如延时和矢量的位数。这些参数可以定定义全局设计参数,如延时和矢量的位数。这些参数可以定义在同一位置。这样,当要修改设计配置时,只需要在一个义在同一位置。这样,当要修改设计配置时,只需要在一个地方修改。地方修改。定义定义Verilog命令的简写形式命令的简写形式 define vectors_ file /usr1/chrisz
45、/library/vectors define results_ file / usr1/chrisz/library/resultsv可以将可以将define放在一个文件中,与其它文件一起编译放在一个文件中,与其它文件一起编译。文本包含文本包含(inclusion) - includev编译指导编译指导include在当前内容中插入一个文件在当前内容中插入一个文件 格式:格式: include “”如如include global.vinclude parts/count. vinclude ././library/mux. v”vinclude可用于:可用于:include保存在文件中的全
46、局的或经常用到的一些定义,如文本宏保存在文件中的全局的或经常用到的一些定义,如文本宏在模块内部在模块内部include一些任务(一些任务(tasks),提高代码的可维护性。,提高代码的可维护性。可以是相对路径或绝对路径Timescalevtimescale 说明时间单位及精度说明时间单位及精度格式:格式:timescale / 如:如:timescale 1 ns / 100 ps time_unit: 延时或时间的测量单位延时或时间的测量单位time_precision: 延时值超出精度要先舍入后使用延时值超出精度要先舍入后使用vtimescale必须在模块之前出现必须在模块之前出现time
47、scale 1 ns / 10 ps/ All time units are in multiples of 1 nanosecondmodule MUX2_1 (out, a, b, sel);output out;input a, b, sel;not #1 not1( sel_, sel);and #2 and1( a1, a, sel_);and #2 and2( b1, b, sel);or #1 or1( out, a1, b1);endmoduleTimescalevtime_precision不能大于不能大于time_unitvtime_precision和和time_unit
48、的表示方法:的表示方法:integer unit_stringinteger : 可以是可以是1, 10, 100unit_string: 可以是可以是s(second), ms(millisecond), us(microsecond), ns(nanosecond), ps(picosecond), fs(femtosecond)以上以上integer和和unit_string可任意组合可任意组合vprecision的时间单位应尽量与设计的实际精度相同。的时间单位应尽量与设计的实际精度相同。precision是仿真器的仿真时间步。是仿真器的仿真时间步。若若time_unit与与precis
49、ion_unit差别很大将严重影响仿真速度。差别很大将严重影响仿真速度。如说明一个如说明一个timescale 1s / 1ps,则仿真器在,则仿真器在1秒内要扫描其秒内要扫描其事件序列事件序列1012次;而次;而timescale 1s/1ms则只需扫描则只需扫描103次。次。v如果没有如果没有timescale说明将使用缺省值,一般是说明将使用缺省值,一般是ns。Timescalev所有所有timescale中的最小值决定仿真时的最小时间单位。中的最小值决定仿真时的最小时间单位。这是因为仿真器必须对整个设计进行精确仿真这是因为仿真器必须对整个设计进行精确仿真 在下面的例子中,仿真时间单位(
50、在下面的例子中,仿真时间单位(STU)为)为100fstimescale 1ns/ 10psmodule1 (. . .);not #1.23 (. . .) / 1.23ns or 12300 STUs. . .endmoduletimescale 100ns/ 1nsmodule2 (. . .);not #1.23 (. . .) / 123ns or 1230000 STUs. . .endmoduletimescale 1ps/ 100fsmodule3 (. . .);not #1.23 (. . .) / 1.23ps or 12 STUs (rounded off). . .e
51、ndmodule编译引导语句编译引导语句 uselib 编译引导语句:编译引导语句: 用于定义仿真器到哪里去找库元件用于定义仿真器到哪里去找库元件 如果该引导语句启动的话,它就一直有效如果该引导语句启动的话,它就一直有效 直到遇到另外直到遇到另外一个一个uselib的定义或的定义或resetall语句语句 比其他配置库搜索路径的命令选项作用大比其他配置库搜索路径的命令选项作用大 如果仿真器在如果仿真器在uselib定义的地点找不到器件库,它不会定义的地点找不到器件库,它不会转向由编译命令行转向由编译命令行-v 和和-y选项指定的器件库去找。选项指定的器件库去找。编译引导语句使用使用 useli
52、b 的语法:的语法: uselib 器件库器件库1的地点的地点 器件库器件库2的地点的地点 。上面的器件库地点可用以下两种方法表示:上面的器件库地点可用以下两种方法表示:1) file = 库文件名的路径库文件名的路径2) dir = 库目录名的路径库目录名的路径 libext = .文件扩展文件扩展例如:例如:uselib dir =/lib/FAST_lib/uselib dir =/lib/TTL_lib/ libext=.v file = /libs/TTL_U/udp.libVerilog HDL的数据类型和逻辑值0 0、低、伪、逻辑低、地、低、伪、逻辑低、地、VSS、负插入、负插入
53、01XZ0bufbufbufbufif11 1、高、真、逻辑高、电源、高、真、逻辑高、电源、VDD、正插入、正插入X X、不确定:逻辑冲突无法确定其逻辑值、不确定:逻辑冲突无法确定其逻辑值HiZHiZ、高阻抗、三态、无驱动源、高阻抗、三态、无驱动源 Verilog 的四种逻辑值的四种逻辑值主要的数据类型Verilog 有三种主要的数据类型:有三种主要的数据类型: Nets 表示器件之间的物理连接表示器件之间的物理连接, 称为网络连接类型称为网络连接类型Register 表示抽象的储存单元,称为寄存器表示抽象的储存单元,称为寄存器/变量类型变量类型Parameter 表示运行时的常数,称为参数类
54、型表示运行时的常数,称为参数类型 netsabslselbselanslout主要的数据类型Nets(网络连线):网络连线): net需要被持续的驱动,需要被持续的驱动,驱动它的可以是门和模块。驱动它的可以是门和模块。驱动端信号的改变会立刻驱动端信号的改变会立刻传递到输出的连线上。传递到输出的连线上。例如:右图上,例如:右图上,selb的改的改变,会自动地立刻影响或变,会自动地立刻影响或门的输出。门的输出。连接(Nets) 类型变量的种类:在为不同工艺的基本元件建立库模型的时候,常常需要用不同的在为不同工艺的基本元件建立库模型的时候,常常需要用不同的连接类型来与之对应,使其行为与实际器件一致。
55、常见的有以下连接类型来与之对应,使其行为与实际器件一致。常见的有以下几种。几种。 类型类型 功能功能 wire, tri 对应于标准的互连线(缺省)对应于标准的互连线(缺省) supply1, supply2 对应于电源线或接地线对应于电源线或接地线 wor, trior 对应于有多个驱动源的线或逻辑连接对应于有多个驱动源的线或逻辑连接 wand, triand 对应于有多个驱动源的线与逻辑连接对应于有多个驱动源的线与逻辑连接 trireg 对应于有电容存在能暂时存储电平的连接对应于有电容存在能暂时存储电平的连接 tri1, tri0 对应于需要上拉或下拉的连接对应于需要上拉或下拉的连接如果不
56、明确地说明连接是何种类型,应该是指如果不明确地说明连接是何种类型,应该是指 wire 类型。类型。主要的数据类型abslselbselansloutreg_areg_selreg_b主要的数据类型寄存器(register)类型变量 register 型变量能保持其值,直到它被赋于新的值。型变量能保持其值,直到它被赋于新的值。register 型变量常用于行为建模,产生测试的激励信号。型变量常用于行为建模,产生测试的激励信号。常用行为语句结构来给寄存器类型的变量赋值。常用行为语句结构来给寄存器类型的变量赋值。主要的数据类型 寄存器(register)类型变量的数据类型 寄存器类型变量共有四种数据
57、类型:寄存器类型变量共有四种数据类型: 类型类型 功能功能 . reg 无符号整数变量,可以选择不同的位宽。无符号整数变量,可以选择不同的位宽。 integer 有符号整数变量,有符号整数变量,32位宽,算术运算可产生位宽,算术运算可产生2的的 补码。补码。 real 有符号的浮点数,双精度。有符号的浮点数,双精度。 time 无符号整数变量,无符号整数变量,64位宽(位宽(Verilog-XL仿真仿真 工具用工具用64位的正数来记录仿真时刻)位的正数来记录仿真时刻)Verilog中中net和和register声明语法声明语法vnet声明 range delay , net_name;net_
58、type: net类型range: 矢量范围,以MSB:LSB格式delay: 定义与net相关的延时net_name: net名称,一次可定义多个net, 用逗号分开。v寄存器声明 range , reg_name;reg_type:寄存器类型range: 矢量范围,以MSB:LSB格式。只对reg类型有效reg_name :寄存器名称,一次可定义多个寄存器,用逗号分开Verilog中中net和和register声明语法声明语法v举例:reg a; /一个标量寄存器wand w; / 一个标量wand类型netreg 3: 0 v; / 从MSB到LSB的4位寄存器向量reg 7: 0 m,
59、 n; / 两个8位寄存器tri 15: 0 busa; / 16位三态总线wire 0: 31 w1, w2; / 两个32位wire,MSB为bit0举例说明数据类型的选择module top;wire y; reg a, b; DUT u1(y,a,b); initial begin a = 0; b = 0; #10 a =1; . endendmodule 模块DUT的边界输入口输出口输出/入口netnetnet/registernetnet/registernetinoutmodule DUT(Y, A, B_);output Y;input A,B: wire Y, A, B;
60、and (Y, A, B);endmodule主要的数据类型选择正确的数据类型选择正确的数据类型module top;wire y; reg a, b;DUT u1 (y, a, b) ;initial begina = 0; b = 0; #5 a = 1; endendmodulemodule DUT (Y, A, B);output Y;input A, B;wire Y, A, B;and (Y, A, B) ;endmodule输入端口可以由输入端口可以由net/register驱动,但驱动,但输入端口只能是输入端口只能是net输出端口可以是输出端口可以是net/register类型
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度线上直播带货平台合作框架协议范本3篇
- 高三级综合练习高三语文
- 2024年智能电动门供应安装协议版B版
- 2024年度市政道路挡土墙施工劳务分包协议3篇
- 对傲慢与偏见的读后感
- 2024年度文化创意产业员工入股合作框架协议范本3篇
- 2024企业环保项目劳务输出与污染治理合同范本3篇
- 数学组信息技术研修计划范文(7篇)
- 我与公司共成长演讲稿8篇
- 幼儿阅读心得
- 2024-2030年中国建设工程质量检测行业发展模式规划分析报告
- 企业文化塑造与员工激励方案
- 2024年01月22504学前儿童科学教育活动指导期末试题答案
- 2024甘肃省建筑安全员-A证考试题库及答案
- 华中农业大学《操作系统实验》2021-2022学年第一学期期末试卷
- 国家开放大学电大11251丨操作系统(统设课)期末终考题库及答案
- 2024年贵州省中考数学真题含解析
- 东南大学版三基内科
- 【MOOC】线性代数-浙江大学 中国大学慕课MOOC答案
- 区块链原理与实践全套完整教学课件
- 运动神经元病小讲课
评论
0/150
提交评论