差别
这里会显示出您选择的修订版和当前版本之间的差别。
后一修订版 | 前一修订版 | ||
reg [2018/09/14 14:43] group001 创建 |
reg [2019/05/06 17:14] (当前版本) zhijun |
||
---|---|---|---|
行 1: | 行 1: | ||
- | wire 和reg是Verilog程序里的常见的两种变量类型,它们都是构成verilog程序逻辑最基本的元素。\\ | + | wire 和 reg 是Verilog程序里的常见的两种变量类型,它们都是构成verilog程序逻辑最基本的元素。\\ |
- | Wire主要起信号间连接作用,用以构成信号的传递或者形成组合逻辑。因为没有时序限定,wire的赋值语句通常和其他block语句并行执行。\\ | + | wire主要起信号间连接作用,用以构成信号的传递或者形成组合逻辑。因为没有时序限定,wire的赋值语句通常和其他block语句并行执行。\\ |
- | Wire不保存状态,它的值可以随时改变,不受时钟信号限制。\\ | + | wire不保存状态,它的值可以随时改变,不受时钟信号限制。\\ |
除了可以在module内声明,所有module的input 和output默认都是wire型的。\\ | 除了可以在module内声明,所有module的input 和output默认都是wire型的。\\ | ||
- | Reg是寄存器的抽象表达,作用类似通常编程语言中的变量,可以储存数值,作为参与表达式的运算,通常负责时序逻辑,以串行方式执行。\\ | + | reg是寄存器的抽象表达,作用类似通常编程语言中的变量,可以储存数值,作为参与表达式的运算,通常负责时序逻辑,以串行方式执行。\\ |
- | Reg可以保存输出状态。状态改变通常在下一个时钟信号边沿翻转时进行。\\ | + | reg可以保存输出状态。状态改变通常在下一个时钟信号边沿翻转时进行。\\ |
- | Wire有两种赋值方式\\ | + | wire有两种赋值方式\\ |
- | - 在定义变量时赋初值,方式是用=。如果之后没有再做赋值,初值会一直保留wire wire_a = 1’b0; | + | * 普通列表项目在定义变量时赋初值,方式是用 = 。如果之后没有再做赋值,初值会一直保留 wire wire_a = 1’b0; |
- | - 用assign语句赋值,等式右边可以是wire,reg,一个常量或者是逻辑运算 | + | * 普通列表项目普通列表项目用assign语句赋值,等式右边可以是wire型变量、reg型变量、一个常量或者是逻辑运算 |
<code verilog> | <code verilog> | ||
Wire wire_a; | Wire wire_a; | ||
行 17: | 行 18: | ||
assign wire_d =wire_b & wire_c; | assign wire_d =wire_b & wire_c; | ||
</code> | </code> | ||
+ | |||
如果不赋值,wire的默认状态是高阻态,即z。\\ | 如果不赋值,wire的默认状态是高阻态,即z。\\ | ||
- | 对reg的使用通常需要有触发条件,在always的block下进行。触发条件可以是时钟信号上升沿。赋值语句可以是=或者 <=。如果是从reg到reg,则形成组合逻辑,如果是从reg到reg,则构成一个寄存器,形成时序逻辑。\\ | + | |
+ | 对reg的使用通常需要有触发条件,在always的block下进行。触发条件可以是时钟信号上升沿或者下降沿,则构成一个寄存器,形成时序逻辑;触发条件是电平信号的话。则形成组合逻辑\\ | ||
<code verilog> | <code verilog> | ||
Wire wire_a; | Wire wire_a; | ||
行 30: | 行 33: | ||
end | end | ||
</code> | </code> | ||
+ | |||
Reg在声明时候不赋初值。未赋值的reg变量处于不定态,即x。\\ | Reg在声明时候不赋初值。未赋值的reg变量处于不定态,即x。\\ | ||
使用方式\\ | 使用方式\\ |