私はVerilogにはとても新しいので、私はそれをより良くするために書いているプロジェクトに立ち往生しています。私はボード上にボタンとLEDを持っていて、ボタンを押し上げてLEDの点滅を速くしたい。これは理論的にはうまくいくようですが、実際には動作させることができません。スイッチは、LEDのフラッシュを速くすることはありません、それはいくつかの奇妙なことをするようです。点滅するLED Verilog
私の現在のコードは、私がここで問題を引き起こさない場合でも、私が何をしているのかを教えてください。
`timescale 1ns/1ps
module LedFlash(CLK100MHZ, led0, sw0, btn0);
input CLK100MHZ;
output reg led0;
input sw0;
input btn0;
reg [25:0] clockTick = 0;
reg [1:0]currentlyLighting = 0;
reg [3:0] speedFactor = 0;
reg [1:0]oldButton = 0;
reg [1:0]buttonValue = 0;
always @(posedge CLK100MHZ)
begin
led0 <= 0;
buttonValue <= 0;
if(oldButton != btn0 && btn0 == 1)
buttonValue <= 1;
oldButton <= btn0;
if(clockTick == 0)
currentlyLighting <= !currentlyLighting;
if(currentlyLighting)
led0 <= 1;
if(buttonValue) begin
speedFactor <= speedFactor + 1;
end
clockTick <= clockTick + speedFactor;
end
endmodule
ここには、ボタンを数回押すだけのGIFがあります。スピードファクタが増加するのは、実際にボタンを押したときだけです。
私はより多くのプレスを提供するだろうが、それはただ明確に私が何か間違ったことをやって、そこからより多くの奇妙な取得します。 ボタンを最初に押した後、それは私が期待しているものから離れてしまいます。例えば
clockTick <= clockTick + 10;
と
clockTick <= clockTick + speedFactor;
:私はこの行を交換する場合、また**時にはそれは、オフになり、時には固体のまま、遅く、スピードアップ.....
それは私が期待するように速く点滅します。私はプローブが私に別のことを教えているようだが、ビットの追加に何か間違っていると思っている。
**
固定コード:
`timescale 1ns/1ps
module LedFlash(CLK100MHZ, led0, sw0, btn0);
input CLK100MHZ;
output reg led0;
input sw0;
input btn0;
reg [25:0] clockTick = 0;
reg currentlyLighting = 0;
reg [3:0] speedFactor = 0;
reg oldButton = 0;
reg buttonValue = 0;
always @(posedge CLK100MHZ)
begin
led0 <= 0;
buttonValue <= 0;
if(oldButton != btn0 && btn0 == 1)
buttonValue <= 1;
oldButton <= btn0;
currentlyLighting <= clockTick[25];
if(currentlyLighting && sw0)
led0 <= 1;
if(buttonValue) begin
speedFactor <= speedFactor + 1;
end
clockTick <= clockTick + speedFactor;
end
endmodule
有益な回答をいただきありがとうございます。私は午前中に試してみる必要があります。 –
私は[1:0]を置くために馬鹿だと思う。これらのようなものについては、cやverilogのような言語の接続をやめなければならない。 1つのアイテムを意味するcで実際にreg [1]を見ると、verilogの[h:l]表記は、慣れなければならないものです。 –
ちょうど確認され、それは素晴らしい動作しています。助けていただきありがとうございます。作業コードのOPの最下部が更新されました。 –