SystemC入门之测试平台编写完整示例:带同步输出的多路选择器

news2024/10/7 13:14:04

内容:SystemC入门书中的简单测试平台编写示例。

模块文件编写

带锁存输出的4选1多路器模型。输出在信号clock的正跳变沿时刻被锁存。

sync_mux41.h文件

#include <systemc.h>

SC_MODULE(sync_mux41)
{
    sc_in<bool> clock, reset;
    sc_in<sc_uint<2>> sel;
    sc_in<sc_uint<4>> inp;
    sc_out<bool> out;

    void prc_sync_mux41();

    SC_CTOR(sync_mux41)
    {
        SC_METHOD(prc_sync_mux41);
        sensitive << clock.pos();
        sensitive << reset.neg();
    }

};

void sync_mux41::prc_sync_mux41()
{
    sc_uint<4> temp_inp;

    temp_inp =inp.read();

    if(reset ==0)
    {
        out =0;
    }
    else
    {
        if(sel.read()==0) 
        {
            out = temp_inp[0];
        }
        else if(sel.read()==1) 
        {
            out = temp_inp[1];
        }
        else if(sel.read()==2) 
        {
            out = temp_inp[2];
        }
        else 
        {
            out = temp_inp[3];
        }
        
    }

}

测试平台搭建

driver生成所有的可能的输入模式,每隔3ns向多路器施加其中一组输入模式。

sync_mux41_driver.h文件

#include <systemc.h>

SC_MODULE(driver)
{
    sc_out<bool> d_reset;
    sc_out<sc_uint<2> > d_sel;
    sc_out<sc_uint<4> > d_inp;

    void prc_driver();

    SC_CTOR(driver)
    {
        SC_THREAD(prc_driver);
    }
};

void driver::prc_driver()
{
    d_reset =0;
    wait(7, SC_NS);
    d_reset =1;

    for(int i=0; i<=15; i++)
    {
        d_inp =i;
        for(int j=0; j<=3; j++)
        {
            d_sel = j;
            wait(3, SC_NS);
        }
    }
}

只要多路器输入和输出端口的值发生任何改变,模块monitor将打印出所有输入端口和输出端口的值。

sync_mux41_monitor.h文件

#include <systemc.h>

SC_MODULE(monitor)
{
    sc_in<bool> m_clock, m_reset;
    sc_in<sc_uint <2> > m_sel;
    sc_in<sc_uint <4> > m_inp;
    sc_in<bool> m_out;

    void prc_monitor();

    SC_CTOR(monitor)
    {
        SC_METHOD(prc_monitor);
        sensitive << m_clock << m_reset << m_sel << m_inp << m_out;
    }

};

void monitor::prc_monitor()
{
    cout<<"At time "<<sc_simulation_time()<<"::";
    cout<<"(clock, reset, sel, inp): ";
    cout<<m_clock.read()<<","<<m_reset.read()<<","<<m_sel.read()<<","<<m_inp.read();
    cout<<" out:"<<m_out.read()<<"\n";
}

sc_main生成用vcd格式的仿真波形记录文件,让仿真连续运行100ns。

sync_mux41_main.cpp文件

#include "sync_mux41_driver.h"
#include "sync_mux41_monitor.h"
#include "sync_mux41.h"

const int CLOCK_PERIOD =2;

int sc_main(int argc, char* argv[])
{
    sc_signal<bool> t_reset;
    sc_signal<sc_uint<4> > t_inp;
    sc_signal<sc_uint<2> > t_sel;
    sc_signal<bool> t_out;

    sc_clock t_clock("clock", CLOCK_PERIOD);

    sync_mux41 m1("SyncMuxer4x1");
    m1(t_clock, t_reset, t_sel, t_inp, t_out);

    driver d1("GenerateWaveforms");
    d1(t_reset, t_sel, t_inp);

    monitor mo1("MonitorWaveforms");
    mo1(t_clock, t_reset, t_sel, t_inp, t_out);

    sc_trace_file *tf =sc_create_vcd_trace_file("sync_mux41");
    sc_trace(tf, t_clock, "clock");
    sc_trace(tf, t_reset, "reset");
    sc_trace(tf, t_inp, "input");
    sc_trace(tf, t_sel, "select");
    sc_trace(tf, t_out, "output");

    sc_start(100, SC_NS);

    sc_close_vcd_trace_file(tf);
    return 0;


}

