SystemC入门完整编写示例:全加器测试平台
导读: 本文将完整演示基于systemC编写一个全加器的测试平台。具体内容包括:激励平台,监控平台,待测单元的编写,波形文件读取。
1,main函数模块
搭建一个测试平台主要由:Driver, Monitor, DUT(design under test)几个模块,以及一个main文件来启动和连接它们。
如下main函数,
1)首先声明了全加器需要的5个输入输出信号sc_signal <bool> t_a, t_b, t_cin, t_sum, t_cout。
这些信号是把Driver, Monitor, full_adder几个模块连起来的重要接口,比如driver把数据不断的传给t_a, t_b, t_cin,然后full_adder对这3个信号敏感,产生结果信号传给t_sum, t_cout,而monitor对所有的5个信号都敏感,不断监控它们的变化情况;
2)创建了full_adder,monitor, driver的3个实例,并把它们各自需要的信号接口传给自己的实例。等于把信号接口都连接起来了。
3)创建了波形记录文件的实例。在这里定义波形文件里会保存的信号名字。
4)设定仿真时间,开启仿真。
主函数main文件full_adder_main.cpp如下:
#include "full_adder_driver.h"
#include "full_adder_monitor.h"
#include "full_adder2.h"int sc_main(int argc, char* argv[])
{sc_signal <bool> t_a, t_b, t_cin, t_sum, t_cout;full_adder2 f1("FullAdderWithHalfAdder");f1(t_a, t_b, t_cin, t_sum, t_cout);driver d1("GenerateWaveforms");d1(t_a, t_b, t_cin);monitor mo1("MonitorWaveforms");mo1(t_a, t_b, t_cin, t_sum, t_cout);if(!mo1.outfile){cerr << "ERROR: Unable to open output file," << "full_adder.out!\n";return(-2);}sc_trace_file *tf = sc_create_vcd_trace_file("full_adder");sc_trace(tf, t_a, "A");sc_trace(tf, t_b, "B");sc_trace(tf, t_cin, "CarryIn");sc_trace(tf, t_sum, "Sum");sc_trace(tf, t_cout, "CarryOut");sc_start(100, SC_NS);sc_close_vcd_trace_file(tf);return 0;}
2,DUT函数模块
全加器的设计模块文件full_adder2.h如下:
#include "systemc.h"SC_MODULE(full_adder2){sc_in<bool> a, b, carry_in;sc_out<bool> sum, carry_out;void full_addr_prc();SC_CTOR(full_adder2){SC_METHOD(full_addr_prc);sensitive <<a <<b <<carry_in;}};void full_adder2::full_addr_prc()
{sum = a^b^carry_in;carry_out = a & carry_in | b & carry_in | a &b;}
3,Driver函数模块
激励模块文件full_adder_driver.h如下:
#include <iostream>
#include <fstream>
#include "systemc.h"SC_MODULE(driver){sc_out <bool> d_a, d_b, d_cin;ifstream infile;void driver_prc();SC_CTOR(driver){SC_THREAD(driver_prc);infile.open("../data/full_adder_driver_data.in"); //the data path is right when you are running exec program in 'build' folder.if(!infile){cerr << "in driver, Error: Unable to open vector file, full_adder_driver_data.in! \n";sc_stop();}}~driver(){infile.close();}};void driver::driver_prc(){bool t_a, t_b, t_cin;while(infile >> t_a >> t_b >> t_cin){d_a.write(t_a);d_b.write(t_b);d_cin.write(t_cin);wait(5, SC_NS);}}
激励数据文件full_adder_driver_data.in
1 1 0
1 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
1 1 0
1 0 1
1 0 0
0 1 1
0 1 0
0 0 1
0 0 0
4,Monitor函数模块
监测模块文件full_adder_monitor.h如下:
#include <iostream>
#include <fstream>
#include "systemc.h"SC_MODULE(monitor){sc_in<bool> m_a, m_b, m_cin, m_sum, m_cout;ofstream outfile;void monitor_prc();SC_CTOR(monitor){SC_METHOD(monitor_prc);sensitive << m_a << m_b << m_cin << m_sum << m_cout;outfile.open("full_adder.out"); //the out file can be find in your exec program folder path.}~monitor(){outfile.close();}};void monitor::monitor_prc()
{outfile << "At time: " << sc_time_stamp() <<"::";outfile <<"(a, b, carry_in): ";outfile << m_a << m_b << m_cin;outfile << " (sum, carry_out): " << m_sum << m_cout << "\n";}
5,测试程序执行演示
1,需要你自己提前配置好SystemC的相关库。
2,将上面4个文件写好,并编译通过,生成一个可执行文件。
3,执行文件,生成full_adder.vcd和输出full_adder.out文件


