1.assign 和 always@(*)两者描述组合逻辑时
assign out_a = a;
always@(*)
begin
out_b = b;
end
所综合出的电路是相同的,都是对输出进行连续赋值。只有当always的敏感列表中是边沿触发的时候,综合出来的电路才是触发器类型。
2.wire型和reg类型的区别
(1)在使用assign语句时,需要将寄存器类型的值引出,需要使用wire类型,充当导线使用。
例如:
wire out;
assign out = a&b;
(2):元件实例化时必须用wire型
例如:
wire dout;
ram u_ram
(
....
.out(dout);
)
reg变量在always中有两种情况:
(1)always @(a or b or c)形式的,即不带时钟边沿的,综合出来还是组合逻辑;
(2)always @(posedge clk)形式的,即带有边沿的,综合出来一般是时序逻辑,会包含触发器(Flip-Flop)
reg和wire的区别:
reg型数据保持最后一次的赋值,而wire型数据需要持续的驱动。wire用在连续赋值语句assign中;reg用于always过程赋值语句中。
在连续赋值语句assign中,表达式右侧的计算结果可以立即更新到表达式的左侧,可以理解为逻辑之后直接连接了一条线,这个逻辑对应于表达式的右侧,这条线对应于wire;
在过程赋值语句中,表达式右侧的计算结果在某种条件的触发下放到一个变量当中,这个变量可以声明成reg型,根据触发条件的不同,过程语句可以建模不同的硬件结构:
(1)如果这个条件是时钟上升沿或下降沿,那硬件模型就是一个触发器,只有是指定了always@(posedge or negedge)才是触发器。
(2)如果这个条件是某一信号的高低电平,那这个硬件模型就是一个锁存器。
(3)如果这个条件是赋值语句右侧任意操作数的变化,那这个硬件模型就是一个组合逻辑。
3.Verilog中同步复位和异步复位比较
4.verilog中阻塞赋值和非阻塞赋值的区别