我是Verilog的初学者。我需要了解测试用例的逻辑,但是由于这些变量的逻辑,我遇到了困难。
这些'定义整数类型的F和G。我读到该参数是常量。
'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];
我知道它的类型是:[size] [radix] [value]表示二进制形式的1,然后向左移位,但是如何将其分配给array(将是100000000000000 14个零然后1)
我试图在某些IDE上在线运行,但遇到我放弃的错误。
答案 0 :(得分:0)
`define
与#define
中的c
相同。它定义了一个文本宏。 `G
和`F
实例化宏,并在解析之前在程序中被它们的上下文替换。
所以,就您而言
localparam pTotalBits=3*'G;
localparam pForcePktSize=(pMaxPacketsSize-'F);
将替换为
localparam pTotalBits=3*0;
localparam pForcePktSize=(pMaxPacketsSize-32);
替换是文本,并且宏的实例化刚刚被其定义替换。没有与宏定义关联的否类型。