Verilator仿真环境搭建

Verilator简介与使用_Hwang_shuo的博客-CSDN博客

Verilator是一种开源的Verilog/SystemVerilog仿真器,可用于编译代码以及代码在线检查,Verilator能够读取Verilog或者SystemVerilog文件,并进行lint checks(基于lint工具的语法检测),并最终将其转换成C++的源文件.cpp和.h。

Verilator不直接将Verilog HDL转换为C++或者SystemC,反之Verilator将代码编译成更快的优化过的并且支持多线程的模型,该模型被依次包装在(wrapped)在C++/SystemC模型中。这样就生成一个编译的Verilog模型,其功能和Verilog是一致的,但效率由于基于C++即使是单线程模型也可以10倍快于SystemC,100倍快于基于解释Verilog的仿真器,并且通过多线程可以进一步加速。

Verilator的作用是将某些Verilog或System Verilog代码翻译成可编译的C++或System C代码,或者库,之后再编写合适的驱动代码也就是sim_main.cpp,一同使用C编译器进行编译,由此得到可执行的程序,来对Verilog或System Verilog代码进行仿真,得到波形图等仿真结果。

其详细的执行过程如下:

​Verilator通过读取指定的 Verilog 或 System Verilog 代码、对其执行 lint 静态代码检查以及可选地插入断言检查和覆盖分析点。它可以输出单线程或多线程的 .cpp 和 .h 文件,即“Verilated(经过验证的)”代码。

​用户需要编写的一个C++ / System C Wrapper file 封装文件,这个文件会定义main()函数,它会将“Verilated”模型实例化为C++/System C对象。

​用户的Wrapper file、Verilator创建的文件、Verilator提供的“运行时的库”和System C库,这些 C++ / System C 文件之后会由 C++ 编译器 (gcc / clang / MSVC++) 统一进行编译。生成的可执行文件来执行设计仿真。Verilator 还支持将其生成的库(可选加密)链接到其他模拟器。

生成的可执行文件将在“模拟运行”期间执行实际的模拟。还可以生成可查看的设计波形轨迹。

Verilator 并非简单地将 Verilog HDL 转换为 C++ 或 System C。Verilator会将代码编译成一个优化更快的和可选的线程分区模型,该模型又包装在 C++/ System C 模块中。结果就是一个编译好的 Verilog 模型,即使在单线程上的执行速度也比独立的System C快10倍以上,在单线程上的执行速度比解释过的Verilog模拟器(如Icarus Verilog)快100倍左右。多线程可能会带来2-10倍的加速(比解释的模拟器快200-1000倍)。 Verilator 通常具有与闭源 Verilog 模拟器(Carbon Design Systems Carbonator、Modelsim、Cadence Incisive/NC-Verilog、Synopsys VCS、VTOC 和 Pragmatic Cver /CVC)相似或更好的性能。

pre-install:

sudo apt install clang iverilog gtkwave help2main git perl python3 make autoconf g++ flex bison ccache libgoogle-perftools-dev numactl perl-doc libfl2 libfl-dev zlibc zlib1g zlib1g-dev

clone:

$ git clone https://github.com/verilator/verilator
正克隆到 'verilator'...
remote: Enumerating objects: 74926, done.
remote: Counting objects: 100% (222/222), done.
remote: Compressing objects: 100% (139/139), done.
remote: Total 74926 (delta 105), reused 150 (delta 83), pack-reused 74704
接收对象中: 100% (74926/74926), 31.84 MiB | 30.00 KiB/s, 完成.
处理 delta 中: 100% (63697/63697), 完成.
zlcao@zlcao-Vostro-3268:~/sim$ cd verilator/
zlcao@zlcao-Vostro-3268:~/sim/verilator$ git checkout stable
分支 'stable' 设置为跟踪来自 'origin' 的远程分支 'stable'。
切换到一个新分支 'stable'
$ autoconf
$ unset VERILATOR_ROOT
$ autoconf 
$ ./configure
$ make -j8
$ make install

testing:

cd /home/zlcao/sim/verilator/examples/make_tracing_c && make

 see waveform


End

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/62316.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

uniapp使用阿里图标

效果图: 前言 随着uniApp的深入人心,我司也陆续做了几个使用uniapp做的移动端跨平台软件,在学习使用的过程中深切的感受到了其功能强大和便捷,今日就如何在uniapp项目中使用阿里字体图标的问题为大家献上我的一点心得&#xff0…

HCIP IPV6

一、IPV6升级特点联系和区别 IPV4--->IPV6 1、全球单播地址 ---- IPV4地址下的公有地址 V6下没nat 2、可聚合性(IANA组织对全球的地址进行合理分配) 3、多宿主---一个物理接口可以同时拥有多个不同网段的IPV6地址;但不同接口不能在…

神码ai伪原创工具【php源码】

大家好,小编为大家解答python炫酷烟花表白源代码的问题。很多人还不知道html代码烟花特效python,现在让我们一起来看看吧! 火车头采集ai伪原创插件截图: 目录 前言 环境准备 代码编写 效果展示 前言 Python实现浪漫的烟花特效 现在…

一 关于idea如何在svn进行项目下载并运行成功

安装svn客户端 如图 安装时请选择该选项(Will be installed on local hard drive)并选择自己想要安装的目录路径 如图 svn安装成功 如图 注意 安装完成后,使用svn进行一次checkout的项目导出完成以上五步时&…

PHP8条件控制语句-PHP8知识详解

