Verilog(始终分配)

RIs*_*dav 5 verilog

我开始知道我们可以在程序块中使用赋值语句(就像在always中一样),在always块内部和外部使用“赋值”有什么区别(与合成电路有关)。我的意思是,什么时候绝对有必要在always中使用分配?

小智 6

决不,assign关键字用于连续赋值,它会在综合时生成组合逻辑。事实上,您可以assign通过always块获得行为:

wire test;
//At all times, test equals input
assign test = input;
Run Code Online (Sandbox Code Playgroud)

相当于:

reg test;
//Each time input changes(with the always@*), test takes its value
always@*
  test = input;
Run Code Online (Sandbox Code Playgroud)

always块中,您应该只使用非阻塞赋值('<='),它们是过程赋值。使用阻塞分配是可能的,但是,您必须确保执行您想要的操作。

这个线程

据我所知,有两条生活规则,无一例外:

  1. 始终对组合或电平敏感代码使用阻塞分配以及时钟分配

  2. 对于在时钟边沿写入并在另一个进程中的同一时钟边沿读取的变量,始终使用非阻塞赋值。