当前位置: 首页 > article >正文

[SC]SystemC在CPU/GPU验证中的应用(五)

SystemC在CPU/GPU验证中的应用(五)

       摘要:下面分享50个逐步升级SystemC编程能力的示例及建议的学习路线图。您可以一次一批地完成它们——从前五个基础的例子开始,然后转向channels, TLM, bus models, simple CPU/GPU kernels等等。在每个阶段掌握之后,再进行下一组的学习。


50个代表性的SystemC例子

  1. Hello, SystemC! (module + sc_main)
  2. Simple clock generator
  3. 4-bit up/down counter
  4. Blocking FIFO channel
  5. Non-blocking handshake channel
  6. Combinational AND/OR modules
  7. D-flip‐flop with async reset
  8. 8×1 multiplexer
  9. Simple RAM model (blocking accesses)
  10. Simple ROM model
  11. Dual-port RAM
  12. Bus arbiter (round-robin)
  13. TLM2.0 blocking transport (initiator)
  14. TLM2.0 blocking transport (target)
  15. TLM2.0 non-blocking transport
  16. TLM2.0 analysis port / export
  17. Simple AXI-Lite bus model
  18. AXI-Lite master + slave example
  19. Quantum keeper & time annotation
  20. tlm_utils::simple_initiator_socket
  21. tlm_utils::simple_target_socket
  22. Hierarchical module instantiation
  23. Dynamic process spawn & kill
  24. Event notification & sc_event_queue
  25. Reset synchronization circuit
  26. Clock domain crossing FIFO
  27. Bus monitor / tracer (TLM analysis)
  28. Memory-mapped register file
  29. Interrupt controller model
  30. Pipeline stage model (fetch/decode/execute)
  31. Simple 4-stage CPU datapath
  32. Cache model (direct-mapped)
  33. DMA engine model
  34. GPGPU kernel launcher skeleton
  35. GPU shader core (vector add)
  36. Barrier synchronization (sc_barrier emulation)
  37. Producer-consumer with sc_mutex
  38. sc_semaphore example
  39. SystemC-AMS basic RC filter
  40. Fixed-point arithmetic with sc_fixed
  41. Power‐aware sc_trace (VCD generation)
  42. Cross-trade-off analysis (timing vs. power)
  43. SystemC assertions (SC_ASSERT)
  44. UVM-SystemC basic use case
  45. Co-simulation stub (Verilog DPI)
  46. SystemC Python binding stub
  47. Parameterized module (SC_MODULE_T)
  48. TLM-2.0 generic payload extensions
  49. Simple NoC router model
  50. Full mini‐SOC: CPU + L2 cache + memory + interconnect

Fifth Batch: Examples 31–40

Below are the first five examples with complete code + detailed comments.

31. 简易 4 阶段 CPU 流水线: Fetch→Decode→Execute→Writeback

文件名:pipeline_4stage.cpp

