1

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 がシャットダウンします。私のコードに問題があるのか​​もしれませんが、最初のコードがコンパイルされない理由がまったくわかりません。助けてくれてありがとう!

ハリム

4

1 に答える 1