Verilog случай игнорирования условного - PullRequest
0 голосов
/ 20 ноября 2018

РЕДАКТИРОВАТЬ: мне показалось, что оригинальная программа работала, всегда добавляя else после оператора if, а не ставя, например, «Y = Y».Так что в этом случае вместо этого будет B: Y = B.

Я не уверен, почему сейчас это работает, похоже, что-то, что у меня нет правильного опыта, чтобы понять.

Я пытаюсь эмулировать конечный автомат в verilog, но у меня возникают проблемы с пониманием конкретной проблемы.Оригинальный код был намного больше, но я сократил его до того, что производит эффект, который я не могу объяснить.(Не фактическая реализация, просто пример, показывающий мою проблему)

У меня есть 'Y', в котором хранится "состояние", в котором он находится, и оно будет меняться в зависимости от его состояния и условий.Моя проблема в том, что строка для случая A :, игнорирует условное выражение и делает Y = B, даже если enter всегда низок.У меня есть вывод 'ts', находится ли он на самом деле в состоянии B.

Если я заменю 'enter == 1' на '0 == 1', я получаю тот же вывод.

module ComboCheckF(Clock,enter,ts); 

    input Clock, enter;
    output ts;
    reg[3:0] Y;
    parameter A = 4'b0000, B = 4'b0001;

    initial Y = A;

    always @(enter,Y)
    begin
        case(Y)
            A: if (enter == 1) Y = B;
                else Y = Y;
            B: Y = Y;
            default: Y = 4'bxxxx;
        endcase 
    end


    assign ts=(Y==B);


endmodule 

и вывод (может игнорировать часы, был остаток)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...