Verilog: Как расширить двоичный код в регистре?

Какой формат кода для расширения двоичного файла в регистре с помощью знака и нуля?

i.e.

reg[0:0] a;        //a is 1-bit.
reg[31:0] b, c;    //b and c are 32-bits.
//some code...

Расширьте знак a на 32 бита, добавьте его к b и поместите результат в c.

Расширить a нулем до 32-бит, добавить его к b и поместить результат в c.


person NoName    schedule 26.06.2017    source источник
comment
reg[0:0] a; = ›reg a; это один бит.   -  person Alexis    schedule 30.06.2017


Ответы (2)


Вот способ системного verilog:

logic signed a;
logic [31:0] b, c;
...

b = a;

в приведенном выше примере b станет значением a с расширенным знаком.

person Serge    schedule 27.06.2017
comment
Как бы вы, используя этот метод, обнуляли? Делкаринг logic unsigned a; и logic unsigned [31:0] b, c;? - person NoName; 27.06.2017
comment
signed переменные будут расширены знаком. все остальные будут продлены нулем. Обратите внимание, что signed переменные изменят результат реляционных операций, поскольку при сравнении будет учитываться учетная запись входа. Также знаковая переменная использует верхний бит для обозначения знака. - person Serge; 27.06.2017

Есть много способов расширения с помощью знака, я буду использовать метод, требующий наименьшего количества кода. Мы будем использовать операции Verilog репликация и конкатенация.

Формат репликации: {numberOfTimesToRepeat{value}}

i.e. {20{a[0]}}

Повторяет 0-й бит в a регистре 20 раз.

Формат конкатенации: {value1, value2}

i.e. {a, b}

Объединяет двоичные файлы в регистр a и регистр b.

Чтобы подписать-продлить:

{{31{a[0]}}, a}

Реплицирует 0-й бит в a регистре 31 раз и объединяет его перед двоичным кодом регистра a.

В нулевое расширение:

{{31 {zero}}, a} // ноль - это 1-битный регистр, содержащий нулевой бит.

Реплицирует нулевое значение 31 раз и объединяет его перед двоичным кодом регистра a.

person NoName    schedule 26.06.2017
comment
Чтобы подписать однобитовое значение, вам не нужна конкатенация. {32{a}} хватит. - person ScottJ; 16.02.2020
comment
Для нулевого расширения вам не нужна репликация или какой-либо регистр с именем ноль. {31'b0, a} хватит. - person ScottJ; 16.02.2020