3

私は50MhzクロックのCPLDを持っています。

これは私のコードです:

module FirstProject(clk, LED);
  output LED;
  input  clk;

  reg [32:0] count1;
  reg        LEDstatus;


  assign LED = LEDstatus;

  always @ (posedge clk) begin
    if (count1 < 10000000) begin
      LEDstatus <= 0;
    end
    else begin
      LEDstatus <= 1;
    end
    count1 <= count1 +1;
  end

endmodule

なぜこれが機能しないのかわかりません。CPLDに展開しますが、ライトは常に点灯しています

このコードは、まったく同じピン割り当てとタイミング制約を使用してcpldで機能します

http://www.fpga4fun.com/Opto2.html

4

3 に答える 3

4

クロック周波数は50MHz、オンオフループは2 ** 33-1(8589934591)サイクルです。

1/Hz = seconds
slowdown factor * 1/Hz = seconds to complete loop

これは、LEDが次の場所で点滅しようとしていることを意味します。

(8589934591 / 50000000) = 171s, slower than 1Hz

25Hzを超えるものは認識されませんが、それはここでは問題ではありません。

カウントが0〜10000000の場合、ライトはオフになります。

10000000 / 50000000 = 0.2 Seconds

オフ時間は0.2秒、オン時間は約170秒です。この比率を観察するのは非常に難しい可能性があります。50/50のオン/オフ比に切り替えると、より高速な観測が容易になります。

count1を24ビット幅にし、出力をcount1のMSBに基づいて作成することをお勧めします。

reg [23:0] count1; 

always @(posedge clk) begin
  LEDstatus <= count1[23];
  count1    <= count1 + 1;
end
于 2012-08-10T09:32:03.813 に答える
4

LEDを0.025%オフにするので、LEDを点滅させない方がよいでしょう。

20000000に達したときにカウントをゼロにリセットして、それぞれの半分の時間でオンとオフになるようにすることをお勧めします。または、代わりに1000000に達したときに状態を切り替えます-

if (count1 == 33'd1000000) begin
  LEDstatus <= !LEDstatus;
end
于 2012-08-10T11:25:02.307 に答える
-1

上記の優れた説明では不十分な場合は、完全なコードを含む完全な説明があります。

于 2014-02-04T19:05:48.237 に答える