Что является аналогом целочисленного типа данных VHDL в systemVerilog? - PullRequest
0 голосов
/ 11 марта 2020

Я пытаюсь написать тестовый стенд systemVerilog для моих проектов VHDL. Проблема в типах данных. Например, в VHDL у меня есть:

punti_retta : out integer range 255 downto 0;
fdata_in    : in integer range 127 downto -128;

Для первого я попробовал "integer [7: 0] punti_retta" в systemVerilog testbench; однако инструмент проигнорировал определение диапазона, и в соответствии с формой сигнала это неверно.

Что и как я должен определить для этих сигналов в моем тестовом стенде systemVerilog? Есть какие-нибудь предложения?

Ответы [ 2 ]

0 голосов
/ 11 марта 2020

SystemVerilog не имеет концепции целочисленных диапазонов, только битовой ширины. Вы можете аппроксимировать диапазоны, используя $clog2().

bit [$clog2(255)-1:0] punti_retta;
bit signed [7:0] fdata_in;

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

Кстати, диапазон битов в integer [7:0] игнорируется или допускается ошибка из-за ошибки в первом симуляторе Verilog-XL. Первоначально тип integer был нестандартным и определялся ОС, в которой выполнялась симуляция. Они планировали использовать этот синтаксис для указания целочисленного размера, но так и не смогли его реализовать.

0 голосов
/ 11 марта 2020

Verilog не имеет целочисленного диапазона так же, как VHDL.

Вы можете сделать эквивалентный тип, если ваш целочисленный диапазон равен степени двух, как в вашем примере:

punti_retta : out integer range 255 downto 0;
fdata_in    : in integer range 127 downto -128;

Первым является целое число без знака из 8 битов, поэтому вы можете использовать logic [7:0] punti_regga;.
Вместо logic вы также можете использовать wire или reg

Второе целое число со знаком 8 битов, поэтому вы можете использовать logic signed [7:0] fdata_in;.

Но VHDL также позволяет вам использовать:

my_counter : integer range 0 to 395;

В Verilog нет точного эквивалента. Однако, когда эта переменная будет синтезирована, инструмент должен иметь достаточно битов, поэтому в аппаратном обеспечении вы получите 9-битный тип без знака. Таким образом, реальное оборудование может насчитывать более 395!

Эквивалент Verilog составляет logic [8:0] my_counter ;

...