2014-11-25 6 views
0

Скажем, у меня 8-разрядный выходной регистр, называемый «myReg», и 8-битный вход, называемый «checkReg». Могу ли я проверить и присвоить их значения в case-заявлении с использованием шестнадцатеричных значений?Показатели дела в Verilog?

Например (предположим, что код в блоке всегда)

case (checkReg) 
    2'hA0:myReg <= 2'h10; 
    2'hB0:myReg <= 2'hC0; 
    //Other cases 
endcase 

Я хочу выше кусок кода, чтобы сделать следующее: Если checkReg = 10100000, установите myReg на 00010000. Если checkReg = 10110000, set myReg to 11000000.

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

Спасибо.

+0

Все данные двоичные. Он хранится на компьютере, который способен работать только в двоичном формате. Шестигранные, десятичные, восьмеричные, даже подписанные десятичные знаки - это просто способы просмотра двоичных данных. Фиксированная точка и плавающая точка - это интерпретации двоичных данных. '4'h5' -' 4'b0101'. – Morgan

ответ

2

Для прямого преобразования базы (bin, oct, hex, dec) вам не нужно делать какие-либо специальные преобразования в verilog. Такие вещи, как преобразование BCD, требуют дополнительных шагов.

Число перед одной кавычкой - это размер бита, а не цифра. 2'hA0 должен быть 8'hA0, иначе верхние значения бит будут замаскированы.

reg [7:0] myReg; 
always @* begin 
    case (checkReg) 
    8'hA0:myReg <= 8'h10; 
    8'hB0:myReg <= 8'hC0; 
    //Other cases 
    endcase 
end