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

本文主要是介绍SystemC入门之测试平台编写完整示例:带同步输出的多路选择器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

内容: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;}

测试平台输出:

这篇关于SystemC入门之测试平台编写完整示例:带同步输出的多路选择器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/881749

相关文章

Python调用LibreOffice处理自动化文档的完整指南

《Python调用LibreOffice处理自动化文档的完整指南》在数字化转型的浪潮中,文档处理自动化已成为提升效率的关键,LibreOffice作为开源办公软件的佼佼者,其命令行功能结合Python... 目录引言一、环境搭建:三步构建自动化基石1. 安装LibreOffice与python2. 验证安装

Go语言使用select监听多个channel的示例详解

《Go语言使用select监听多个channel的示例详解》本文将聚焦Go并发中的一个强力工具,select,这篇文章将通过实际案例学习如何优雅地监听多个Channel,实现多任务处理、超时控制和非阻... 目录一、前言:为什么要使用select二、实战目标三、案例代码:监听两个任务结果和超时四、运行示例五

Linux线程同步/互斥过程详解

《Linux线程同步/互斥过程详解》文章讲解多线程并发访问导致竞态条件,需通过互斥锁、原子操作和条件变量实现线程安全与同步,分析死锁条件及避免方法,并介绍RAII封装技术提升资源管理效率... 目录01. 资源共享问题1.1 多线程并发访问1.2 临界区与临界资源1.3 锁的引入02. 多线程案例2.1 为

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

Spring WebClient从入门到精通

《SpringWebClient从入门到精通》本文详解SpringWebClient非阻塞响应式特性及优势,涵盖核心API、实战应用与性能优化,对比RestTemplate,为微服务通信提供高效解决... 目录一、WebClient 概述1.1 为什么选择 WebClient?1.2 WebClient 与

Python极速搭建局域网文件共享服务器完整指南

《Python极速搭建局域网文件共享服务器完整指南》在办公室或家庭局域网中快速共享文件时,许多人会选择第三方工具或云存储服务,但这些方案往往存在隐私泄露风险或需要复杂配置,下面我们就来看看如何使用Py... 目录一、android基础版:HTTP文件共享的魔法命令1. 一行代码启动HTTP服务器2. 关键参

SQL Server 中的 WITH (NOLOCK) 示例详解

《SQLServer中的WITH(NOLOCK)示例详解》SQLServer中的WITH(NOLOCK)是一种表提示,等同于READUNCOMMITTED隔离级别,允许查询在不获取共享锁的情... 目录SQL Server 中的 WITH (NOLOCK) 详解一、WITH (NOLOCK) 的本质二、工作

MySQL CTE (Common Table Expressions)示例全解析

《MySQLCTE(CommonTableExpressions)示例全解析》MySQL8.0引入CTE,支持递归查询,可创建临时命名结果集,提升复杂查询的可读性与维护性,适用于层次结构数据处... 目录基本语法CTE 主要特点非递归 CTE简单 CTE 示例多 CTE 示例递归 CTE基本递归 CTE 结

Spring AI使用tool Calling和MCP的示例详解

《SpringAI使用toolCalling和MCP的示例详解》SpringAI1.0.0.M6引入ToolCalling与MCP协议,提升AI与工具交互的扩展性与标准化,支持信息检索、行动执行等... 目录深入探索 Spring AI聊天接口示例Function CallingMCPSTDIOSSE结束语