Verilog(总是分配)

时间:2017-06-26 11:51:21

标签: verilog

我开始知道我们可以在程序块中使用assign语句(比如总是如此),使用“assign”在always块内部和在其外部(与合成电路有关)的区别是什么。我的意思是什么时候总是必须使用assign?

2 个答案:

答案 0 :(得分:1)

从不,assign关键字用于连续分配,它将在综合时生成组合逻辑。实际上,您可以使用always block获取assign行为:

wire test;
//At all times, test equals input
assign test = input;

相当于:

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

always块中,您应该只使用非阻塞分配('< ='),这是程序分配。使用阻止分配是可能的,但是,您必须确保按照自己的意愿行事。

来自this thread

  

我知道没有例外的两条生活规则:

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

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

  4.   

答案 1 :(得分:1)

赋值和相应的取消分配(在always块中)也称为“程序性连续调整”,可用于特殊用途的always块。在大多数情况下,这是不可合成的,我从来没有遇到它的使用。

一个例子:

   reg in1, in2, out;
   reg [1:0] select;

   always @* begin
      case (select)
        2'b01: assign out = in1;
        2'b10: assign out = in2;
        2'b11: deassign out;
      endcase // case (select)
   end
一般建议 - 不要使用它。