Интерпретация оператора конкатенации с компаратором - PullRequest
0 голосов
/ 12 февраля 2019

Наш профессор дал нам этот скелет для описания случая, и до сих пор никто не может понять, что он делает.

always@(*)
    begin
        case(state)
            3'b000:{nout, nstate} = (in)?(in=1):(in=0)
       endcase
    end

Подробнее:

Это реализуется какdebouncer кнопки.

nout - это выход следующего состояния: один бит

nstate - это следующее состояние: 3 бита

in также имеют ширину 1 бит

Насколько я понимаю, оператор конкатенации добавит nout к nstate, что приведет к 4 битам.(то есть: если nout равно 1, а nstate равно 010, эта часть выражения будет выдавать 1010)

С другой стороны назначения равенства у нас есть простой компаратор, который при дальнейшей проверке не выглядитсделать что-нибудь ...

Это в основном говорит:

if(in == 1) {
    in = 1;
} else {
    in = 0;
}

С этим пониманием мы назначаем один бит для nout и nstate?

Это понимание не 'не имеет никакого смысла для меня.Я сравнил свои заметки с двумя другими одноклассниками, которые написали ту же самую вещь, поэтому я думаю, что либо мы не понимаем код, либо есть ошибка.

Дальнейшее понимание: при дальнейших исследованиях яЯ обнаружил, что диаграмма состояний появляется в нескольких местах, и я уверен, что это обычная машина Мура.

Moore FSM

Moore FSM (2)

1 Ответ

0 голосов
/ 12 февраля 2019

Я надеюсь, что вы неправильно вырезали и вставляли эти выражения.

3'b000:{nout, nstate} = (in)?(in=1):(in=0); 

Вышеприведенное утверждение является полным беспорядком.Скорее всего, он потерпит крахЭто может быть хорошо синтаксически, но не имеет смысла логически и делает такой код нечитаемым и не поддерживаемым.Он должен выглядеть следующим образом:

3'b000:{nout, nstate} = (in)?(1'b1):(1'b0); 

Левая конкатат представляет сигнал с младшим 3 битом, связанным с nstate, и старшими n битами с nout.Тернарный оператор с правой стороны создает либо один бит «1», либо 1 бит «0» (фактически id делает то же самое с исходным выражением, потому что «in» имеет ширину 1 бит. Verilog расширит rhs на один бит до размераlhs и добавить пропущенные '0. В результате nout будет 0, а nstate будет 3'b000 или 3'b001, в зависимости от значения in.

...