在SystemC model和RTL进行co-sim的时候,model中经常需要用到SystemC的sc_bv 类型数据与System Verilog代码进行交互。

sc_bv 是 bit vector的简称,在namespace sc_dt (data types)中定义。

sc_bv继承于sc_bv_base,sc_bv_base继承于sc_proxy<sc_bv_base>。sc_bv是一个模板类,定义时需要传入一个int参数,表示位宽。

对sc_bv类型赋值,可以使用bool / int / long / unsigned int/ …. char* / sc_logic 。

基类sc_proxy提供了to_string 和to_uint64 / to_int … 等函数。使用<< 打印

访问或改写sc_bv 类型中的某1个bit,可以使用 operator[] 下标;访问或改写某几个bit,可以使用 operator(int high, int low) 或range(int high, int low)。这两个重载函数和range也是在基类sc_proxy中定义。

需要注意,如果使用字符串给sc_bv 类型赋值,需要加 进制标记;且如果 赋值的数据bit 位数 小于 类型的bit数,需要在数据前加0前缀。

sc_uint 继承于sc_uint_base,功能跟sc_bv 类似,赋值方法一样,访问或改写其中1bit或某几个bit的方法也一样。将下面的代码中sc_bv直接改为sc_uint,最终的打印结果同sc_bv.

// execute:
//     g++ -g -Wall -lsystemc -m64 -pthread main.cpp
//         -L/$(your systemc path)/lib-linux64
//         -I/$(your systemc path)/include  -I/$(your systemc
//         path)/src/tlm_utils -o sim#include "tlm"
#include <systemc>using namespace std;int sc_main(int argc, char **argv) {sc_dt::sc_bv<30> m_data;sc_dt::sc_bv<30> m_data_1 (0x456);m_data = "0x0a123"; // here should add 0x for hexadecimal; if not 30bit data, must add 0 before the datastd::cout << "m_data (0x0a123): " << std::hex << m_data.to_uint64()<< std::endl;m_data = "0xa123"; // here del 0 before a123, can find the print is 0x3fffa123std::cout << "m_data (0xa123): " << std::hex << m_data.to_uint64()<< std::endl;std::cout << "m_data_1: " << std::hex << m_data_1.to_uint64() << std::endl;std::cout << "m_data[1]: " << m_data[1]<< std::endl; // call sc_bitref<X> operator [] ( int i )std::cout << "m_data_1(6,1): " << std::hex << m_data_1(6, 1)<< std::endl; // call sc_subref<X> operator () ( int hi, int lo )std::cout << "m_data_1.range(6,1): " << std::hex << m_data_1.range(6, 1) << std::endl;// change sc_bv bit valuem_data[1] = 0;std::cout << "m_data[1]: " << m_data[1] << std::endl;m_data_1(6, 1) = 0x03b; std::cout << "m_data_1(6,1) changed : " << std::hex << m_data_1(6, 1) << std::endl;std::cout << "m_data_1 changed : " << std::hex << m_data_1.to_uint64() << std::endl;m_data_1.range(6, 1) = 0x023;std::cout << "m_data_1(6,1) changed : " << std::hex << m_data_1(6, 1) << std::endl;std::cout << "m_data_1 changed : " << std::hex << m_data_1.to_uint64() << std::endl;  sc_core::sc_start();return 0;
}

Print结果如下

m_data (0x0a123): a123
m_data (0xa123): 3fffa123
m_data_1: 456
m_data[1]: 1
m_data_1(6,1): 2b
m_data_1.range(6,1): 2b
m_data[1]: 0
m_data_1(6,1) changed : 3b
m_data_1 changed : 476
m_data_1(6,1) changed : 23
m_data_1 changed : 446

C++ 函数调用运算符 () 重载,可参考  C++ 函数调用运算符 () 重载 | 菜鸟教程

