4 бит S R защелки в Verilog - PullRequest
       72

4 бит S R защелки в Verilog

0 голосов
/ 03 сентября 2018

Я пишу код verilog для 4-битной S R защелки. Я считал защелку асинхронной. Поэтому я не включил часы. Сначала я написал код для 1-битной защелки S R, затем я использовал этот код для 4-битной защелки S R.

 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 и S = ​​1100, R = 0000, En = 0, Q (t + 1) = 0x0x, Qc (t + 1) = 1010

1 Ответ

0 голосов
/ 03 сентября 2018

Из-за использования всегда @ (En) ваши инструкции процедурного блока будут выполняться только при изменении значения сигнала En.

Вы могли бы закодировать, как показано ниже.

module srlatch ( input S,
                 input R,
                 input En,
                 output reg Q,
                 output reg Qc);

always @(*) begin
  if (En) begin
    Q  =  ~(R | Qc); 
    Qc =  ~(S | Q); 
  end
end

endmodule : srlatch

А также есть неверное выражение для реализации защелки S-R в вашем коде.

...