【发布时间】:2015-03-17 23:29:19
【问题描述】:
如果我正确理解了锁存器,它是在组合块中创建的,在将变量赋值给一个值时,并非所有可能的条件都被声明。我如何在我的顺序块中获得锁存器?
当我通过 Quartus 编译我的代码时,它返回 2 Fmax,这表明我有一个锁存器。
always@(posedge clk or negedge nreset) begin
case(counter)
0: begin
if(state == IDLE) begin
// DOES SOMETHING
end
end
1: begin
// DOES ASSIGNMENT
end // PROLOG
81: begin
// DOES ASSIGNMENT
end // EPILOG
82: begin
// DOES ASSIGNMENT
end // POSTPROC
default: begin
// DOES ASSIGNMENT
end // ROUNDS
endcase
我已经检查了每个案例,并确保所有分配都是非阻塞的。知道我为什么会被锁住吗?
我的代码正在计算 SHA1
我有 2 个 always@(posedge clk),一个计算下一个 Wt,上面计算下一个 A,B,C,D,E 值。
【问题讨论】:
-
这个always块不是组合块。它由时钟事件触发,因此合成器不会推断锁存器,而是推断寄存器(带时钟的触发器)。如果打算将其作为 FSM 的组合部分,则敏感度列表将写为:
always @(*)