DPI-C动态库so的使用
文章目录
- 前言
- 一、方法介绍
- 二、demo演示
- 2.1 文件准备
- 2.2 执行仿真
- 2.3 仿真结果
- 总结
前言
在做IC验证EDA仿真过程中,有时候需要调用C实现的参考模块,我们可以利用DPI-C的功能,实现SV侧调用C侧的函数。
在具体实现过程中,我们可以将C代码编译成一个so文件的动态库,然后在SV侧加入这个so文件进行编译和仿真。
这样做的好处是,C的具体实现对SV侧不可见,SV侧只需要关心函数接口和参数的传递。
本文先介绍方法,然后演示一个demo,记录这个过程。
一、方法介绍


二、demo演示
2.1 文件准备
root_dir/c_src/lib.c
#include<stdio.h>
void c_print(char* str){printf("[C] input srting is %s\n",str);
}
root_dir/sv_src/tb.sv
module tb;import "DPI-C" function void c_print(string str);initial begin$display("[SV] Using a share lib.so");c_print("USE share lib");endendmodule
root_dir/work/makefile
c_mode:gcc ../c_src/lib.c -nostartfiles -fPIC -m64 -shared -I /eda/synopsys/vcs/U-2023.03-SP2-2/include -o ../c_src/lib.so #这里根据自己的情况使用VCS的绝对路径,也可以使用环境变量代替
comp:bsub -Is vcs -full64 -sverilog +incdir+../sv_src +incdir+ ../c_src ../sv_src/tb.sv -debug_acc+all+dmptf -debug_region+cell+encrypt -o demo_simv
run:bsub -Is ./demo_simv -sv_root ../c_src -sv_lib lib -l sim.log
2.2 执行仿真
cd root_dir/work
make c_mode
make comp
make run
2.3 仿真结果
[SV] Using a share lib.so
[C] input srting is USE share lib
总结
本文主要记录了SV侧,通过DPI-C调用C生成的动态库,先介绍方法,再演示demo。
相关文章:
DPI-C动态库so的使用
文章目录 前言一、方法介绍二、demo演示2.1 文件准备2.2 执行仿真2.3 仿真结果 总结 前言 在做IC验证EDA仿真过程中,有时候需要调用C实现的参考模块,我们可以利用DPI-C的功能,实现SV侧调用C侧的函数。 在具体实现过程中,我们可以…...
Java避坑案例 - 高并发场景下的分布式缓存策略
文章目录 概述缓存常见问题及解决方案把 Redis 当作数据库常用的数据淘汰策略如何选择合适的驱逐算法 缓存雪崩问题复现解决方案 缓存击穿(热点缓存失效)问题复现解决方案 缓存穿透问题复现解决方案缓存穿透 vs 缓存击穿 缓存与数据库的一致性先更新缓存…...
Python中的字符串修剪:strip()、lstrip() 和 rstrip()
Python中的字符串修剪 Python 中的字符串修剪:strip()、lstrip() 和 rstrip()strip()lstrip()rstrip()应用场景结论 Python 中的字符串修剪:strip()、lstrip() 和 rstrip() 在 Python 开发中,我们经常需要处理字符串,其中一项常见…...
K8S配置storage-class
简介 Kubernetes支持NFS存储,需要安装nfs-subdir-external-provisioner,它是一个存储资源自动调配器,它可将现有的NFS服务器通过持久卷声明来支持Kubernetes持久卷的动态分配。该组件是对Kubernetes NFS-Client Provisioner的扩展࿰…...
多线程——线程池
目录 前言 一、什么是线程池 1.引入线程池的原因 2.线程池的介绍 二、标准库中的线程池 1.构造方法 2.方法参数 (1)corePoolSize 与 maximumPoolSize (2)keepAliveTime 与 unit (3)workQueue&am…...
VScode插件:前端每日一题
大文件上传如何做断点续传? 在前端实现大文件上传的断点续传,通常会将文件切片并分块上传,记录每块的上传状态,以便在中断或失败时只上传未完成的部分。以下是实现断点续传的主要步骤和思路: 1. 文件切片 (File Slici…...
Android跨进程通信
1、跨进程通信的几种方式 在 Android 中,跨进程通信 (IPC, Inter-Process Communication) 方式有多种,主要用于在不同的应用或进程之间传递数据。常见的跨进程通信方式包括: AIDL (Android Interface Definition Language) • 描述ÿ…...
【初阶数据结构】计数排序 :感受非比较排序的魅力
文章目录 前言1. 什么是计数排序?2. 计数排序的算法思路2.1 绝对位置和相对位置2.2 根据计数数组的信息来确认 3. 计数排序的代码4. 算法分析5. 计数排序的优缺点6.计数排序的应用场景 前言 如果大家仔细思考的话,可能会发现这么一个问题。我们学的七大…...
前后双差速轮之LQR控制
在之前的代码中,我们实现了前后两对双差速轮AGV的运动学正解和逆解。但为了实现对AGV的精确路径跟踪和姿态控制,我们需要引入控制算法。线性二次型调节器(LQR)是一种常用的最优控制方法,可以有效地将系统的状态误差最小化。本文将详细说明如何在之前的C++代码中加入LQR控制…...
Linux之远程连接服务器
1、远程连接服务器简介 (1)什么是远程连接服务器 远程连接服务器通过文字或图形接口方式来远程登录系统,让你在远程终端前登录linux主机以取得可操作主机接口(shell),而登录后的操作感觉就像是坐在系统前面…...
k8s 部署 nexus3 详解
创建命名空间 nexus3-namespace.yaml apiVersion: v1 kind: Namespace metadata:name: nexus-ns创建pv&pvc nexus3-pv-pvc.yaml apiVersion: v1 kind: PersistentVolume metadata:name: nfs-pvnamespace: nexus-ns spec:capacity:storage: 3GiaccessModes:- ReadWriteM…...
从“摸黑”到“透视”:AORO A23热成像防爆手机如何改变工业检测?
在工业检测领域,传统的检测手段常因效率低下、精度不足和潜在的安全风险而受到诟病。随着科技的不断进步,一种新兴的检测技术——红外热成像技术,正逐渐在该领域崭露头角。近期,小编对一款集成红外热成像技术的AORO A23防爆手机进…...
让你的 IDEA 使用更流畅 | IDEA内存修改
随着idea使用越来越频繁,笔者最近发现使用过程中有时候会出现卡顿现象,例如,启动软件变慢,打开项目的速度变慢等: 因此如果各位朋友觉得最近也遇到了同样的困惑,不妨跟着笔者一起来设置IDEA的内存大小吧~ …...
docker run 命令解析
docker run 命令解析 docker run 命令用于从给定的镜像启动一个新的容器。这个命令可以包含许多选项,下面是一些常用的选项: -d:后台运行容器,并返回容器ID;-i:以交互模式运行容器,通常与 -t …...
[Unity Demo]从零开始制作空洞骑士Hollow Knight第十七集:制作第一个BOSS苍蝇之母
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、战斗场景Battle Scene相关逻辑处理 1.防止玩家走出战斗场景的门2.制作一个简单的战斗场景二、制作游戏第一个BOSS苍蝇之母 1.导入素材和制作相关动画2.制作…...
【Nginx系列】499错误
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
Springboot项目控制层注释
Springboot主流的 ----------------------- 简略写法 package com.dx.wlmq.controller;import com.dx.wlmq.domain.Address; import com.dx.wlmq.service.AddresssService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.b…...
从Docker容器中备份整个PostgreSQL
问题 现在需要从Docker容器中备份整个PostgreSQL后,然后,使用备份文件在另外一个pg的docker容器中恢复过来。 步骤 备份旧容器中的PG # 登录到旧的PG容器中 docker exec -it postgres bash # 备份数据库 pg_dumpall -c -U postgres > dump_date %…...
从小需求看大格局:如何用技术智慧赢得客户信任
时间:2024年 10月 26日 作者:小蒋聊技术 邮箱:wei_wei10163.com 微信:wei_wei10 音频:从小需求看大格局:如何用技术智慧赢得客户信任 欢迎大家回到“小蒋聊技术”,这是一个不只是教你如何写…...
模型 支付矩阵
系列文章 分享 模型,了解更多👉 模型_思维模型目录。策略选择的收益分析工具。 1 支付矩阵的应用 1.1 支付矩阵在市场竞争策略分析中的应用 支付矩阵是一种强大的决策工具,它在多个领域的应用中都发挥着重要作用。以下是一个具体的应用案例…...
为个人开源项目寻找高性价比大模型API的选型与实践
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为个人开源项目寻找高性价比大模型API的选型与实践 对于个人开发者或学生而言,运营一个GitHub开源项目常常需要在有限的…...
基于大语言模型与RAG的AI小说生成:从技术原理到工程实践
1. 项目概述:当AI开始“阅读”与“创作”最近在内容创作和小说爱好者圈子里,一个名为“auto-novel”的项目引起了我的注意。简单来说,这是一个利用人工智能技术,实现从“阅读”现有小说到“模仿创作”新内容的自动化工具。它的核心…...
2026届学术党必备的六大降重复率平台推荐榜单
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 令AI精确执行任务的基础,是下达精准的指令,此即降AI指令。降AI指令专…...
告别启动盘识别难题:手把手教你搞定CentOS 7在SR650上的UEFI启动与自定义分区(含/dev/sdX查找技巧)
告别启动盘识别难题:手把手教你搞定CentOS 7在SR650上的UEFI启动与自定义分区(含/dev/sdX查找技巧) 在服务器运维领域,系统安装看似基础却暗藏玄机。特别是当面对企业级硬件如Lenovo SR650时,UEFI启动模式与传统BIOS的…...
【独家】Lindy内部SLO白皮书泄露:自主工作流SLA达标率低于99.95%的5个致命信号
更多请点击: https://intelliparadigm.com 第一章:Lindy AI Agent自主工作流的核心架构与SLO哲学 Lindy AI Agent 的核心架构基于“自治闭环”(Autonomous Closed Loop)范式,将任务规划、工具调用、状态反馈与自校准能…...
初创公司如何利用Taotoken快速构建AI产品原型
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 初创公司如何利用Taotoken快速构建AI产品原型 对于资源有限的初创团队而言,验证产品想法、快速推出原型是生存和发展的…...
泰拉瑞亚整合包下载灾厄大杂烩整合包2026最新版下载
1. 游戏基础介绍 《泰拉瑞亚》是一款经典的二维像素风格沙盒冒险游戏。游戏拥有极高的自由度,玩家可以自由探索地图、收集资源、建造房屋、打造装备、挑战BOSS。凭借自由开放的玩法、丰富的道具体系和独特的冒险氛围,这款游戏长久以来备受玩家喜爱。原版…...
开放-构建-创新-连接:AMD AI开发者日即将登陆上海
近日,AMD宣布其面向AI 开发者的年度技术盛会2026年AMD AI 开发者日 (AMD AI DevDay 2026) 将于 5 月 19 日在上海前滩香格里拉酒店举行,AMD 董事会主席兼首席执行官 Lisa Su 博士也将出席并发表演讲。 本着“开放-构建-创新-连接”的理念,本…...
Cursor插件实现网页数据AI就绪:从智能抓取到实时搜索的完整方案
1. 项目概述:将任意网页转化为AI就绪数据的Cursor插件 如果你经常用Cursor写代码、做研究,或者处理网络数据,那你肯定遇到过这样的场景:看到一个网页,想把里面的内容扒下来,整理成结构化的Markdown或者JSO…...
想转行AI?大模型4大热门方向深度解构!小白也能收藏的进阶指南
AI大模型领域岗位需求激增,人才缺口超500万。本文深度解析大模型4大热门方向:算法研发与模型预训练(门槛高,偏研究)、模型对齐与后训练优化(岗位增长快,数据驱动)、推理工程与模型部…...
