ImageVerifierCode 换一换
格式:PPT , 页数:23 ,大小:182.50KB ,
资源ID:4571815      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-4571815.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(北大数字集成电路课件--6_verilog的数据类型.ppt)为本站会员(j35w19)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

北大数字集成电路课件--6_verilog的数据类型.ppt

1、,第六章 Verilog的数据类型及逻辑系统,学习Verilog逻辑值系统 学习Verilog中不同类的数据类型 理解每种数据类型的用途及用法 数据类型说明的语法,学习内容:,Verilog采用的四值逻辑系统,0, Low, False, Logic Low, Ground,VSS, Negative Assertion1, High, True, Logic High, Power, VDD, VCC, Positive AssertionX Unknown: Occurs at Logical Which Cannot be Resolved ConflictHiZ, High Imped

2、ance, Tri- Stated, Disabled Driver (Unknown),主要数据类型,Verilog主要有三类(class)数据类型:,net (线网) : 表示器件之间的物理连接 register (寄存器) :表示抽象存储元件 parameters(参数) : 运行时的常数(run-time constants),net(线网),net需要被持续的驱动,驱动它的可以是门和模块。 当net驱动器的值发生变化时, Verilog自动的将新值传送到net上。在例子中,线网out由or门驱动。当or门的输入信号置位时将传输到线网net上。,net类的类型(线网),有多种net类型

3、用于设计(design-specific)建模和工艺(technology-specific)建模没有声明的net的缺省类型为 1 位(标量)wire类型。但这个缺省类型可由下面的编译指导改变:default_nettype ,综合编译器不支持的net类型,net类的类型(线网),wire类型是最常用的类型,只有连接功能。 wire和tri类型有相同的功能。用户可根据需要将线网定义为wire或tri以提高可读性。例如,可以用tri类型表示一个net有多个驱动源。或者将一个net声明为tri以指示这个net可以是高阻态Z(hign-impedance)。可推广至wand和triand、wor和t

4、rior wand、wor有线逻辑功能;与wire的区别见下页的表。 trireg类型很象wire类型,但trireg类型在没有驱动时保持以前的值。这个值的强度随时间减弱。 修改net缺省类型的编译指导:default_nettype nettype不能是supply1和supply0。,net类在发生逻辑冲突时的决断,Verilog有预定义的决断函数 支持与工艺无关的逻辑冲突决断 wire-and用于集电极开路电路 wire-or用于射极耦合电路,寄存器类 (register),寄存器类型在赋新值以前保持原值 寄存器类型大量应用于行为模型描述及激励描述。在下面的例子中,reg_a、reg_b

5、、reg_sel用于施加激励给2:1多路器。 用行为描述结构给寄存器类型赋值。给reg类型赋值是在过程块中。,寄存器类的类型,寄存器类有四种数据类型,不要混淆寄存器数据类型与结构级存储元件,如udp_dff,Verilog中net和register声明语法,net声明range delay , net_name;net_type: net类型range: 矢量范围,以MSB:LSB格式delay: 定义与net相关的延时net_name: net名称,一次可定义多个net, 用逗号分开。 寄存器声明range , reg_name;reg_type:寄存器类型range: 矢量范围,以MSB:

6、LSB格式。只对reg类型有效reg_name :寄存器名称,一次可定义多个寄存器,用逗号分开,Verilog中net和register声明语法,举例:reg a; /一个标量寄存器wand w; / 一个标量wand类型netreg 3: 0 v; / 从MSB到LSB的4位寄存器向量reg 7: 0 m, 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 be

7、gina = 0; b = 0;#5 a = 1;end endmodule,module DUT (Y, A, B); output Y; input A, B; wire Y, A, B;and (Y, A, B) ; endmodule,输入端口可以由net/register驱动,但输入端口只能是net,输出端口可以是net/register类型,输出端口只能驱动net,在过程块中只能给register类型赋值,若Y,A,B说明为reg则会产生错误。,in1,in2,O,A,B,Y,双向端口输入/输出只能是net类型,选择数据类型时常犯的错误,用过程语句给一个net类型的或忘记声明类型的

8、信号赋值。信息:illegal assignment. 将实例的输出连接到声明为register类型的信号上。信息: has illegal output port specification. 将模块的输入信号声明为register类型。信息:incompatible declaration, ,下面所列是常出的错误及相应的错误信息(error message),信号可以分为端口信号和内部信号。出现在端口列表中的信号是端口信号,其它的信号为内部信号。 对于端口信号,输入端口只能是net类型。输出端口可以是net类型,也可以是register类型。若输出端口在过程块中赋值则为register类

9、型;若在过程块外赋值(包括实例化语句),则为net类型。 内部信号类型与输出端口相同,可以是net或register类型。判断方法也与输出端口相同。若在过程块中赋值,则为register类型;若在过程块外赋值,则为net类型。 若信号既需要在过程块中赋值,又需要在过程块外赋值。这种情况是有可能出现的,如决断信号。这时需要一个中间信号转换。,信号类型确定方法总结如下:,选择数据类型时常犯的错误举例,修改前: module example(o1, o2, a, b, c, d);input a, b, c, d;output o1, o2;reg c, d;reg o2and u1(o2, c,

10、d);always (a or b)if (a) o1 = b; else o1 = 0; endmodule,修改后: module example(o1, o2, a, b, c, d);input a, b, c, d;output o1, o2; / reg c, d; / reg o2reg o1;and u1(o2, c, d);always (a or b)if (a) o1 = b; else o1 = 0; endmodule,example.v,选择数据类型时常犯的错误举例,Compiling source file “example.v“ Error! Illegal l

