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

devtools/2024/11/14 6:15:40/

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/devtools/132797.html

相关文章

在gitlab,把新分支替换成master分支

1、备份master分支&#xff0c;可以打tag 2、删除master分支 正常情况下&#xff0c;master分支不允许删除&#xff0c;需要做两个操作才能删除 a、变更项目默认分支为非master分支&#xff0c;可以先随便选择 b、取消master为非保护分支 操作了上述两步&#xff0c;就可以删…

从零创建vue+elementui+sass+three.js项目

初始化&#xff1a; vue init webpack projectnamecd projectnamenpm install支持sass: npm install sass --save-dev npm install sass-loader7.1.0 --save-dev npm install node-sass4.12.0 --save-devbuild/webpack.base.conf.js添加 rules: [...,{test: /\.scss$/,loade…

SpringCloud篇(微服务)

目录 一、认识微服务 1. 单体架构 2. 分布式架构 3. 微服务 3.1. 特点 3.2. 优点 3.3 缺点 二、微服务设计、拆分原则 1. AKF 拆分原则 2. Y轴&#xff08;功能&#xff09;关注应用中功能划分&#xff0c;基于不同的业务拆分 3. X轴&#xff08;水平扩展&#xff09…

深入解析TOML、XML、YAML和JSON:优劣对比与场景应用

摘要&#xff1a;本文将介绍四种常见的配置文件和数据交换格式&#xff1a;TOML、XML、YAML和JSON&#xff0c;通过具体的使用例子分析它们的优缺点&#xff0c;并探讨在不同场景下的应用选择。 正文&#xff1a; 一、TOML 优点&#xff1a; 易于阅读和编写&#xff1a;TOML的…

数字后端零基础入门系列 | Innovus零基础LAB学习Day9

Module 16 Wire Editing 这个章节的学习目标是学习如何在innovus中手工画线&#xff0c;切断一根线&#xff0c;换孔&#xff0c;更改一条net shape的layer和width等等。这个技能是每个数字IC后端工程师必须具备的。因为项目后期都需要这些技能来修复DRC和做一些手工custom走线…

ORU 的 Open RAN 管理平面 (M 平面)

[TOC](ORU 的 Open RAN 管理平面 (M 平面)) ORU 的 Open RAN 管理平面 (M 平面) https://www.techplayon.com/open-ran-management-plane-m-plane-for-open-radio-unit/ ORU M 平面 在 ORAN 中&#xff0c;设置参数的 O-RU 管理功能是通过 M-Plane 完成的。管理功能包括 O-…

Java 处理 json 格式数据解析为 csv 格式

Java处理json格式数据解析为csv格式 如果不使用 JSON 工具库&#xff0c;你可以手动解析 JSON 格式字符串并将其转换为 CSV 格式字符串。 以下是一个简单示例&#xff0c;展示如何实现这一功能。 示例代码 下面的示例代码手动处理 JSON 字符串&#xff0c;将其转换为 CSV 格式字…

3. ARM_寄存器组织

概述 什么是寄存器&#xff1a; 寄存器是CPU内部的存储器&#xff0c;没有地址。寄存器用于暂时存放参与运算的数据和运算结果。寄存器包括通用寄存器、专用寄存器、控制寄存器。 通用寄存器&#xff1a;可以存取的数据不受限制 &#xff0c;什么都可以存。专用寄存器&#…