注意点:
1, 在driver模块中,SC_THREAD(driver_prc)这里要用SC_THREAD,而不能用SC_METHOD,因为里面有while语句,需要程序能够挂起,如果用SC_METHOD则monitor只能执行一次。
2,如果激励数据从文件中读取,需要注意文件路径是否正确。比如main函数里定义了full_adder.out是在执行程序的路径,在driver文件里定义了激励输入文件的路径("../data/full_adder_driver_data.in"),需要确认自己的路径是否正确。
6,仿真波形记录文件读取
可以通过安装gtkwave来查看生成的波形文件,如下是linux下安装和打开波形文件:
sudo apt-get install gtkwavegtkwave full_adder.vcd

相关文章:
SystemC入门完整编写示例:全加器测试平台
导读: 本文将完整演示基于systemC编写一个全加器的测试平台。具体内容包括:激励平台,监控平台,待测单元的编写,波形文件读取。 1,main函数模块 搭建一个测试平台主要由:Driver, Monitor, DUT(design under …...
动手学深度学习:2.线性回归pytorch实现
动手学深度学习:2.线性回归pytorch实现 1.手动构造数据集2.小批量读取数据集3.定义模型和损失函数4.初始化模型参数5.小批量随机梯度下降优化算法6.训练完整代码Q&A 1.手动构造数据集 import torch from torch.utils import data from d2l import torch as d2l…...
重要的linux指令
系统管理命令 切换用户 su 用户名管理员身份运行 sudo 命令实时显示进程信息(linux下任务管理器) top查看进程信息(ps) ps -efps -ef | grep 进程名 ps -aux | grep 进程名参数说明e 显示所有进程f 全格式a 显示所有程序u 以用户为主的格式来显示程序状况x 显示无控制终端…...
delphi7安装并使用皮肤控件
1、下载控件 我已经上传到云盘,存储位置 2、下载后并解压。 3、打开dephi7,File-Open,打开路径D:\LC\Desktop\vclskin2_XiaZaiBa\d7, 然后将 D:\LC\Desktop\vclskin2_XiaZaiBa\d7文件夹中所有后缀.dcu的文件复制粘贴到delphi安装路…...
安徽省黄山景区免9天门票为哪般?
今日浑浑噩噩地睡了大半天,强撑起身子写网文......可是,题材不好选,本“人民体验官”只得推广人民日报官方微博文化产品《这两个月“黄山每周三免门票”》。 图:来源“人民体验官”推广平台 因年事渐高,又有未愈的呼吸…...
MFC 窗体插入图片
1.制作BMP图像1.bmp 放到res文件夹下,资源视图界面导入res文件夹下的1.bmp 2.添加控件 控件类型修改为Bitmap 图像,选择IDB_BITMAP1 3.效果...
关于中间件技术
中间件是一种独立的系统软件或服务程序,可以帮助分布式应用软件在不同的技术之间共享资源。中间件可以: 1、负责客户机与服务器之间的连接和通信,以及客户机与应用层之间的高效率通信机制。 2、提供应用的负载均衡和高可用性、安全机制与管…...
机器学习中的嵌入:释放表征的威力
简介 机器学习通过使计算机能够从数据学习和做出预测来彻底改变了人工智能领域。机器学习的一个关键方面是数据的表示,因为表示形式的选择极大地影响了算法的性能和有效性。嵌入已成为机器学习中的一种强大技术,提供了一种捕获和编码数据点之间复杂关系的…...
【Midjourney入门教程3】写好prompt常用的参数
文章目录 1、图片描述词(图片链接)文字描述词后缀参数2、权重划分3、后缀参数版本选择:--v版本风格:--style长宽比:--ar多样性: --c二次元化:--niji排除内容:--no--stylize--seed--tile、--q 4、…...
01-单节点部署clickhouse及简单使用
1、下载rpm安装包: 官网:https://packages.clickhouse.com/rpm/stable/ clickhouse19.4版本之后只需下载3个rpm安装包,上传到节点目录即可 2、rpm包安装: 安装顺序为conmon->server->client 执行 rpm -ivh ./clickhouse-…...
项目实战:展示第一页数据
1、在FruitDao接口中添加查询第一页数据和查询总记录条数 package com.csdn.fruit.dao; import com.csdn.fruit.pojo.Fruit; import java.util.List; //dao :Data Access Object 数据访问对象 //接口设计 public interface FruitDao {void addFruit(Fruit fruit);vo…...
c#中使用METest单元测试
METest是一个用于测试C#代码的单元测试框架。单元测试是一种软件测试方法,用于验证代码的各个单元(函数、方法、类等)是否按照预期工作。METest提供了一种简单而强大的方式来编写和运行单元测试。 TestMethod:这是一个特性&#…...
七月论文审稿GPT第二版:从Meta Nougat、GPT4审稿到Mistral、LLaMA LongLora
前言 如此前这篇文章《学术论文GPT的源码解读与微调:从chatpaper、gpt_academic到七月论文审稿GPT》中的第三部分所述,对于论文的摘要/总结、对话、翻译、语法检查而言,市面上的学术论文GPT的效果虽暂未有多好,可至少还过得去&am…...
社群团购对接合作,你有研究过社群团购平台的选品吗?
社群团购对接合作,你有研究过社群团购平台的选品吗? 社群团购选品是非常重要的一项工作,一个好的社群团购平台选品逻辑包含了:用户定位,时节性,产品性价比,售后率。用户定位在选品过程中非常重要…...
VSCode 如何设置背景图片
VSCode 设置背景图片 1.打开应用商店,搜索 background ,选择第一个,点击安装。 2. 安装完成后点击设置,点击扩展设置。 3.点击在 settings.json 中编辑。 4.将原代码注释后,加入以下代码。 // { // "workben…...
【数据结构】单向链表的增删查改以及指定pos位置的插入删除
目录 单向链表的概念及结构 尾插 头插 尾删 编辑 头删 查找 在pos位置前插 在pos位置后插 删除pos位置 删除pos的后一个位置 总结 代码 单向链表的概念及结构 概念:链表是一种 物理存储结构上非连续 、非顺序的存储结构,数据元素的 逻辑顺序 是…...
PageRank算法c++实现
首先用邻接矩阵A表示从页面j到页面i的概率,然后根据公式生成转移概率矩阵 M(1-d)*Qd*A 常量矩阵Q(qi,j),qi,j1/n 给定点击概率d,等级值初始向量R0,迭代终止条件e; 计算Ri1M*R…...
超低价:阿里云双11服务器优惠价格表_87元一年起
2023阿里云双十一优惠活动已经开启了,轻量2核2G服务器3M带宽优惠价87元一年、2核4G4M带宽优惠价165元一年,云服务器ECS经济型e实例2核2G3M固定带宽优惠价格99元一年,还有2核4G、2核8G、4核8G、4核16G、8核32G等配置报价,云服务器e…...
docker的安装Centos8
在CentOS 7中,可以使用yum安装Docker。Docker官方提供了一个yum源,可以用于安装Docker。以下是安装Docker的步骤: 卸载旧版本的Docker(如果有) 如果你之前安装过Docker,需要先卸载旧版本的Docker。执行以…...
Android.mk文件制定了链接库,但是出现ld Error
问题描述 Android.mk文件中,指定了库: LOCAL_LDLIBS : -lmylib LOCAL_LDFLAGS -L$(MYLIB_DIR)/lib出现ld: error: undefined symbol: my_function,于是查看so里面是否有my_function函数: nm -D libmylib.so | grep my_functio…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
MySQL 主从同步异常处理
阅读原文:https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主,遇到的这个错误: Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一,通常表示ÿ…...
uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)
UniApp 集成腾讯云 IM 富媒体消息全攻略(地理位置/文件) 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型,核心实现方式: 标准消息类型:直接使用 SDK 内置类型(文件、图片等)自…...
水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关
在水泥厂的生产流程中,工业自动化网关起着至关重要的作用,尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关,为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多,其中不少设备采用Devicenet协议。Devicen…...
