SystemC学习(4)— 在VCS中运行SystemC

ops/2024/11/14 7:48:01/

SystemC学习(4)— 在VCS中运行SystemC

一、前言

参考:VCS编译verilog&SystemC

二、仅包含SystemC的仿真

源文件使用上一篇:SystemC学习(3)— APB_SRAM的建模与测试

编写makefile如下所示:

all: comp simcomp:vcs -full64 -debug_acc+pp+dmptf -debug_region+cell+encrypt -sysc=show_sc_main \-sysc sc_main apb_sram/main.cpp -l comp.logsim:./simv -ucli -do ./vcs.tcl -l sim.logclean:rm -rf csrc/ simv simv.daidircleanall: cleanrm -rf 64 AN.DB/ ucli.key novas.* *Log *log

编写vcs.tcl 如下所示:

fsdbDumpvars sc_main.dut 0run
finish

编译运行后可以打开novas.fsdb波形文件如下所示:
在这里插入图片描述

三、Verilog和SystemC混合仿真

我们将apb_sram修为如下apb_sram.v文件:

 
parameter ADDR_SIZE = 32;
parameter DATA_SIZE = 32;module apb_sram(input   apb_pclk,input   apb_presetn,input   apb_psel,input   apb_penable,input   apb_pwrite,input   [ADDR_SIZE-1:0] apb_paddr,input   [DATA_SIZE-1:0] apb_pwdata,output  reg [DATA_SIZE-1:0] apb_prdata,output  reg apb_pready,output  reg apb_pslverr);bit [DATA_SIZE-1:0] mem[4096];always @(posedge apb_pclk or negedge apb_presetn) beginif(!apb_presetn) beginapb_prdata  <= 0;apb_pready  <= 0;apb_pslverr <= 0;endelse if((apb_psel==1) && (apb_penable==0) && (apb_pwrite==0)) beginapb_prdata <= mem[apb_paddr[ADDR_SIZE-1:2]];endelse if((apb_psel==1) && (apb_penable==1) && (apb_pwrite==0)) beginapb_pready <= 1;endelse if((apb_psel==1) && (apb_penable==1) && (apb_pwrite==1)) beginmem[apb_paddr[ADDR_SIZE-1:2]] <= apb_pwdata;apb_pready <= 1;endelse beginapb_prdata <= apb_prdata;apb_pready <= 0;endend
endmodule

makefile修改为如下所示:

all: comp simcomp:vlogan -full64 -sverilog -sysc -sc_model apb_sram -sc_portmap the.map apb_sram/apb_sram.vvcs -full64 -debug_acc+pp+dmptf -debug_region+cell+encrypt \-sysc apb_sram/main.cpp -sysc=show_sc_main -l comp.log -timescale=1ns/1pssim:./simv -ucli -do ./vcs.tcl -l sim.logclean:rm -rf csrc/ simv simv.daidircleanall: cleanrm -rf 64 AN.DB/ ucli.key novas.* *Log *log

the.map文件如下所示:

#port           width             Verilog         SystemC
ina             32                bitvector       int
inb             32                bitvector       int
outx            32                bitvector       int

编译运行后可以打开novas.fsdb波形文件看到如下所示:
在这里插入图片描述


http://www.ppmy.cn/ops/133506.html

相关文章

数据库参数备份

MySQL #!/bin/bash # 获取当前日期和时间的时间戳 TIMESTAMP$(date "%Y%m%d-%H%M%S")# 0、创建目录 mkdir /tmp/parameter_$TIMESTAMP/# 1、获取所有命名空间 echo "1、获取所有命名空间" NAMESPACES$(kubectl get ns | grep qfusion- | grep -v qfusion-…

本地 Hadoop 开发环境搭建详解

### 本地 Hadoop 开发环境搭建详解 Hadoop 是处理大规模数据的核心工具之一&#xff0c;在大数据分析、机器学习和数据仓库等场景中应用广泛。为了方便开发和调试&#xff0c;搭建一个本地 Hadoop 环境是一个很好的选择。本文将详细介绍如何在本地搭建一个单节点的 Hadoop 环境…

prompt资料收集

1. LANGgpt模板 # Role: 知识探索专家 ## Profile: - - 即刻App即刻App&#xff0c;享受探索、表达和创造https://m.okjike.com/originalPosts/649801f1ba47fe581a0da471?seyJ1IjoiNjQyM2IwMDE4NDg5Njk1NGJjYzhkNWU1IiwiZCI6MX0%3D2. 好的prompt的标准 主观的说&#xff1a;…

【深度解析】CSS工程化全攻略(1)

在现代前端开发中&#xff0c;随着项目的规模越来越大&#xff0c;CSS 代码的管理和维护变得越来越重要。传统的 CSS 编写方式在大型项目中存在诸多问题&#xff0c;如类名冲突、重复样式、文件细分等。为了解决这些问题&#xff0c;社区提出了多种解决方案&#xff0c;包括命名…

OpenGL ES 文字渲染方式有几种?

在音视频或 OpenGL 开发中,文字渲染是一个高频使用的功能,比如制作一些酷炫的字幕、为视频添加水印、设置特殊字体等等。 实际上 OpenGL 并没有定义渲染文字的方式,所以我们最能想到的办法是:将带有文字的图像上传到纹理,然后进行纹理贴图。 本文分别介绍下在应用层和 C+…

通俗易懂:什么是 Java 类加载?

文章目录 类加载过程的三个阶段一个简单的案例&#xff1a;类加载的工作原理使用这个类类加载的顺序类加载的特点类加载的好处总结推荐阅读文章 在 Java 中&#xff0c; 类加载是一种将我们写的 Java 类文件加载到内存中的过程&#xff0c;让 JVM&#xff08;Java 虚拟机&…

软件设计师 - 第2章 程序设计语言基础知识

语言分类 按照级别分类 低级语言&#xff1a;汇编语言高级语言&#xff1a;C&#xff0c;C&#xff0c;C#&#xff0c;Java&#xff0c;Python等 按照翻译形式分类 汇编&#xff1a;源代码经汇编程序翻译后执行解释&#xff1a;源代码经解释器解释后执行或者翻译成中间代码…

项目管理软件:帮你0门槛制作甘特图

甘特图是一种项目管理工具&#xff0c;能够通过条状图来显示项目进度的时间表&#xff0c;帮助团队或个人规划、安排和跟踪整个的项目进度。 甘特图&#xff0c;也叫横道图、条状图&#xff0c;是使用条状图来显示设计项目、进度和其他时间相关的系统进展的内在关系随着时间进…