【问题标题】:How do I cast to longint unsigned in systemverilog?如何在 systemverilog 中转换为 longint unsigned?
【发布时间】: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.

【问题讨论】:

    标签: system-verilog verilator


    【解决方案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 的演员表。
      猜你喜欢
      • 1970-01-01
      • 2022-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-11
      相关资源
      最近更新 更多