-2

私はまだ Verilog の最低レベル (ゲート レベル) でプレイしています。この投稿を見つけました : https://electronics.stackexchange.com/questions/390661/is-it-possible-to-create-a-working-jk-flip-flop-using-gate-level-description-inアイデアがうまくいくはずだと理解できたので、マスタースレーブJKフリップフロップを分周器として使用することを解決できました。私は Icestorm ツールチェーンを使用しています。Yosys は文句を言っていませんが、Next-PNR は次のエラーを出しています:

エラー: 組み合わせループの存在、タイミング ポートの不完全な指定などにより、タイミング解析に失敗しました。

これは私のコードです:

module syncRX(clk, signal, detect);
    output wire [7:0] detect;
    input clk, signal;
    
    reg [6:0] det = 7'b1001010;
    
    assign detect = {det, jk5_out};
    
    jk_flip_flop_edge_triggered jk0(.Q(jk5_out), .Qn(Qn), .C(clk), .J(1), .K(1), .RESETn(0));

endmodule // top

module jk_flip_flop_edge_triggered(Q, Qn, C, J, K, RESETn);
   output Q;
   output Qn;
   input  C;
   input  J;
   input  K;
   input  RESETn;

   wire   Kn;   // The complement of the K input.
   wire   D;   
   wire   D1;   // Data input to the D latch.   
   wire   Cn;   // Control input to the D latch.
   wire   Cnn;  // Control input to the SR latch.
   wire   DQ;   // Output from the D latch, inputs to the gated SR latch (S).
   wire   DQn;  // Output from the D latch, inputs to the gated SR latch (R).

   assign D1 = !RESETn ? 0 : D;  // Upon reset force D1 = 0

   not(Kn, K);   
   and(J1, J, Qn);
   and(K1, Kn, Q);   
   or(D, J1, K1);   
   not(Cn, C);
   not(Cnn, Cn);   
   d_latch dl(DQ, DQn, Cn, D1);
   sr_latch_gated sr(Q, Qn, Cnn, DQ, DQn);   
endmodule

module d_latch(Q, Qn, G, D);
   output Q;
   output Qn;
   input  G;   
   input  D;

   wire   Dn; 
   wire   D1;
   wire   Dn1;

   not(Dn, D);   
   and(D1, G, D);
   and(Dn1, G, Dn);   
   nor(Qn, D1, Q);
   nor(Q, Dn1, Qn);
endmodule

module sr_latch_gated(Q, Qn, G, S, R);
   output Q;
   output Qn;
   input  G;   
   input  S;
   input  R;

   wire   S1;
   wire   R1;
   
   and(S1, G, S);
   and(R1, G, R);   
   nor(Qn, S1, Q);
   nor(Q, R1, Qn);
endmodule

では、何が起こったのかと尋ねれば答えは想像できます。なぜ、どのように機能するのかを知りたいのです! ありがとうございます!

4

1 に答える 1

0

ループ:

ピンsyncRX.jk0.dl.D--> ピンsyncRX.jk0.dl.Q/Qn--> ピンsyncRX.jk0.sr.S/R--> ピンsyncRX.jk0.sr.Q/Qn--> ピンsyncRX.jk0.dl.D

標準ライブラリからラッチ セルをインスタンス化すると、タイミング パスとタイミング チェックに関連する問題はそのセルによって処理されます。

よく知られているすべての実装ツールでループが報告されると思います。しかし、Yosys は文句を言っていないとおっしゃっていたので、私も混乱しています (私は Yosys を使用したことがありません)。

于 2020-08-31T11:55:59.283 に答える