Verilog中assign语句讲解_第1页
Verilog中assign语句讲解_第2页
Verilog中assign语句讲解_第3页
Verilog中assign语句讲解_第4页
Verilog中assign语句讲解_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Verilog 中 assign用法:assign相当于连线,一般是将一个变量的值不间断地赋值给另一个变量,就像把这两个变 量连在一起,所以习惯性的当做连线用,比如把一个模块的输出给另一个模块当输入。assign的功能属于组合逻辑的范畴,应用范围可概括为以下三点:(1)持续赋值;(2)连线;(3)对wire型变量赋值,wire是线网,相当于实际的连接线,如果要用assign直接连接,就用wire型变量。wire型变量的值随时变化。其实以上三点是相通的。要更好的把握assign的使用,Verilog中有几个要点需要深入理解和掌握:(1)在Verilog module中的所有过程块(如initia

2、l 块和always块)、连续赋值语句(如 assign语句)和实例引用都是并行的。在同一 module中这三者出现的先后顺序没有关系。(2)只有连续赋值语句assign和实例引用语句可以独立于过程块而存在于module的功能定义部分。(3)连续赋值assign语句独立于过程块,所以不能在always过程块中使用assign语句。Wire类型概念:Wire主要起信号间连接作用,用以构成信号的传递或者形成组合逻辑。因为没有时序限定,wire的赋值语句通常和其他 block语句并行执行。Wire不保存状态,它的值可以随时改变,不受时钟信号限制。除了可以在 module内声明,所有 module的i

3、nput和output默认都是wire型的。Reg类型概念:Reg是寄存器的抽象表达,作用类似通常编程语言中的变量,可以储存数值,作为参与表达式的运算,通常负责时序逻辑,以串行方式执行。Reg可以保存输出状态。状态改变通常在下一个时钟信号边沿翻转时进行。赋值方式Wire有两种赋值方式1 .在定义变量时赋初值,方式是用=o如果之后没有再做赋值,初值会一直保留,(是否可以给逻辑?)wire wire_a = 1' bO;2 .用assign语句赋值,等式右边可以是wire , reg , 一个常量或者是逻辑运算Wire wire_a;Wire wire_b;Wire wire_c;Reg

4、reg_a;assign wire_b = wire_a;assign wire_c =reg_a;assign wire_d =wire_b & wire_c;如果不赋值,wire的默认状态是高阻态,即 Zo对reg的使用通常需要有触发条件,在 always的block下进行。触发条件可以是时钟信号上升 沿。赋值语句可以是=或者 <=。如果是从reg到reg ,则形成组合逻辑,如果是从 reg到reg , 则构成一个寄存器,形成时序逻辑。Wire wire_a;Wire wire_b;Reg reg_a;Reg reg_b;Always ( posedge elk)BeginR

5、eg_b =reg_a;Reg_c = wire_a | wire_b; endReg在声明时候不赋初值。未赋值的reg变量处于不定态,即 X。Verilog 中 wire 和 reg 区别:1 .在Verilog中,wire永远是wire ,就是相当于一条连线,用来连接电路,不能存储数据, 无驱动能力,是组合逻辑,只能在assign左侧赋值,不能在 always 中赋值;2 .但reg可以综合成register , latch ,甚至wire(当其只是中间变量的时候),可以用于组 合逻辑或者时序逻辑,能存储数据,有驱动能力,在 always 模块表达式左侧被赋值。3 .两个共同具有性质:都能

6、用于assign与always 模块表达式的右侧。使用方式在引用一个module时,输入端口可以是 wire型,也可以reg型。这里可以把对input的赋 值看作一个assign语句,使用的变量相当于等号右边的变量,所以两者都可以。而对于输出端口,必须使用reg型,而不能是wire型。同样用assign的角度考虑,module的输出在等号右边,而使用的变量成了等号左边,assign语句等号左边只能是 wire型。位宽这是个使用注意事项。所有的wire和reg在声明时如果不做特殊声明,只有 1位。这个对于熟悉其他编程语言的人是一个容易犯错的地方。执行wire wire_a = 4 'he

7、;语句最后得到的 wire_a是0x1,而不是Oxe。因为wire_a只取了 Oxe的最低位的值而省略掉 了其他值。所以正确的语句应该是wire3:0 wire_a = 4 'he;这样wire_a输出的结果才是一个 Oxe。保留字说明always语句重复执行and逻辑与实例assign过程化持续赋值automatic递归调用修饰词begin顺序执行语句组开始buf 缓冲器bufifO低电平是能缓冲器bufifl高电平是能缓冲器case 分支语句casex分支语句casez分支语句 cellemos门级原语 config配置deassign停止过程化语句赋值default分支语句其他选

8、项def param重写参数值design配置disable中止运行edge边沿 else条件语句 end begin语句结束 endcase分支语句结束endconfig 配置结束 endfunction函数结束endgenerate生成结束endmodule模块结束 endprimitive原语结束endspecify endtable真值表结束endtask任务结束event事件 for for循环 force过程化持续赋值 forever永久执行fork同步执行语句 function函数generate 生成 genvargenerate 循环highzO高阻 0highzl高阻 1i

9、f if语句ifnonespecify 语句initial初始化inout 双向input输入instance实例integer整型join fork-join语句large强度liblist库列表localparam本地参数macromodule模块medium强度module模块nand逻辑与非negedge下降沿nmos 门级MOSnor逻辑或非noshowcancelled specify 语句not 逻辑非notifO低电平使能非门notifl高电平使能非门or 逻辑或output输出parameter参数pmos MOSM语posedge上升沿primitive原语pullO强度p

10、ull1强度pulldown 强度pullup强度pulsestyle_ondetect specify语句pulsestyle_onevent specify rcmos MO 源语 real实数 realtime实数reg 变量 releaseforce releaserepeat重复mmos 门级 MOS rpmos 门级 MOS rtran门级双向通道 rtranifO 门级双向通道 rtran if 1门级双向通道scalared类型修饰符showcancelled specify 语句 signed类型修饰符small强度 specify specparam指定参数 strongO强度strong 1强度suppIyO强度supplyl强度table真值表 task任务 time时间类型语句tran 门级双向通道tranifO门级双向通道带控制tranifl门级双向通道带控制tri网络数据类型triO网络数据类型tri1网络数据类型triand网络数据类型trior网络数据类型

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论