测试平台输出:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1573235.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【开源语音项目OpenVoice](一)——实操演示

目录 一、前菜 1、Python选择 2、pip源切换 3、ffmpeg配置问题 4、VSCode添加Jupyter扩展 二、配置虚拟环境 1、下载源码 方法一 直接下载源码压缩包 方法二 使用git 1&#xff09;git加入鼠标右键 2&#xff09;git clone源码 2、VSCode出场 1&#xff09;创建pyth…

C#操作MySQL从入门到精通(5)——查询数据

前言 在和MySql数据库交互的过程中,查询数据是使用最频繁的操作,本文详细介绍了查询数据的各种操作,包括查询一列数据、 查询两列数据、查询所有列数据、查询不重复的数据、查询指定行数据,绝对是C#操作MySql数据库史上最详细教程,能够帮助小白快速入门以及将这些功能迅速…

闪站侠洗护管理系统,洗衣洗鞋小程序软件定制,干洗连锁店软件系统搭建;

闪站侠洗护管理系统&#xff0c;洗衣洗鞋小程序软件定制&#xff0c;干洗连锁店软件系统搭建&#xff1b; 为了让每一个洗衣洗鞋工厂与门店的连接更加高效便捷&#xff0c;送洗流程更加简单轻松&#xff0c;拽牛科技倾心打造洗衣洗鞋管理软件。我们的目标是通过高效和优质的服务…

栈的详解和例题(力扣有效括号)

感谢各位大佬的光临&#xff0c;希望和大家一起进步&#xff0c;望得到你的三连&#xff0c;互三支持&#xff0c;一起进步 个人主页&#xff1a;LaNzikinh-CSDN博客 收入专栏:初阶数据结构_LaNzikinh篮子的博客-CSDN博客 文章目录 前言一.什么是栈二.栈的实现三.例题&#xff…

爬取学习强国视频小示例

因为需要爬取的视频数量并不是很大&#xff0c;总共需要将131个视频下载下来&#xff0c;所以就直接去手动找找视频的地址和名称保存下来的。由于页面是动态加载的&#xff0c;所以我们无法在网站源码中直接找到视频的超链接。设想是可以用Selenium模拟浏览器点击进行动态加载获…

excel统计分析——多项式回归

参考资料&#xff1a;生物统计学 多项式回归属于单变量曲线回归&#xff0c;但其形式和求解方法与多元线性回归相似。多项式回归的数学模型为&#xff1a; 令&#xff0c;&#xff0c;&#xff0c;&#xff0c;则 由于X不可逆&#xff0c;两边同时乘以X得&#xff0c;&#xff…

《QT实用小工具·十五》多种样式的开关控件

1、概述 源码放在文章末尾 目前实现了三种样式的开关控件按钮&#xff0c;如下所示&#xff1a; 项目部分代码如下所示&#xff1a; #ifndef IMAGESWITCH_H #define IMAGESWITCH_H/*** 图片开关控件 * 1. 自带三种开关按钮样式。* 2. 可自定义开关图片。*/#include <QWid…

使用Android完成案例教学

目录 题目&#xff1a;完成在Android平台下2个玩家分别利用2个手机连接在同一局域网下通过滑动摇杆分别使红飞机和黄飞机移动的开发。&#xff08;全代码解析&#xff09; 题目&#xff1a;完成在Android平台下2个玩家分别利用2个手机连接在同一局域网下通过滑动摇杆分别使红飞…

利用native的方式实现跨线程调用

简介 在OpenHarmony应用开发实践中&#xff0c;经常会遇到一些耗时的任务&#xff0c;如I/O操作、域名解析以及复杂计算等。这些任务如果直接在主线程中执行&#xff0c;将会严重阻塞主线程&#xff0c;影响后续任务的正常流程&#xff0c;进而导致用户界面响应延迟甚至卡顿。…