我们昨天说了流程控制的结构有顺序结构、选择结构和循环结构。选择结构就是条件结构。 条件控制语句就是对语句中不同条件的值进行判断,进而根据不同的条件执行不同的语句。 在本文中,学习的是if语句、if…else语句、if…elseif语句和switch语句。 1、…

Clash 意外退出后 chrome / google 谷歌 浏览器无法连接互联网

解决方案: 以管理员模式打开命令行,输入:netsh winsock reset ,然后重启电脑 如果还不行的话, 在 chromevs中选中 设置>隐私和安全>安全>使用安全 dns> 使用您当前的服务提供商 即可

flask中写一个基础的sqlHelper类

写一个SQLHelper类: from flask_sqlalchemy import SQLAlchemydb SQLAlchemy()class SQLHelper:staticmethoddef add(record):db.session.add(record)return SQLHelper.session_commit()staticmethoddef add_all(records):db.session.add_all(records)return SQLH…

【Spring Cloud 四】Ribbon负载均衡

Ribbon负载均衡 系列文章目录背景一、什么是Ribbon二、为什么要有Ribbon三、使用Ribbon进行负载均衡服务提供者A代码pom文件yml配置文件启动类controller 服务提供者Bpom文件yml配置文件启动类controller 服务消费者pom文件yml文件启动类controller 运行测试 四、Ribbon的负载均…

【Spring Boot】Spring Boot 集成 RocketMQ 实现简单的消息发送和消费

文章目录 前言基本概念消息和主题相关发送普通消息 发送顺序消息RocketMQTemplate的API介绍参考资料: 前言 本文主要有以下内容: 简单消息的发送顺序消息的发送RocketMQTemplate的API介绍 环境搭建: RocketMQ的安装教程:在官网…

js-3:DOM常见的操作有哪些?

1、DOM 文档对象模型(DOM)是HTML和XML文档的编程接口。 它提供了对文档的结构化的表述,并定义了一种方式,可以使从程序中对该结构进行访问,从而改变文档的结构,样式跟内容。 任何HTML和XML文档都可以用DOM表…

解决object转换Date问题

文章目录 解决object转换Date问题源代码List<Object>转换List<Date>问题 解决object转换Date问题 源代码 /*** 解决object与Date转换问题*/Testpublic void t4() {Object o new Date();String formatDate DateFormatUtils.format((Date) o, com.alibaba.excel.u…

uniapp-疫情应急管理系统学生端

1 疫情资讯展示 <template><view class"container"><uni-section title"自定义卡片内容" type"line"><uni-card title"基础卡片" class"card-box" v-for"(item,index) in epidemicNewsList"…

CDN安全面临的问题及防御架构

CDN安全 SQL注入攻击&#xff08;各开发小组针对密码和权限的管理&#xff0c;和云安全部门的漏洞扫描和渗透测试&#xff09; Web Server的安全&#xff08;运营商和云安全部门或者漏洞纰漏第三方定期发布漏洞报告修复&#xff0c;例如&#xff1a;nginx版本号和nginx resol…

MONGODB ---- Austindatabases 历年文章合集

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友会分到2群&#xff08;共…

react中hooks的理解与使用

一、作用 我们知道react组件有两种写法一种是类组件&#xff0c;另一种是函数组件。而函数组件是无状态组件&#xff0c;如果我们要想改变组件中的状态就无法实现了。为此&#xff0c;在react16.8版本后官方推出hooks&#xff0c;用于函数组件更改状态。 二、常用API 1、use…

websocket+node实现直播(弱鸡版)

心血历程 这部分主要是写在写这些的时候遇到的问题以及换思路的过程&#xff0c;可以之间看正文 在之前我也写过直播功能&#xff0c;并且与websocket相结合实现了直播弹幕。只不过直播是使用的腾讯云的&#xff0c;而不是手写的直播推流拉流&#xff0c;这次又有一个新的项目…

【C# 基础精讲】C# 开发环境搭建(Visual Studio等)

安装C#开发环境是开始学习和使用C#编程的第一步。目前&#xff0c;最常用的C#开发环境是Microsoft Visual Studio&#xff0c;它是一套强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;提供了丰富的工具和功能&#xff0c;使开发C#应用程序变得更加便捷。以下是安装…

Redis 和 Mysql 如何保证数据一致性

项目场景&#xff1a; 一般情况下&#xff0c;Redis 用来实现应用和数据库之间读操作的缓存层&#xff0c;主要目的是减少数据库 IO&#xff0c;还可以提升数据的 IO 性能。 如下图所示&#xff0c;这是它的整体架构。 当应用程序需要去读取某个数据的时候&#xff0c;首先会先…

Linux性能学习(4.4):网络_TCP三次握手内核参数优化

文章目录 1 三次握手2 参数优化2.1 tcp_syn_retries--->SYN重传次数2.2 tcp_synack_retries--->ACK重传次数2.3 tcp_retries2--->发送数据失败重传次数2.4 TCP keepalive--->保活机制2.5 tcp_max_syn_backlog/somaxconn--->半/全连接队列长度2.6 tcp_syncookies…

离散化的两种实现方式【sort或者map】

离散化 定义 把无限空间中有限的个体映射到有限的空间中去&#xff0c;以此提高算法的时空效率。通俗的说&#xff0c;离散化是在不改变数据相对大小的条件下&#xff0c;对数据进行相应的缩小。 适用范围&#xff1a;数组中元素值域很大&#xff0c;但个数不是很多。 比如将…