Какие значения будут присвоены переменным. [Нужно понимать логику программы] - PullRequest
0 голосов
/ 13 октября 2018

Я новичок в Verilog. Мне нужно понять логику тестового примера, но я испытываю затруднения из-за логики этих переменных.

Они 'определяют F и G целочисленных типов. Iпрочитайте, что параметры являются константами.

    'define F 32
    'define G 0

    module M(...);

    parameter  pMaxPacketsSize =1024;
    localparam pTotalBits=3*'G;
    localparam pForcePktSize=(pMaxPacketsSize-'F);
    localparam pLastPacketSize =((pTotalBits-1)%(pForcePktSize))+1;
    localparam pNumTransactions=((pTotalBits-1)/(pForcePktSize))+1;
    localparam pPortSize=(pNumTransactions>1)?pMaxPacketsSize:((((pTotalBits-1)/32)+1)*32)+'F;

Поскольку G определено как 0, каково будет значение ForcePacketsize. Я предпринял попытку двоичного вычитания и достиг 128 (7 бит) [Это правильно?].[0-32]. Все эти операции должны выполняться в двоичной арифметике. Я хочу узнать значение этих параметров (pForcePktSize, pLastPacketSize, PNumTransactions).

Еще одно утверждение, которое я хочу понять, заключается в следующем:

wire[pPortSize-1:0]D;
wire[pNumTransactions-1:0] t;
assign t=1'b1<<D[14:0];

Я знаю, что он имеет тип: [размер] [основание] [значение] означает 1 в двоичном формате, затем сдвиг влево, но как это присваивается массиву (будет 100000000000000 14 нулей изатем 1)

Я пытался запустить онлайн на некоторых IDE, но получаю ошибку, от которой отказываюсь.

1 Ответ

0 голосов
/ 13 октября 2018

`define в verilog - это то же самое, что #define в c.Он определяет текстовый макрос.`G и `F создают экземпляры макросов и заменяются их контекстом в программе перед синтаксическим анализом.

Таким образом, в вашем случае

localparam pTotalBits=3*'G;
localparam pForcePktSize=(pMaxPacketsSize-'F);

будет заменено на

localparam pTotalBits=3*0;
localparam pForcePktSize=(pMaxPacketsSize-32);

Замена текстовая, а экземпляры макросов заменены их определениями.С определением макроса связан тип нет .

...