#include <systemc.h>
#include <tuple>
#include <vector>// 指令格式:<opcode, operand>
using Instr   = std::pair<int,int>;
// 解码结果:<opcode, operand>
using Decoded = std::tuple<int,int>;
// 执行结果:<dest_reg, value>
using Result  = std::tuple<int,int>;// Fetch 阶段:从指令存储读 Instr
SC_MODULE(Fetch) {sc_in<bool>       clk;sc_fifo_out<Instr> out;std::vector<Instr> imem;int pc{0};SC_CTOR(Fetch) {// 初始化几条“指令”imem = {{0,5},{1,3},{0,2},{1,4},{2,0}};SC_METHOD(proc);sensitive << clk.pos();}void proc() {if (pc < (int)imem.size()) {Instr ins = imem[pc++];out.write(ins);cout<<sc_time_stamp()<<" [Fetch] pc="<<(pc-1)<<" instr=("<<ins.first<<","<<ins.second<<")\n";}}
};// Decode 阶段:把 Instr 转成 Decoded
SC_MODULE(Decode) {sc_in<bool>        clk;sc_fifo_in<Instr>   in;sc_fifo_out<Decoded> out;SC_CTOR(Decode) {SC_METHOD(proc);sensitive << clk.pos();}void proc() {Instr ins;if (in.nb_read(ins)) {Decoded d = std::make_tuple(ins.first, ins.second);out.write(d);cout<<sc_time_stamp()<<" [Decode] opcode="<<ins.first<<" operand="<<ins.second<<"\n";}}
};// Execute 阶段:  
// opcode 0→加1,1→乘2,2→写入寄存器 operand=寄存器号
SC_MODULE(Execute) {sc_in<bool>          clk;sc_fifo_in<Decoded>   in;sc_fifo_out<Result>   out;SC_CTOR(Execute) {SC_METHOD(proc);sensitive << clk.pos();}void proc() {Decoded d;if (in.nb_read(d)) {int op, val;std::tie(op,val) = d;int res = (op==0)? val+1 : (op==1)? val*2 : v

相关文章:

[SC]SystemC在CPU/GPU验证中的应用(五)

SystemC在CPU/GPU验证中的应用(五) 摘要:下面分享50个逐步升级SystemC编程能力的示例及建议的学习路线图。您可以一次一批地完成它们——从前五个基础的例子开始,然后转向channels, TLM, bus models, simple CPU/GPU kernels等等。在每个阶段掌握之后,再进行下一组…...

[蓝桥杯C++ 2024 国 B ] 立定跳远(二分)

题目描述 在运动会上&#xff0c;小明从数轴的原点开始向正方向立定跳远。项目设置了 n n n 个检查点 a 1 , a 2 , ⋯ , a n a_1, a_2, \cdots , a_n a1​,a2​,⋯,an​ 且 a i ≥ a i − 1 > 0 a_i \ge a_{i−1} > 0 ai​≥ai−1​>0。小明必须先后跳跃到每个检查…...

现代网络安全攻防技术与发展现状

1. 引言 随着数字化转型进程的加速&#xff0c;全球信息化程度不断深入&#xff0c;网络安全问题日益凸显。根据最新的统计数据&#xff0c;2022年全球范围内的网络攻击事件较前一年增长了约41%&#xff0c;造成的经济损失高达超过6万亿美元。在这个背景下&#xff0c;了解现代…...

杏仁海棠花饼的学习日记第十四天CSS

一&#xff0c;前言 第二天&#xff0c;今天看CSS。 二&#xff0c;CSS简介及导入方式 CSS简介 CSS&#xff08;层叠样式表&#xff0c;Cascading Style Sheets&#xff09;是一种用于描述 HTML 或 XML&#xff08;包括 SVG、XHTML 等&#xff09;文档呈现效果的样式语言。…...

ESP8266远程控制:实现网络通信与设备控制

概述&#xff1a; 最近一直在弄esp8266的网络通信&#xff0c;但是一直都还没搞懂到底esp8266可不可以通过连接一个网络过后&#xff0c;在很远的地方使用网络将其关掉 在网上找了两个教程都有程序&#xff0c;都跑通了 第一个 第二个找不到了&#xff0c;但是程序有 CSDN上放文…...

RabbitMQ监控:关键技术、技巧与最佳实践

RabbitMQ作为企业级消息中间件的核心组件&#xff0c;其稳定性和性能直接影响分布式系统的可靠性。有效的监控不仅能帮助快速定位问题&#xff0c;还能优化系统资源分配&#xff0c;预防潜在故障。本文基于RabbitMQ官方文档&#xff0c;深入探讨其监控的技术方案、实践技巧及最…...

【机器学习基础】机器学习入门核心算法:隐马尔可夫模型 (HMM)

机器学习入门核心算法&#xff1a;隐马尔可夫模型 &#xff08;HMM&#xff09; 一、算法逻辑与核心思想二、算法原理与数学推导核心问题与算法推导 三、模型评估四、应用案例1. 语音识别 (Speech Recognition)2. 自然语言处理 (Natural Language Processing - NLP)3. 手写体识…...

zookeeper 操作总结

zookeeper 中的节点类型 节点类型命令选项说明‌持久节点‌无选项&#xff08;默认&#xff09;永久存在&#xff0c;除非手动删除。‌临时节点‌-e与客户端会话绑定&#xff0c;会话结束自动删除&#xff08;‌不能有子节点‌&#xff09;。‌顺序节点‌-s节点名自动追加递增…...

golang 实现基于redis的并行流量控制(计数锁)

在业务开发中&#xff0c;有时需要对某个操作在整个集群中限制并发度&#xff0c;例如限制大模型对话的并行数。基于redis zset实现计数锁&#xff0c;做个笔记。 关键词&#xff1a;并行流量控制、计数锁 package redisutilimport ("context""fmt""…...

Leetcode 2819. 购买巧克力后的最小相对损失

1.题目基本信息 1.1.题目描述 现给定一个整数数组 prices&#xff0c;表示巧克力的价格&#xff1b;以及一个二维整数数组 queries&#xff0c;其中 queries[i] [ki, mi]。 Alice 和 Bob 去买巧克力&#xff0c;Alice 提出了一种付款方式&#xff0c;而 Bob 同意了。 对于…...

AI炼丹日志-25 - OpenAI 开源的编码助手 Codex 上手指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; Java篇&#xff1a; MyBatis 更新完毕目前开始更新 Spring&#xff0c;一起深入浅出&#xff01; 大数据篇 300&#xff1a; Hadoop&…...

AnyConv OGG 转换器:轻松转换音频格式

在数字音频世界中,不同的文件格式适用于不同的场景和设备。OGG 是一种开放、免费的音频格式,具有高压缩率和良好的音质。然而,有时我们需要将 OGG 文件转换为其他格式,或者将其他格式转换为 OGG。这就是 AnyConv OGG 转换器发挥作用的地方。 什么是 AnyConv OGG 转换器? …...

C# 类和继承(使用基类的引用)

使用基类的引用 派生类的实例由基类的实例和派生类新增的成员组成。派生类的引用指向整个类对象&#xff0c;包括 基类部分。 如果有一个派生类对象的引用&#xff0c;就可以获取该对象基类部分的引用&#xff08;使用类型转换运算符把 该引用转换为基类类型&#xff09;。类…...

进程间通信(消息队列)

目录 一 原理 二 API 1. ftok 2. msgget 3. msgctl 4. msgsnd 5. msgrcv 三 demo代码 四 基于责任链模式和消息队列对数据处理 1. 什么是责任链模式 2. 下面基于责任链模式来对消息队列获取的消息进行处理 前置 其实system v 版本的进程间通信&#xff0c;设计的接…...

Linux gron 命令使用详解

简介 gron 是一个独特的命令行工具&#xff0c;用于将 JSON 数据转换为离散的、易于 grep 处理的赋值语句格式。它的名字来源于 “grepable on” 或 “grepable JSON”&#xff0c;主要解决在命令行中处理复杂 JSON 数据的难题。 核心价值 gron 的核心是将 JSON 数据展平为类…...

Nginx--手写脚本压缩和切分日志(也适用于docker)

原文网址&#xff1a;Nginx--手写脚本压缩和切分日志&#xff08;也适用于docker&#xff09;_IT利刃出鞘的博客-CSDN博客 简介 本文介绍nginx如何手写脚本压缩和切分日志。 1.创建切分日志的脚本 创建脚本文件&#xff1a;/work/tmp/nginx-log_sh&#xff08;后边要用run-…...

OpenCv高阶(十八)——dlib人脸检测与识别

文章目录 一、dlib库是什么&#xff1f;二、opencv库与dlib库的优缺点对比1、opencv优缺点2、dlib库优缺点 三、dlib库的安装1、在线安装2、本地安装 四、dlib库的人脸检测器1. 基于 HOG 的检测器2. 基于 CNN 的检测器 五、dlib人脸检测的简单使用1、导入必要库2、初始化人脸检…...

中山大学无人机具身导航新突破!FlightGPT:迈向通用性和可解释性的无人机视觉语言导航

作者&#xff1a;Hengxing Cai 1 , 2 ^{1,2} 1,2, Jinhan Dong 2 , 3 ^{2,3} 2,3, Jingjun Tan 1 ^{1} 1, Jingcheng Deng 4 ^{4} 4, Sihang Li 2 ^{2} 2, Zhifeng Gao 2 ^{2} 2, Haidong Wang 1 ^{1} 1, Zicheng Su 5 ^{5} 5, Agachai Sumalee 6 ^{6} 6, Renxin Zhong 1 ^{1} …...

WIN11+CUDA11.8+VS2019配置BundleFusion

参考&#xff1a; BundleFusion:VS2019 2017 ,CUDA11.5,win11&#xff0c;Realsense D435i离线数据包跑通&#xff0c;环境搭建 - 知乎 Win10VS2017CUDA10.1环境下配置BundleFusion - 知乎 BundleFusionWIN11VS2019 CUDA11.7环境配置-CSDN博客 我的环境&#xff1a;Win 11…...

WPF prism

Prism Prism.Dryloc 包 安装 Nuget 包 - Prism.DryIoc 1. 修改 App.xaml 修改 App.xaml 文件&#xff0c;添加 prism 命名空间, 继承由 Application → PrismApplication&#xff0c;删除默认启动 url, StartupUri“MainWindow.xaml” <dryioc:PrismApplicationx:Class…...

实时同步缓存,与阶段性同步缓存——补充理解《补充》

根据 Redis 缓存的数据与 DBMS 中数据的同步性划分&#xff0c;缓存一般可划分为两类&#xff1a;实时同步缓存&#xff0c;与阶段性同步缓存。 实时同步缓存是指&#xff0c;DBMS 中数据更新后&#xff0c;Redis 缓存中的存放的相关数据会被立即清 除&#xff0c;以促使再有对…...

[Redis] Redis:高性能内存数据库与分布式架构设计

标题&#xff1a;[Redis] 浅谈分布式系统 水墨不写bug 文章目录 一、什么是Redis&#xff1f;一、核心定位二、核心优势三、典型应用场景四、Redis vs 传统数据库 二、架构选择与设计1、单机架构&#xff08;应用程序 数据库服务器&#xff09;2、应用程序和数据库服务器分离3…...

Mobaxterm解锁Docker

Mobaxterm是一款功能强大的终端模拟器和SSH客户端&#xff0c;它支持Windows、Linux和Mac操作系统&#xff0c;对于使用Docker的开发者和运维人员来说&#xff0c;Mobaxterm是一个非常有用的工具。本文将深入解析Mobaxterm&#xff0c;并分享一些使用Docker时的高效技巧。 Mob…...

React 第四十九节 Router中useNavigation的具体使用详解及注意事项

前言 useNavigation 是 React Router 中一个强大的钩子&#xff0c;用于获取当前页面导航的状态信息。 它可以帮助开发者根据导航状态优化用户体验&#xff0c;如显示加载指示器、防止重复提交等。 一、useNavigation核心用途 检测导航状态&#xff1a;判断当前是否正在进行…...

【JavaEE】Spring事务

目录 一、事务简介二、Spring事务的实现2.1 事务的操作2.2 分类2.2.1 Spring编程式事务2.2.2 Spring 声明式事务 Transactional2.2.2.1 Transactional 详解2.2.2.1.1 rollbackFor2.2.2.1.2 Isolation2.2.2.1.3 propagation 一、事务简介 事务&#xff1a;事务是⼀组操作的集合…...

Flink 状态管理深度解析:类型与后端的全面探索

在流处理场景中,数据往往是连续且无界的,为了准确处理这些数据并维持计算的连续性,Flink 引入了状态管理机制。Flink 的状态管理包含状态类型和状态后端两大部分,它们相辅相成,共同为作业的可靠性、容错性和性能提供保障。接下来,我们将深入探究 Flink 状态管理中状态类型…...

Android15 userdebug版本不能remount

背景描述&#xff1a; 最近调试Android Vendor Hal的时候发现一个奇怪的现象: android userdebug版本刷到设备中&#xff0c;执行adb root没提示错误&#xff0c;但是没有获取到root权限。 Android设备运行的系统版本有三种情况&#xff1a;user版本、userdebug版本和eng版本…...

R包安装报错解决案例系列|R包使用及ARM架构解决data.table安装错误问题

有不少同学是Mac系统的&#xff0c;分析过程中会发现部分R包总是安装不成功&#xff0c;这是因为部分R包基于windowsx86架构编译的&#xff0c;最常见的就是含 C/C/Fortran 的包&#xff0c;对于初学者都是建议linux和win去做&#xff0c;Windows 通常直接安装预编译好的二进制…...

k8s Headless Service

Kubernetes 无头服务&#xff08;Headless Service&#xff09;配置与使用场景 1.无头服务概述 无头服务&#xff08;Headless Service&#xff09;是 Kubernetes 中的一种特殊服务类型&#xff0c;它**不分配集群 IP&#xff08;ClusterIP&#xff09;&#xff0c;而是直接暴露…...

Linux上安装MongoDB

目录 一、在Linux系统安装MongoDB服务器 1、下载MongoDB 2、上传MongoDB并解压 3、创建必要目录 4、配置环境变量 5、创建配置文件 6、启动命令 7、验证安装 二、在Linux系统安装MongoDB客户端Shell 1、下载MongoDB Shell 2、上传MongoDB Shell并解压 3、配置环境变…...