找回密码
 注册
关于网站域名变更的通知
查看: 470|回复: 1
打印 上一主题 下一主题

FPGA wire和reg的区别

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-7-25 16:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
wire表示直通,即输入有变化,输出马上无条件地反映(如与、非门的简单连接)。
0 a" i+ V7 d9 u% Y5 }3 Q" mreg表示一定要有触发,输出才会反映输入的状态。

, g6 u6 A( C  s9 s& r3 b) @
. p- m0 m) O' ?' K' k8 Rreg相当于存储单元,wire相当于物理连线。reg表示一定要有触发,没有输入的时候可以保持原来的值,但不直接实际的硬件电路对应。
' A( b6 ~8 R( g8 ]6 S  J
& D  o7 a2 \- G3 |! q5 _; @1 y# `

3 [/ b  `, q( H5 A+ B两者的区别是:寄存器型数据保持最后一次的赋值,而线型数据需要持续的驱动。wire使用在连续赋值语句中,而reg使用在过程赋值语句(initial ,always)中。wire若无驱动器连接,其值为z,reg默认初始值为不定值 x 。
) V5 ^- g- ]7 b4 d/ Y% _, g2 a% J0 q. V3 ^
在连续赋值语句中,表达式右侧的计算结果可以立即更新表达式的左侧。在理解上,相当于一个逻辑之后直接连了一条线,这个逻辑对应于表达式的右侧,而这条线就对应于wire。在过程赋值语句中,表达式右侧的计算结果在某种条件的触发下放到一个变量当中,而这个变量可以声明成reg类型的。根据触发条件的不同,过程赋值语句可以建模不同的硬件结构:如果这个条件是时钟的上升沿或下降沿,那么这个硬件模型就是一个触发器;如果这个条件是某一信号的高电平或低电平,那么这个硬件模型就是一个锁存器;如果这个条件是赋值语句右侧任意操作数的变化,那么这个硬件模型就是一个组合逻辑。
, J9 |& S; Q! D9 o( Q3 D0 j

, n: z, w3 \5 d/ O6 C对组合逻辑输出变量,可以直接用assign。即如果不指定为reg类型,那么就默认为1位wire类型,故无需指定1位wire类型的变量。当然专门指定出wire类型,可能是多位或为使程序易读。wire只能被assign连续赋值,reg只能在initial和always中赋值。
) y1 {) o, n+ Y

( a5 V: x$ T: m  X6 i- J2 H/ k输入端口可以由wire/reg驱动,但输入端口只能是wire;输出端口可以是wire/reg类型,输出端口只能驱动wire;若输出端口在过程块中赋值则为reg型,
. ?/ B/ |3 b3 S2 o
6 T) U5 Y9 P; Y" U- V

0 n! c/ J- O6 i! N$ l若在过程块外赋值则为net型(wire/tri)。用关键词inout声明一个双向端口, inout端口不能声明为reg类型,只能是wire类型。9 p% v3 q6 F5 |0 [

* M# u( W4 D5 ?& a% f2 T
( D! |+ q1 T" I, Z- `7 x5 r1 E9 i
默认信号是wire类型,reg类型要申明。这里所说的默认是指输出信号申明成output时为wire。如果是模块内部信号,必须申明成wire或者reg.7 U8 u  A+ @& w' P/ A2 @
/ n6 i- ^3 z: o1 d4 o) _+ ^, p$ m
8 }8 f3 m" `; ]
对于always语句而言,赋值要申明成reg,连续赋值assign的时候要用wire
* x* m6 K  ?# {; i
+ T6 g) g5 i/ b' Q0 @* U
6 J3 o4 z3 Y; z: w; W" @% f8 r

- T: v0 L- H$ K7 y

该用户从未签到

2#
发表于 2019-7-25 16:48 | 只看该作者
看看FPGA wire和reg的区别
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-12 17:37 , Processed in 0.125000 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表