基于沙漏 Tokenizer 的高效三维人体姿态估计框架HoT

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 摘要Abstract文献阅读&#xff1a;基于沙漏 Tokenizer 的高效三维人体姿态估计框架HoT1、研究背景2、提出方法3、模块详细3.1、什么是HoT3.2、HoT 框架3.3、Token 剪…

JS 利用 webcam访问摄像头 上传到服务器

webcam JS 较为详细的指南 定义标题 <!doctype html> <html> <head><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>How to capture picture from webcam with Webcam.js</title></…

【UnityRPG游戏制作】Unity_RPG项目之界面面板分离和搭建

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

计算机视觉——基于傅里叶幅度谱文档倾斜度检测与校正

概述 在计算机视觉领域&#xff0c;处理文档数据时&#xff0c;OCR算法的性能往往会受到文档的倾斜度影响。如果文档在输入到模型之前没有经过恰当的校正&#xff0c;模型就无法期待模型能够提供准确的预测结果&#xff0c;或者模型预测的精度会降低。例如&#xff0c;在信息提…

python上传以及下载AWS S3上的文件

​ 免死金牌 由于本人平常是做NodeJS开发的&#xff0c;本次做的任务含有 Scheduled Job &#xff0c;所以选择了使用Python作为这次开发的语言&#xff0c;毕竟跑脚本还是这玩意适合。 其中有一个任务是要从S3上拉下一些文件来处理&#xff0c;处理完成后再push 上去的需求…

深入浅出 -- 系统架构之负载均衡Nginx动静分离

一、Nginx动静分离 动静分离应该是听的次数较多的性能优化方案&#xff0c;那先思考一个问题&#xff1a;为什么需要做动静分离呢&#xff1f;它带来的好处是什么&#xff1f; 其实这个问题也并不难回答&#xff0c;当你搞懂了网站的本质后&#xff0c;自然就理解了动静分离的重…

【学习分享】小白写算法之选择排序篇

【学习分享】小白写算法之选择排序篇 前言一、什么是选择排序算法二、选择排序算法如何实现三、C语言实现算法四、复杂度计算五、算法稳定性六、小结 前言 简单排序有三种&#xff0c;冒泡排序&#xff0c;插入排序和选择排序。这三种排序的算法算是入门级别的&#xff0c;打好…

torchvision中的数据集使用

torchvision中的数据集使用 使用和下载CIFAR10数据集 输出测试集中的第一个元素&#xff08;输出img信息和target&#xff09; 查看分类classes 打断点–>右键Debug–>找到classes 代码 import torchvisiontrain_set torchvision.datasets.CIFAR10(root"./data…

显示学习1(基于树莓派Pico) -- 基础

先上图为敬。 驱动的是0.96寸的OLED&#xff0c;SSD1315。使用的I2C接口驱动。 有一说一树莓派Pico用来学习底层真的太好了&#xff0c;没有之一。首先是价格便宜&#xff0c;10块钱包邮还要什么自行车。然后底层封装很完备&#xff0c;接近闭源。最后是用的python&#xff0c…

4.2.k8s的pod-标签管理、镜像拉取策略、容器重启策略、资源限制、优雅终止

一、标签管理 1.标签在k8s中极其重要&#xff0c;大多数资源的相互关联就需要使用标签&#xff1b;也就是说&#xff0c;资源的相互关联大多数时候&#xff0c;是使用标签进行关联的&#xff1b; 2.其他作用&#xff0c;在k8s集群中&#xff0c;node节点的一些操作比如污点及污…

Python向带有SSL/TSL认证服务器发送网络请求小实践(附并发http请求实现asyncio+aiohttp)

1. 写在前面 最近工作中遇到这样的一个场景&#xff1a;给客户发送文件的时候&#xff0c;为保证整个过程中&#xff0c;文件不会被篡改&#xff0c;需要在发送文件之间&#xff0c; 对发送的文件进行签名&#xff0c; 而整个签名系统是另外一个团队做的&#xff0c; 提供了一…