11、eft-hand-side assignment Verilog-ILHSA “example.v“, 11: o1 = b; Error! Illegal left-hand-side assignment Verilog-ILHSA “example.v“, 12: o1 = 0; 2 errors,第一次编译信息 verilog c example.v,第二次编译信息,Compiling source file “example.v“ Error! Incompatible declaration, (c) defined as input at line 2 Verilog-IDDIL

12、 “example.v“, 5: Error! Incompatible declaration, (d) defined as input at line 2 Verilog-IDDIL “example.v“, 5: Error! Gate (u1) has illegal output specification Verilog-GHIOS “example.v“, 8: 3 errors,参数(parameters),用参数声明一个可变常量,常用于定义延时及宽度变量。 参数定义的语法:parameter ; 可一次定义多个参数,用逗号隔开。 在使用文字(literal)的地方都可以使用

13、参数。 参数的定义是局部的,只在当前模块中有效。 参数定义可使用以前定义的整数和实数参数。,module mod1( out, in1, in2);. . . parameter cycle = 20, prop_ del = 3,setup = cycle/2 - prop_del,p1 = 8,x_ word = 16bx,file = “/ usr1/ jdough/ design/ mem_ file. dat“;. . .wire p1: 0 w1; / A wire declaration using parameter. . . endmodule,注意:参数file不是stri

14、ng,而是一个整数,其值是所有字母的扩展ASCII值。若file=“AB”,则file值为8h4142。用法: $fopen(file); $display(“%s”, file);,参数重载(overriding),可用defparam语句在编译时重载参数值。 defparam语句引用参数的层次化名称 使用defparam语句可单独重载任何参数值。,Defparam语句(现在综合工具还不支持),module mod1( out, in1, in2);. . .parameter p1 = 8,real_constant = 2.039,x_word = 16bx,file = “/usr1/

15、jdough/design/mem_file.dat“;. . . endmodule,module test; . . .mod1 I1( out, in1, in2);defparamI1. p1 = 6,I1. file = “/ my_mem.dat“; . . . endmodule,参数重载(overriding),module mod1( out, in1, in2);. . .parameter p1 = 8,real_constant = 2.039,x_word = 16bx,file = “/usr1/jdough/design/mem_file.dat“; . . .

16、endmodule module top;. . .mod1 #( 5, 3.0, 16bx, “/ my_mem. dat“) I1( out, in1, in2);. . . endmodule,模块实例化时参数重载,使用#,次序与原说明相同,不需要给所有参数赋新值,但不能跳跃赋值,假设模块MOD顺序定义三个参数a, b, c,则: MOD u1 #( a, b) (.); MOD u2 #(a) (.); MOD u3 #(a, ,c) (.); MOD u4 #(, b, c) (.);,为什么编译器认为这是参数而不是延时呢?,因为#说明延时的时候只能用于gate或过程语句,不能用于模

17、块实例。gate(primitives)在实例化时只能有延时,不能有模块参数。,寄存器数组(Register Arrays),在Verilog中可以说明一个寄存器数组。integer NUMS 7: 0; / 包含8个整数数组变量time t_vals 3: 0; / 4个时间数组变量 reg类型的数组通常用于描述存储器其语法为: reg MSB:LSB first_addr:last_addr;MSB:LSB定义存储器字的位数first_addr:last_addr定义存储器的深度例如:reg 15: 0 MEM 0:1023; / 1K x 16存储器reg 7: 0 PREP hFFFE

18、: hFFFF; / 2 x 8存储器 描述存储器时可以使用参数或任何合法表达式parameter wordsize = 16;parameter memsize = 1024;reg wordsize-1: 0 MEM3 memsize-1: 0;,存储器寻址(Memory addressing),存储器元素可以通过存储器索引(index)寻址,也就是给出元素在存储器的位置来寻址。mem_name addr_expr Verilog不支持多维数组。也就是说只能对存储器字进行寻址,而不能对存储器中一个字的位寻址。,module mems; reg 8: 1 mema 0: 255; / dec

19、lare memory called mema reg 8: 1 mem_word; / temp register called mem_ word . . . initialbegin$displayb( mema5); /显示存储器中第6个字的内容mem_word = mema5; $displayb( mem_word8); / /显示第6个字的最高有效位end endmodule,若要对存储器字的某些位存取,只能通过暂存器传递,复习(review),问题: 在Verilog中,什么情况下输出端会输出X值? net和register类型的主要区别是什么? 在Verilog中如何定义一个

20、常数?,解答: 若输出端输出X值, 一种可能是输出net上发生驱动冲突,二是由一个未知值传递到net上引起。 register有存储功能,而net必须持续驱动。 在Verilog中使用parameter定义一个常数。文本宏也是常数的一种形式。,习,问题: 当仿真器遇到编译指导resetall时将所有编译指导置为缺省值吗? 使用什么选项指定库的名字? 如果仿真器没有在编译指导uselib指定的库中找到实例的定义,它会去哪里寻找?,解答: 不是。当使用编译指导resetall时,IEEE规范没有说明如何处理文本宏。Cadence Verilog仿真器对文本宏不作处理。要重文本宏,使用编译指导undef。 使用-v选项和/或-y及+libext+选项。 不会再去别的位置查找。,

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报