0

D フリップフロップを使用してリップル カウンターを作成しています。ただし、次のコードは変数のブロックIllegal reference error内に表示されます。何故ですか?initialq2,q3,q4

module RCounter;

reg d,d2,d3,d4,clk;
wire q,q2,q3,q4;


DFlipFlop a(d,q,clk);
DFlipFlop a1(d2,q2,q);
DFlipFlop a2(d3,q3,q2);
DFlipFlop a3(d4,q4,q3);

initial

begin

clk =1;


d=0;d2=0;d3=0;d4=0;q2=0;q3=0;q4=0;

#2 d=1;d2=~q2; d3=~q3; d4=~q4;
#2 d=0;d2=~q2; d3=~q3; d4=~q4;
#2 d=1;d2=~q2; d3=~q3; d4=~q4;
#2 d=0;d2=~q2; d3=~q3; d4=~q4;
#2 d=1;d2=~q2; d3=~q3; d4=~q4;
#2 d=0;d2=~q2; d3=~q3; d4=~q4;
#2 d=1;d2=~q2; d3=~q3; d4=~q4;

end

always 
begin

#2 assign clk = ~ clk;

end

endmodule

D フリップフロップ モジュール:

module DFlipFlop(d,q,clk);

input d,clk;
output q;

assign q = clk?( (d==1)? 1:0) : q;

endmodule

どうすればこの問題を解決できますか?

よろしく

4

2 に答える 2

2

Vlad Lazarenko が指摘したように、内部initialまたはalways@ブロック内のワイヤに値を割り当てることはできません。

wireこれを修正するには、タイプを からに変更するだけregです。

logicまたは、SystemVerilog を使用しているかのように、すべて (トライステート バスを除く) を宣言します。

reg または wire の定義は、その階層レベルにのみ適用されます。reg は、そのモジュール内でワイヤとして扱われるポートを駆動できます。

Reg は、フリップフロップまたはレジスターを意味するものではなく、シミュレーターの最適化です。

フリップフロップは通常、次の方法でインスタンス化されることにも注意してください。

reg x;
always @(posedge clk or negedge rst_n) begin
  if(~rst_n) begin
    //reset condition
    x <= 1'b0;
  end
  else begin
    x <= next_value;
  end
end
于 2013-02-20T15:52:50.547 に答える
0

ここで、ワイヤに初期値を割り当てようとしています。

q2=0;q3=0;q4=0;

それは違法です。

于 2013-02-20T15:02:51.140 に答える