我正在为 4 位 SR 锁存器编写 verilog 代码。我认为锁存器是异步的。所以我没有包括时钟。起初我编写了 1 位 SR 锁存器的代码,然后我将该代码用于 4 位 SR 锁存器。
module srlatch (S, R, En, Q, Qc);
input S, R;
input En;
output Q, Qc;
reg Q,Qc;
always@(*)
begin
if(En)
begin
Q = ~(R | Qc);
Qc = ~(S | Q);
end
end
endmodule
module srlatch4 (S, R, En, Q, Qc);
input [3:0] S, R;
input En;
output [3:0] Q, Qc;
srlatch s1(S[0], R[0], En, Q[0], Qc[0]);
srlatch s2(S[1], R[1], En, Q[1], Qc[1]);
srlatch s3(S[2], R[2], En, Q[2], Qc[2]);
srlatch s4(S[3], R[3], En, Q[3], Qc[3]);
endmodule
问题是什么?它没有通过测试用例,即 Q(t) = 0x0x, Qc(t) = 1010 and S = 1100, R = 0000, En =0, Q(t+1) = 0x0x, Qc(t+1) = 1010