第四章VerilogHDL.ppt

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

* * integer、real和time等3种寄存器型变量都是纯数学的抽象描述,不对应任何具体的硬件电路,但它们可以描述与模拟有关的计算。例如,可以利用time型变量控制经过特定的时间后关闭显示等。 reg型变量是数字系统中存储设备的抽象,常用于的具体的硬件描述,因此是最常用的寄存器型变量。 reg型变量定义的关键字是reg,定义格式如下 reg [位宽] 变量1,变量2,…,变量n; 用reg定义的变量有一个范围选项(即位宽),默认的位宽是1。位宽为1位的变量称为标量,位宽超过1位的变量称为向量。标量的定义不需要加位宽选项,例如 reg a,b; //定义两个reg型变量a,b * * 向量定义时需要位宽选项,例如 reg[7:0] data; //定义1个8位寄存器型变量,最高有效位是7,最低有效位是0 reg[0:7] data; //定义1个8位寄存器型变量,最高有效位是0,最低有效位是7 向量定义后可以采有多种使用形式(即赋值) data=8’ data[5:3]=3’B111; data[7]=1; * * (3)数组 若干个相同宽度的向量构成数组。在数字系统中,reg型数组变量即为memory(存储器)型变量。 存储器型可以用如下语句定义 reg[7:0] myram[1023:0]; 上述语句定义了一个1024个字存储器变量myram,每个字的字长为8位。在表达式中可以用下面的语句来使用存储器: myram[7]=75;//存储器myram的第7个字被赋值75(写入) A= myram[7] ;//将存储器的第7个字的值赋给A(读出) * * 4.3 Verilog HDL的语句 语句是构成Verilog HDL程序不可缺少的部分。Verilog HDL的语句包括赋值语句、条件语句、循环语句、结构说明语句和编译预处理语句等类型,每一类语句又包括几种不同的语句。在这些语句中,有些语句属于顺序执行语句,有些语句属于并行执行语句。 * * 4.3.1 赋值语句 1. 门基元赋值语句 格式: 基本逻辑门关键字(门输出,门输入1,门输入2,…,门输入n); 基本逻辑门关键字是Verilog HDL预定义的逻辑门,包括and、or、not、xor、nand、nor等;圆括弧中内容是被描述门的输出和输入信号。 例如,具有a、b、c、d四个输入和y为输出与非门的门基元赋值语句为: nand(y,a,b,c,d); 该语句与assign y = ~(a b c d)等效 * * 2. 连续赋值语句 格式 assign 赋值变量 = 表达式; 例如 assign y = ~(a b c d); 连续赋值语句的“=”号两边的变量都应该是wire型变量。在执行中,输出y的变化跟随输入a、b、c、d的变化而变化,反映了信息传送的连续性。 * * 【例4.4】4输入端与非门的Verilog HDL源程序。 module example_4_4(y,a,b,c,d); output y; input a,b,c,d; assign #1 y = ~(abcd); endmodule #1——表示该门的输出与输入信号之间具有1个单位的 时间延迟。 * * 3. 过程赋值语句 过程赋值语句出现在initial和always块语句中,赋值符号是“=”,格式为 赋值变量 = 表达式; 在过程赋值语句中,赋值号“=”左边的赋值变量必须是reg(寄存器)型变量,其值在该语句结束即可得到。如果一个块语句中包含若干条过程赋值语句,那么这些过程赋值语句是按照语句编写的顺序由上至下一条一条地执行,前面的语句没有完成,后面的语句就不能执行,就象被阻塞了一样。因此,过程赋值语句也称为阻塞赋值语句。 * * 4. 非阻塞赋值语句 非阻塞赋值语句也是出现在initial和always块语句中,赋值符号是“=”,格式为 赋值变量 = 表达式; 在非阻塞赋值语句中,赋值号“=”左边的赋值变量也必须是reg型变量,其值在该块语句结束才可得到。而不象在过程赋值语句那样,语句结束时即刻得到。 * * 例如,在下面的块语句中包含4条赋值语句 always @(posedge clock) m = 3; n = 75; n = m; r = n; 语句执行结束后,r的值是75,而不是3,因为第3行是非阻塞赋值语句“n = m”,该语句要等到本块语句结束时,n的值

文档评论(0)

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

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

1亿VIP精品文档

相关文档