第5章 Verilog设计深入概要1.ppt

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

第5章 Verilog设计深入 ;5.1 过程中的两类赋值语句;5.1 过程中的两类赋值语句;赋值的类型的选择取决于建模的逻辑类型 在时序块的 RTL 代码中使用非阻塞赋值。 非阻塞赋值在块结束后才完成赋值操作,此赋值方式可以避免在仿真出现冒险和竞争现象。 在组合的 RTL 代码中使用阻塞赋值。 使用阻塞方式对一个变量进行赋值时,此变量的值在赋值语句执行完后就立即改变。;阻塞、非阻塞对比;阻塞与非阻塞语句的使用;5.1 过程中的两类赋值语句 ;5.1 过程中的两类赋值语句 ; 非阻塞(non-blocking)赋值方式 ( b= a): b的值被赋成新值a的操作, 并不是立刻完成的,而是在块结束时才完成; 块内的多条赋值语句在块结束时同时赋值; 硬件有对应的电路。 阻塞(blocking)赋值方式 ( b = a): b的值立刻被赋成新值a; 完成该赋值语句后才能执行下一句的操作; 硬件没有对应的电路,因而综合结果未知。;总结:阻塞和非阻塞赋值比较;always语句——无限循环语句 always语句在仿真过程中是不断重复执行的,但always语句后跟着的过程块是否执行,则要看它的触发条件是否满足,如满足则运行块一次,如不断满足,则循环执行 格式: always 时序控制 语句 注意: always语句由于其不断重复执行特性,只有和一定的时序控制结合在一起才有用,如果一个always语句没有时序控制,则这个always语句将回生成一个仿真死锁。如: always areg = ~areg; ;在过程块中的赋值称为过程赋值。 在过程赋值语句中表达式左边的信号必须是寄存器类型(如reg类型) 在过程赋值语句等式右边可以是任何有效的表达式,数据类型也没有限制。 如果一个信号没有声明则缺省为wire类型。使用过程赋值语句给wire赋值会产生错误。;简单延时;边沿敏感时序;过程语句具有顺序与并行双重性;[例1]顺序执行模块1。 module serial1(q,a,clk); output q,a; input clk; reg q,a; always @(posedge clk) begin q=~q; //阻塞赋值语句 a=~q; end endmodule;serial1.vwf;二、语句的并行执行 “always”模块、“assign”语句、实例元件都是同时(即并行)执行的! 它们在程序中的先后顺序对结果并没有影响。 下面 两个例子将两条赋值语句分别放在两个“always”模块中,尽管两个“always”模块顺序相反,但仿真波形完全相同,;[例3.11.3]并行执行模块1。 module parall1(q,a,clk); output q,a; input clk; reg q,a; always @(posedge clk) begin q=~q; end always @(posedge clk) begin a=~q; end endmodule;不完整条件语句与时序电路的关系;;;5.3 移位寄存器设计 ;5.3.2 模式可控的移位寄存器设计 ;移位运算符;5.3.3 使用移位操作符设计移位寄存器;5.4 乘法器设计及相关语句应用 ;5.4.2 整数型寄存器类型定义;5.4 乘法器设计及相关语句应用 ;一、for语句;[例]用for语句描述的7人投票表决器:若超过4人(含4人)投赞成票,则表决通过。;voter7.vwf;[例] 用for语句初始化memory。;mult_for.v;mult_for.vwf(功能仿真);5.4 乘法器设计及相关语句应用 ; 连续执行一条或多条语句n次。;[例]用repeat语句和移位操作实现两个8位二进制数乘法;mult_repeat.vwf(功能仿真);1.while语句 有条件地执行一条或多条语句。 首先判断循环执行条件表达式是否为真。若为真,则执行后面的语句或语句块;然后再回头判断循环执行条件表达式是否为真,若为真,再执行一次后面的语句;如此不断,直到条件表达式不为真。;注1:首先判断循环执行条件表达式是否为真,若不为真,则其后的语句一次也不被执行! 注2:在执行语句中,必须有一条改变循环执行条件表达式的值的语句! 注3:while语句只有当循环块有事件控制(即@(posedge cl

文档评论(0)

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

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

1亿VIP精品文档

相关文档