Verilog多个信号在始终块的灵敏度列表中更改

时间:2013-03-12 05:09:14

标签: verilog

我想知道只有当灵敏度列表中的多个信号一起变化时才能执行始终块。

同样地,假设我有'in'信号和另一个'posedge clk'。我希望在信号改变时执行始终块。是否可能,如果是,它的语法是什么?

2 个答案:

答案 0 :(得分:3)

一般来说,没有办法做到这一点,因为这实际上并没有映射到人们通常会合成的任何类型的标准逻辑单元。但是,如果你描述了你的最终目标,我相信在使用可综合逻辑的同时,有人可以指出你正确的方向。我很难想象你想要什么样的块。

答案 1 :(得分:2)

这是原始问题的答案,而不是评论中显示的问题

正如@Tim所提到的,没有硬件构造可以做到这一点。 always @(posedge clk)创建触发器,用于对clk边缘的数据进行采样。

always @*块创建组合逻辑,当任务的右侧或选择信号发生变化时,模拟器会对其进行评估。

如果您有多个从D型触发器驱动的1位信号,您可以对输入(D)和输出(Q)进行XOR(^)以创建1个时钟周期宽的信号,指示价值已经改变。可以组合这些变化信号以产生使能信号。用作触发器的选择或启用。

always @(posedge clk or negedge rst_n) begin
  if (~rst_n) begin
    //reset condition
  end
  else if (enabled)
    //Enabled condition
  end
  // no final else, everything will holds its value
end

或者可以作为锁存器的启用:

//synopsys async_set_reset "rst_n"
always @* begin
  if (~rst_n) begin
    // Reset 
  end
  else if (latch_open) begin
    //next datavalue
  end
end