1

BCD to 7 セグメントの次のコードを書きました。コードは find をコンパイルしてシミュレートしますが、num の値が 2 を超えていません。その理由はわかりません。コードは次のとおりです。

module BCDtoSeven_TOP
  reg  [3:0] num;
  wire a,b,c,d,e,f,g;

  BCDtoSeven s(num,a,b,c,d,e,f,g);

  initial begin
    num=1;
  end

  always @(num<=9) begin
    #2 num=num+1;
  end

endmodule

サブモジュール:

module BCDtoSeven(num,a,b,c,d,e,f,g);

  output a,b,c,d,e,f,g;
  input  [3:0] num;

  assign a=(num==4 || num==5 || num==6 || num==7 || num==8 || num==9)? 1:0;
  assign b=(num==2 || num==3 || num==5 || num==6 || num==7 || num==8 || num==9)? 1:0;
  assign c=(num==2 || num==3 || num==8 || num==9 || num==7)? 1:0;
  assign d=(num==4 || num==3 || num==5 || num==8 || num==9 || num==7)? 1:0;
  assign e=(num==5 || num==3 || num==6 || num==8 || num==9)? 1:0;
  assign f=(num==2 || num==1 || num==6 || num==8 )? 1:0;
  assign g=(num==2 || num==3 || num==6 || num==8 || num==9 || num==5 )? 1:0;
endmodule
4

1 に答える 1

4

ブロックは、always @センシティビティ リスト内の信号が変更されるたびに実行されます。num<=9true のままなので、ブロックは 1 回だけ実行されます。

時計を使用する別の方法は次のようになります。

always @(posedge clk) begin
    if(num <= 9) begin
        num = num+1;
    end
end
于 2013-01-14T17:11:37.867 に答える