LED アレイ上でライト LED を「動かす」プログラムを Verilog で作成しようとしています。ライトはボタンで左に移動し、別のボタンで右に移動する必要があります。これは私のコードです:
module led_shift(UP, DOWN, RES, CLK, LED);
input UP, DOWN, RES, CLK;
output reg [7:0] LED;
reg [7:0] STATE;
always@(negedge DOWN or negedge UP or negedge RES)
begin
if(!RES)
begin
STATE <= 8'b00010000;
end
else
begin
STATE <= UP ? STATE>>1 : STATE<<1;
end
end
always @ (posedge CLK)
begin
LED <= STATE;
end
endmodule
問題はSTATE <= UP ? 状態>>1 : 状態<<1; およびエラーは次のとおりです。
エラー (10200): led_shift.v(34) での Verilog HDL 条件付きステートメント エラー: 条件内のオペランドを、always コンストラクトの外側のイベント コントロール内の対応するエッジと一致させることはできません
そのようなifを使用せずにコードを変更しようとしました:
always@(negedge DOWN or negedge UP or negedge RES)
begin
if(!RES)
STATE <= 8'b00010000;
else
begin
if(!DOWN)
STATE <= STATE<<1;
else
begin
if(!UP)
STATE <= STATE>>1;
else
STATE <= STATE;
end
end
end
コンパイルはできますが、動作しません。LED は左側にのみ「移動」し、他のボタンを押すとすべての LED がシャットダウンします。私のコードに問題があるのかもしれませんが、最初のコードがコンパイルされない理由がまったくわかりません。助けてくれてありがとう!
ハリム