首页 > 解决方案 > 什么值会被赋给变量。[需要理解程序逻辑]

问题描述

我是 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 然后左移,但是如何将其分配给数组(将是 100000000000000 14 个零,然后是 1)

我试图在一些 IDE 上在线运行,但得到了我放弃的错误。

标签: verilogsystem-verilog

解决方案


`define在 verilog 中与在中是一样#definec。它定义了一个文本宏。`G`F在解析之前实例化宏并在程序中被它们的上下文替换。

所以,在你的情况下

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

将被替换为

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

替换是文本的,宏的实例化刚刚被它们的定义替换。没有与宏定义关联的类型


推荐阅读