system-verilog - 通过 TLM 端口将浮点数从 SystemVerilog 传输到 SystemC
问题描述
我在 C/C++ 中实现了一个特定的过滤器,“封装”在 SystemC 模块中。我想在基于 SystemVerilog 的实际验证环境 (VE) 中使用此过滤器。为了在过滤器之间传输数据,我想实现一个 TLM 连接。对于 TLM,有一种称为“通用有效载荷”的东西,基本上定义了可以通过 TLM 传输的内容,这是一个字节数组。
因此,我需要将 VE 中的数据样本从数据类型 real 转换为字节数组。我试图做的是创建一个联合类型,这样我就可以存储一个实值并读取一个字节数组。
typedef union packed {
real value;
byte unsigned array[8];
} real_u;
但是,我收到以下错误消息。
real value;
|
ncvlog: *E,SVBPSE (Initiator.sv,7|11): The data type of a packed struct/union member must be a SystemVerilog integral type.
byte unsigned array[8];
|
ncvlog: *E,SVBPSE (Initiator.sv,8|20): The data type of a packed struct/union member must be a SystemVerilog integral type.
我该如何解决这个问题?在 SV/C++ 中是否有其他方便的方法可以将浮点数转换为字节数组?
解决方案
packed
联合和结构可能只包含packed
成员。因此,在您的情况下,两者real
都已byte unsigned array[8]
解包。您可能可以使用unpacked
联合来执行此操作,但并非每个供应商都实施这些。
此外,标准中没有定义“真实”的字节大小,因此,您的联合很可能根本不起作用。但是,系统 verilog 提供了一组函数来将实数转换为特定大小的变量。在您的情况下,$realtobits
它返回 64 位,可能会起作用。
因此,我建议您在转换为位后传递实际值:
bit[63:0] realBits = $realtobits(value);
推荐阅读
- python - 如何在python中保存大量文件
- database - 是否有像 MongoDB Compass for Firebase Firestore 这样的客户端应用程序?
- html - 输入类型电子邮件允许一切
- artifactory - 从 Jfrog 工件中删除工件不会释放磁盘空间
- firebase - 在android studio中将firebase添加到flutter时出错:插件项目:firebase_core_web未找到。请更新 settings.gradle
- java - angularJS 模型上显示多条错误消息
- react-native - react-native-gesture-handler 在移动完成后不更新值
- sql - SQL Server:按条件计数
- python - 即使我确定它已安装,python 3 也无法识别我的库
- ruby-on-rails - 在 Controller 中删除服务器端 cookie 的问题