我想知道只有当灵敏度列表中的多个信号一起变化时才能执行始终块。
同样地,假设我有'in'信号和另一个'posedge clk'。我希望在信号改变时执行始终块。是否可能,如果是,它的语法是什么?
答案 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