SystemC: sc_bv and sc_uint相关推荐

  1. 预备打工人之SystemC学习(三) 基本语法

    预备打工人之SystemC学习 例子 SystemC头文件 模块 模块的构造和析构函数 构造函数 析构函数 模块的内部函数 端口和信号 端口和信号的定义 端口 端口的使用 延时 多驱动处理器 Syst ...

  2. SystemC自带example的pkt_switch研习

    pkt_switch,此示例演示了4x4多播螺旋数据包交换机(分组交换,具体关于网络术语可以自行学习吧,这里只是学习SystemC的记录,日后若在架构演进自理的所谓异构融合前章 1进过程中涉及到NOC ...

  3. 记一次关于mock Systemc.currentTimeMillis的实践

    因为在写单测过程中,发现@PrepareForTest和JaCoCo会有冲突,所以想要将JaCoCo修改为offline模式,但是这样一来,就需要对utils等模块全部重新写单测. 从单测的角度来说各 ...

  4. SystemC在Ubuntu16.04上安装测试

    使用SystemC进行硬件仿真 环境 linux-x86-64 bash g++ 下载解压SystemC SystemC下载地址 解压下载的包 tar zxvf systemc-2.3.3.tar.g ...

  5. 全数字实时仿真平台SkyEye与SystemC集成进行时序仿真

    SkyEye与SystemC集成进行时序仿真 仿真过程是正确实现设计的关键环节,用来验证设计者的设计思想是否正确,及在设计实现过程中各种分布参数引入后,其设计的功能是否依然正确无误.时序仿真使用布局布 ...

  6. SystemC 代码添加和测试方法

    1.启动流程 在 code/utils/ 下添加 new_systemc 相关代码,启动流程如下: 2.调用关系 3.地址映射 假设有两个 systemc 设备:device1 和 device2,d ...

  7. linux+systemc+编译,[转载]linux下systemC的安装编译仿真

    一.systemc的安装 花了将近一天的时间终于成功安装systemC,下面记录下整个过程. (1)在www.systemc.org网站下载systemc-2.2.0.tgz. (2)将其copy到l ...

  8. (1)FPGA面试技能提升篇(SystemC)

    1.1 FPGA面试技能提升篇1(SystemC) 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试技能提升篇1(SystemC): 5)结束语. 1.1.2 ...

  9. SystemC自带example的pipe研习

    https://blog.csdn.net/chenleiyfk/article/details/116995520?spm=1001.2014.3001.5501 这是自己之前自理的一个架构方面的认 ...

最新文章

  1. 上周那个 iPad还没送出去呢!
  2. 使用Eclipse与Pydev开发Python
  3. 1095 Cars on Campus (30 分)【难 / 模拟 未完成】
  4. MySQL高级 - 常用工具 - mysqladmin
  5. springboot配置mybatis
  6. 将EntityManager.refresh添加到所有Spring数据存储库
  7. AnyTrans使用教程:将照片从 Mac 传输到 iPhone 的方法
  8. Spring boot yml文件的书写格式
  9. 【嵌入式】NBIoT(BC26)低功耗模式与控制
  10. FlashFXP 4.2.4 破解版
  11. java 打印 日历 详细 注解_Java实现按年月打印日历功能【基于Calendar】
  12. 自己组装电脑需要买哪些配件
  13. Tetris(俄罗斯方块)
  14. 盘点最近 火火火火 的 GitHub 项目
  15. Linux系统的注销与关闭
  16. 怎么用黑白打印机打印清晰可读的PPT文档
  17. ROS集成开发环境 --- RoboWare(安装及学习笔记)
  18. 高项-信息系统项目管理师-重要考点
  19. MySQL学习(四)——MySQL的登录
  20. Java程序员必看的20本书,从入门到精通!收藏

热门文章

  1. DSFD-Dual Shot Face Detector人脸检测模型原理代码超全面解剖
  2. iOS开发——开发者官网注册新设备
  3. matlab实现中值滤波程序,中值滤波流程(matlab平滑滤波和中值滤波程序)
  4. 不完全双列杂交种遗传力的计算方法
  5. 闲鱼基于Dart生态的FaaS前端一体化建设
  6. java旋转数组查找某一个值_旋转数组中查找某个元素
  7. VS2012 Cocos2D-X 环境搭建
  8. spacedesk使用,让你体验分屏的快乐
  9. 腾云忆想技术干货| 基于TSF的API对外管理实践
  10. 用freetype开源字体库,实现在图片上字体大小