Verilog HDL语言的描述语句.doc

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Verilog HDL语言的描述语句

第4节 Verilog HDL语言的描述语句 Verilog HDL 描述语句 2.4.1 结构描述形式? 通过实例进行描述的方法,将Verilog HDL预先定义的基本单元实例嵌入到代码中,监控实例的输入。Verilog HDL中定义了26个有关门级的关键字,比较常用的有8个。在实际工程中,简单的逻辑电路由逻辑门和开关组成,通过门元语可以直观地描述其结构。 基本的门类型关键字如下所述: and nand nor or xor xnor buf not ??????? Verilog HDL支持的基本逻辑部件是由该基本逻辑器件的原语提供的。其调用格式为: ??????? 门类型 实例名 (输出,输入1,输入2,……,输入N) ??????? 例如,nand na01(na_out, a, b, c ); ??????? 表示一个名字为na01的与非门,输出为na_out,输入为a, b, c。 ??????? 例2-5 一个简单的全加器例子: module ADD(A, B, Cin, Sum, Cout); ??????? input A, B, Cin; ??????? output Sum, Cout; ??????? // 声明变量 ??????? wire S1, T1, T2, T3; ??????? xor X1 (S1, A, B), ????????????? X2 (Sum, S1, Cin); ??????? and A1 (T3, A, B), ??????????????? A2 (T2, B, Cin), ??????????????? A3 (T1, A, Cin); ???????? or O1 (Cout, T1, T2, T3); endmodule 在这一实例中,模块包含门的实例语句,也就是包含内置门xor、and和or的实例语句。门实例由线网型变量S1、T1、T2和T3互连。由于未指定顺序,门实例语句可以以任何顺序出现。 门级描述本质上也是一种结构网表。在实际中的使用方式为:先使用门逻辑构成常用的触发器、选择器、加法器等模块,再利用已经设计的模块构成更高一层的模块,依次重复几次,便可以构成一些结构复杂的电路。其缺点是:不易管理,难度较大且需要一定的资源积累。? 2.4.2 数据流描述形式 数据流型描述一般都采用assign连续赋值语句来实现,主要用于实现组合功能。连续赋值语句右边所有的变量受持续监控,只要这些变量有一个发生变化,整个表达式被重新赋值给左端。这种方法只能用于实现组合逻辑电路。其格式如下: ??????? assign L_s = R_s; ? 例2-6 一个利用数据流描述的移位器 module mlshift2(a, b); ??????? input a; ??????? output b; ??????? assign b = a2; endmodule 在上述模块中,只要a的值发生变化,b就会被重新赋值,所赋值为a左移两位后的值。 ? 2.4.3 行为描述形式? 行为型描述主要包括过程结构、语句块、时序控制、流控制等4个方面,主要用于时序逻辑功能的实现。 1.过程结构 过程结构采用下面4种过程模块来实现,具有强的通用型和有效性。 initial模块 always模块 任务(task)模块 ?函数(function)模块 一个程序可以有多个initial模块、always模块、task模块和function模块。initial模块和always模块都是同时并行执行的,区别在于initial模块只执行一次,而always模块则是不断重复地运行。另外,task模块和function模块能被多次调用,其具体使用方法可参见3.5.3节的专题。 (1)initial 模块 在进行仿真时,一个initial模块从模拟0时刻开始执行,且在仿真过程中只执行一次,在执行完一次后,该initial就被挂起,不再执行。如果仿真中有两个initial模块,则同时从0时刻开始并行执行。 ??????? initial模块是面向仿真的,是不可综合的,通常被用来描述测试模块的初始化、监视、波形生成等功能。其格式为: initial begin/fork ??????? 块内变量说明 ??????? 时序控制1 行为语句1; ??????? …… ??????? 时序控制n 行为语句n; end/join 其中,begin……end块定义语句中的语句是串行执行的,而fork……join块语句中的语句定义是并行执行的。当块内只有一条语句且不需要定义

您可能关注的文档

文档评论(0)

80019pp + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档