3

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

如,假设我有一个信号'in'和另一个'posedge clk'。我希望在两个信号都发生变化时执行 always 块。有没有可能,如果有,它的语法是什么?

4

2 回答 2

3

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

于 2013-03-12T06:12:43.030 回答
2

这是对原始问题的回答,而不是评论中揭示的问题

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

always @*块创建组合逻辑,当分配或选择信号的右侧发生变化时,由模拟器评估。

如果您有多个由 D 型触发器驱动的 1 位信号,您可以^对输入 (D) 和输出 (Q) 进行异或 ( ) 以创建一个 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
于 2013-03-12T08:43:32.740 回答