如何在 systemverilog 中转换为 longint unsigned?
Posted
技术标签:
【中文标题】如何在 systemverilog 中转换为 longint unsigned?【英文标题】:How do I cast to longint unsigned in systemverilog? 【发布时间】:2020-02-28 18:02:27 【问题描述】:我想将逻辑打包数组转换为 systemverilog 中的longint unsigned
,然后我可以使用 DPI-C 将其导出为 C++ unsigned long。我使用的模拟器是 Verilator。检查下面的示例。
logic[31:0] v1;
logic[63:0] v2;
int a = signed'(v1); //cast to signed int
int b = int'(v1); //cast to signed int
int unsigned c = unsigned'(v1); //cast to unsigned int
longint d = longint'(v2); //cast to signed long
//longint unsigned e = longint unsigned'(v2); //This doesn't work. I need to cast to unsigned long.
【问题讨论】:
【参考方案1】:您需要使用typedef
创建一个没有空格的 SystemVerilog 类型。这是一个例子:
// ..
typedef longint unsigned uint64_t;
uint64_t e = uint64_t'(v2);
【讨论】:
【参考方案2】:除非需要符号扩展,否则不需要任何类型的演员表。 4-state 和 2-state 类型之间已经存在隐式转换。
你可以写:
longint d = v2;
【讨论】:
我不会在 4-state 和 2-state 类型之间进行转换。 @Topa,logic
是一种四态类型。 int/longint
是两种状态类型。你可以写longint d = v2;
我知道,但我的问题不是关于在 2 状态和 4 状态数据类型之间进行转换。我的问题是关于一般的选角。
好的,但我想告诉你你首先遇到的问题(演员只允许一个名字,需要一个typedef
),因为你没有需要 DPI 的演员表。以上是关于如何在 systemverilog 中转换为 longint unsigned?的主要内容,如果未能解决你的问题,请参考以下文章
SystemVerilog:如何创建一个简单接口数组的接口?