Результат моделирования ModelSim не соответствует логике моего кода мультиплексора - PullRequest
0 голосов
/ 01 июня 2019

Я написал некоторый verilog-код о мультиплексоре 7-в-1 с инструкциями «всегда» и «регистр», но когда я делал симуляцию в ModelSim, результат, кажется, не работает должным образом

Часть логики мультиплексора:

when SW[9:7] = 000, OUT = SW[0]

Противоречие:

In the simulation when SW[0] is changed to 1, the outcome stays at 0.
module SevenToOneMUX(SW, OUT);

    input [9:0] SW;
    output reg OUT;

    always@(SW[9:7])
    begin
        case (SW[9:7])
            3'b000: OUT = SW[0];
            3'b001: OUT = SW[1];
            3'b010: OUT = SW[2];
            3'b011: OUT = SW[3];
            3'b100: OUT = SW[4];
            3'b101: OUT = SW[5];
            3'b110: OUT = SW[6];
        endcase
    end

endmodule

1 Ответ

1 голос
/ 01 июня 2019

Проблема в том, что в список чувствительности вашего комбинационного блока добавлен только 3 старших бита SW.Это означает, что компилятор будет выполнять блок always@(SW[9:7]) только при изменении SW[9:7].

Если вы хотите, чтобы симулятор обновлял OUT при изменении любого из битов SW, измените вашу чувствительностьперечислим следующее:

always@(*)
begin
    /*...*/
end

Также стоит отметить, что always@(*), который был добавлен в Verilog-2001, обычно используется при создании синтезируемой комбинационной логики.В аппаратном обеспечении настоящая логика будет «чувствительной» к каждой правой переменной.Это означает: если какой-либо вход описываемой вами логики изменится, выход также изменится.

...