2013-08-20 3 views
2

Когда размер числа является переменным и поэтому должен быть установлен параметром, как я могу установить максимальное число? В дальнейшем результат должен быть «FFFF», но симулятор возвращает только «F». Может ли кто-нибудь исправить эту проблему?Как установить полную переменную константу?

`define SIZE 10 
module tb1; 
    reg [15:0] a; 

    initial begin 
     a = `SIZE'hF; 
     $display("a=%h",a); 
    end 
endmodule 
+3

Чтобы получить 'FFFF', вам необходимо установить' определить размер 16'. – toolic

ответ

7

Вы можете использовать оператор репликации для построения битовых векторов.

{а {Ь}} формирует вектор с через копий вектора б.

В вашем случае это будет:

a = {`SIZE{1'b1}}; 
+0

Используя репликацию, параметр SIZE должен быть установлен в 16. Возможно, это опечатка в его коде. {10 {1'b1}} приводит только к 03FF. Получите максимальное количество 'a', либо для изменения' SIZE' до 16, либо для использования нестандартного однобитового значения. – jclin

+0

Спасибо за ответ. Ответ очень помогает. Я обнаружил, что в некоторых случаях a = ~ 0 также работает, хотя кажется глупостью. – gnoejh

5

`SIZE'hF, то SIZE часть только означает, что он является н-разрядность единственное число. В вашем случае 10'hF означает, что это 10-разрядное число 0xF, поэтому оно правильно в вашей симуляции.

Если вы используете SystemVerilog, вы можете просто использовать a = '1; и он установит все биты в 1.

Вот что говорит SystemVerilog LRM,

несортированное одноразрядное значение может быть задано , предшествуя однобитовому значению с апострофом ('), но без базового спецификатора. Все биты нестандартного значения должны быть установлены на значение указанного бита. В самоопределяемом контексте нестандартное однобитовое значение должно иметь ширину 1 бит, а значение должно рассматриваться как беззнаковое.

Смежные вопросы