verilog - 什么值会被赋给变量。[需要理解程序逻辑]
问题描述
我是 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 上在线运行,但得到了我放弃的错误。
解决方案
`define
在 verilog 中与在中是一样#define
的c
。它定义了一个文本宏。`G
并`F
在解析之前实例化宏并在程序中被它们的上下文替换。
所以,在你的情况下
localparam pTotalBits=3*'G;
localparam pForcePktSize=(pMaxPacketsSize-'F);
将被替换为
localparam pTotalBits=3*0;
localparam pForcePktSize=(pMaxPacketsSize-32);
替换是文本的,宏的实例化刚刚被它们的定义替换。没有与宏定义关联的类型。
推荐阅读
- sas - 如何根据 SAS 中的值创建新列
- python - 我正在使用遗传算法来解决迷宫,但它似乎不起作用,并且想知道是否有人可以指出我所做的错误(python)
- rust - 为什么 Rust 要求“一个值一旦固定,就必须永远固定”?
- python - Python - 如何在类中执行元组解包
- javascript - 如何在整个 ngbpopover 上停止传播?
- css - 缩放 SVG 剪切蒙版而不缩放被剪切的元素
- reactjs - React Typescript - 变量空检查被忽略并发送错误
- c# - 关于扩展方法的快速动力学问题
- php - 无法检索数组第一个元素的值
- azure - 数组内的 Arm 模板副本