Verilog中assign语句讲解.doc_第1页
Verilog中assign语句讲解.doc_第2页
Verilog中assign语句讲解.doc_第3页
全文预览已结束

下载本文档

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

文档简介

Verilog中assign用法:assign相当于连线,一般是将一个变量的值不间断地赋值给另一个变量,就像把这两个变量连在一起,所以习惯性的当做连线用,比如把一个模块的输出给另一个模块当输入。assign的功能属于组合逻辑的范畴,应用范围可概括为以下三点: (1)持续赋值; (2)连线; (3)对wire型变量赋值,wire是线网,相当于实际的连接线,如果要用assign直接连接,就用wire型变量。wire型变量的值随时变化。其实以上三点是相通的。 要更好的把握assign的使用,Verilog中有几个要点需要深入理解和掌握: (1)在Verilog module中的所有过程块(如initial块和always块)、连续赋值语句(如assign语句)和实例引用都是并行的。在同一module中这三者出现的先后顺序没有关系。 (2)只有连续赋值语句assign和实例引用语句可以独立于过程块而存在于module的功能定义部分。 (3)连续赋值assign语句独立于过程块,所以不能在always过程块中使用assign语句。Wire类型概念:Wire主要起信号间连接作用,用以构成信号的传递或者形成组合逻辑。因为没有时序限定,wire的赋值语句通常和其他block语句并行执行。Wire不保存状态,它的值可以随时改变,不受时钟信号限制。除了可以在module内声明,所有module的input 和output默认都是wire型的。Reg类型概念:Reg是寄存器的抽象表达,作用类似通常编程语言中的变量,可以储存数值,作为参与表达式的运算,通常负责时序逻辑,以串行方式执行。Reg可以保存输出状态。状态改变通常在下一个时钟信号边沿翻转时进行。赋值方式Wire有两种赋值方式1.在定义变量时赋初值,方式是用=。如果之后没有再做赋值,初值会一直保留,(是否可以给逻辑?)wire wire_a = 1b0;2.用assign语句赋值,等式右边可以是wire,reg,一个常量或者是逻辑运算Wire wire_a;Wire wire_b;Wire wire_c;Reg reg_a;assign wire_b = wire_a;assign wire_c =reg_a;assign wire_d =wire_b & wire_c; 如果不赋值,wire的默认状态是高阻态,即z。 对reg的使用通常需要有触发条件,在always的block下进行。触发条件可以是时钟信号上升沿。赋值语句可以是=或者 =。如果是从reg到reg,则形成组合逻辑,如果是从reg到reg,则构成一个寄存器,形成时序逻辑。Wire wire_a;Wire wire_b;Reg reg_a;Reg reg_b;Always ( posedge clk)Begin Reg_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.两个共同具有性质:都能用于assign与always 模块表达式的右侧。使用方式在引用一个module时,输入端口可以是wire型,也可以reg型。这里可以把对input的赋值看作一个assign语句,使用的变量相当于等号右边的变量,所以两者都可以。而对于输出端口,必须使用reg型,而不能是wire型。同样用assign的角度考虑,module的输出在等号右边,而使用的变量成了等号左边,assign语句等号左边只能是wire型。位宽这是个使用注意事项。所有的wire和reg在声明时如果不做特殊声明,只有1位。这个对于熟悉其他编程语言的人是一个容易犯错的地方。执行wire wire_a = 4he;语句最后得到的wire_a是0x1,而不是0xe。因为wire_a只取了0xe的最低位的值而省略掉了其他值。所以正确的语句应该是wire3:0 wire_a = 4he;这样wire_a输出的结果才是一个0xe。 保留字说明always语句重复执行and逻辑与实例assign过程化持续赋值automatic递归调用修饰词begin顺序执行语句组开始buf缓冲器bufif0低电平是能缓冲器bufif1高电平是能缓冲器case分支语句casex分支语句casez分支语句cellcmos门级原语config配置deassign停止过程化语句赋值default分支语句其他选项defparam重写参数值design配置disable中止运行edge边沿else条件语句endbegin语句结束endcase分支语句结束endconfig配置结束endfunction函数结束endgenerate生成结束endmodule模块结束endprimitive原语结束endspecifyendtable真值表结束endtask任务结束event事件forfor循环force过程化持续赋值forever永久执行fork同步执行语句function函数generate生成genvargenerate循环highz0高阻0highz1高阻1ifif语句ifnonespecify语句initial初始化inout双向input输入instance实例integer整型joinfork-join语句large强度liblist库列表localparam本地参数macromodule模块medium强度module模块nand逻辑与非negedge下降沿nmos门级MOSnor逻辑或非noshowcancelledspecify语句not逻辑非notif0低电平使能非门notif1高电平使能非门or逻辑或output输出parameter参数pmosMOS原语posedge上升沿primitive原语pull0强度pull1强度pulldown强度pullup强度pulsestyle_ondetectspecify语句pulsestyle_oneventspecify语句rcmosMOS原语real实数realtime实数reg变量releaseforce releaserepeat重复rnmos门级MOSrpmos门级MOSrtran门级双向通道rtranif0门级双向通道rtranif1门级双向通道scalared类型修饰符showcancelledspecify语句signed类型修饰符small强度specifyspecparam指定参数strong0强度strong1强度supply0强度supply1强度table真值表task任务time时间类型tran门级双向通道tranif0门级双向通道带控制tranif1门级双向通道带控制tri网络数据

温馨提示

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

评论

0/150

提交评论