博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转载】Verilog语言中wire与reg的区别
阅读量:5961 次
发布时间:2019-06-19

本文共 1154 字,大约阅读时间需要 3 分钟。

reg相当于存储单元,wire相当于物理连线。reg表示一定要有触发,没有输入的时候可以保持原来的值,但不直接实际的硬件电路对应。wire表示直通,即输入有变化,输出马上无条件地反映(如与、非门的简单连接)。

 

      两者的区别是:寄存器型数据保持最后一次的赋值,而线型数据需要持续的驱动。wire使用在连续赋值语句中,而reg使用在过程赋值语句中。

 

      在连续赋值语句中,表达式右侧的计算结果可以立即更新表达式的左侧。在理解上,相当于一个逻辑之后直接连了一条线,这个逻辑对应于表达式的右侧,而这条线就对应于wire。在过程赋值语句中,表达式右侧的计算结果在某种条件的触发下放到一个变量当中,而这个变量可以声明成reg类型的。根据触发条件的不同,过程赋值语句可以建模不同的硬件结构:如果这个条件是时钟的上升沿或下降沿,那么这个硬件模型就是一个触发器;如果这个条件是某一信号的高电平或低电平,那么这个硬件模型就是一个锁存器;如果这个条件是赋值语句右侧任意操作数的变化,那么这个硬件模型就是一个组合逻辑。

 

      对组合逻辑输出变量,可以直接用assign。即如果不指定为reg类型,那么就默认为1wire类型,故无需指定1wire类型的变量。当然专门指定出wire类型,可能是多位或为使程序易读。wire只能被assign连续赋值,reg只能在initialalways中赋值。

 

      输入端口可以由wire/reg驱动,但输入端口只能是wire;输出端口可以使wire/reg类型,输出端口只能驱动wire;若输出端口在过程块中赋值则为reg型,若在过程块外赋值则为net型。用关键词inout声明一个双向端口, inout端口不能声明为reg类型,只能是wire类型。

 

      默认信号是wire类型,reg类型要申明。这里所说的默认是指输出信号申明成output时为wire。如果是模块内部信号,必须申明成wire或者reg.

 

      对于always语句而言,赋值要申明成reg。连续赋值assign的时候要用wire

 

if 语句只能用于过程块中,所谓过程块语句是指由initialalways语句引导的执行语句集合。除了这两块语句引导的begin end块中可以编译条件语句外,模块的其他地方都不能编写。 input 不能被定义为寄存器型,因此也不能在always中作为赋值的左端,而output都可以。

inout不能定义为reg型,因此只能用assign赋值。因此如果有条件,仅仅应该可以用调价赋值语句来使用。

在调用模块进行仿真时,输入信号要为reg 类型,输出信号要为wire

转载于:https://www.cnblogs.com/xiaojiaohuazi/archive/2013/04/08/3008597.html

你可能感兴趣的文章
Vue生产环境部署
查看>>
酒店之王
查看>>
html5判断用户摇晃了手机(转)
查看>>
VS下Qt4.8.4安装
查看>>
Linux df命令
查看>>
redhat6.5 配置使用centos的yum源
查看>>
取得内表的数据数
查看>>
在一个程序中调用另一个程序并且传输数据到选择屏幕执行这个程序
查看>>
“=” “:=” 区别
查看>>
pwnable.kr lotto之write up
查看>>
python之UnittTest模块
查看>>
HDOJ_ACM_Rescue
查看>>
笔记纪录
查看>>
九、oracle 事务
查看>>
Git - 操作指南
查看>>
正则表达式的贪婪与非贪婪模式
查看>>
SqlServer存储过程调用接口
查看>>
DOM
查看>>
通过jQuery.support看javascript中的兼容性问题
查看>>
NYOJ-取石子
查看>>