rtl仿真器-verilator安装和测试

news2024/11/17 3:52:15

安装

查看官网安装说明页
https://verilator.org/guide/latest/install.html
1.ubuntu 源已经加好了,直接用命令安装
在这里插入图片描述2. 编译源码安装:
sudo apt-get install git perl python3 make autoconf g++ flex bison ccache
sudo apt-get install libgoogle-perftools-dev numactl perl-doc
sudo apt-get install libfl2 # Ubuntu only (ignore if gives error)
sudo apt-get install libfl-dev # Ubuntu only (ignore if gives error)
sudo apt-get install zlibc zlib1g zlib1g-dev # Ubuntu only (ignore if gives error)

git clone https://github.com/verilator/verilator # Only first time

unset VERILATOR_ROOT # For bash

cd verilator
autoconf
./configure
make -j nproc # Build Verilator itself (if error, try just ‘make’,或者手动填cpu 核数-1)
sudo make install
安装GTKWave 看波形
sudo apt install gtkwave
= 功能测试用例
rtl
adder.v

module adder (
input a,b,
output [1:0] sum
);
assign sum=a+b;
endmodule
测试用例
sim_main.cpp

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

#include “Vadder.h” //adder.v会被编译成Vadder.h
#include “verilated.h”

#include “verilated_vcd_c.h” //可选,如果要导出vcd则需要加上

int main(int argc, char** argv) {
VerilatedContext* contextp = new VerilatedContext;
contextp->commandArgs(argc, argv);
Vadder* adder = new Vadder{contextp};

VerilatedVcdC* tfp = new VerilatedVcdC; //初始化VCD对象指针
contextp->traceEverOn(true); //打开追踪功能
adder->trace(tfp, 0); //
tfp->open("wave.vcd"); //设置输出的文件wave.vcd

int i=20;
while (!contextp->gotFinish() && i>=0) {
    int a = rand() & 1;
    int b = rand() & 1;
    adder->a = a;
    adder->b = b;
    adder->eval();
    printf("a = %d, b = %d, sum = %d\n", a, b, adder->sum);

    tfp->dump(contextp->time()); //dump wave
    contextp->timeInc(1); //推动仿真时间

    assert(adder->sum == a + b);

    i--;
}
delete adder;
tfp->close();
delete contextp;
return 0;

}

== 编译命令
verilator -Wall adder.v sim_main.cpp --cc --trace --exe --build

== 仿真
cd obj_dir
./Vadder

== 看波形
gtkwave wave.vcd在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FPN和PAN的内容及区别

FPN和PAN都是用于解决在目标检测中特征金字塔网络(FPN)在多尺度检测任务上的不足的方法。下面分别详细介绍一下它们的原理和区别。 FPN FPN全称Feature Pyramid Network&#xff0c;是由FAIR在2017年提出的一种处理多尺度问题的方法。FPN的主要思路是通过构建金字塔式的特征图…

Hadoop入门篇02---HDFS学习与简单使用

Hadoop入门篇02---HDFS学习与简单使用 存储系统概念认识硬盘,RAID小结 存储架构DAS&#xff0c;NAS&#xff0c;SAN对比 文件系统 大数据存储大数据存储面临的问题如何解决小结 HDFSHDFS的起源和发展HDFS的设计目标HDFS的应用场景HDFS的特性命令行实践常用命令 Java客户端API使…

双向带头循环链表

双向带头循环链表 1.前言2.带头双向循环链表的初始化3.创建一个哨兵位头节点4.链表的打印5.malloc函数创建节点5.链表的尾插6.链表的尾删7.链表的头插8.链表的头删9.链表的查找10.链表任意位置插入&#xff08;在给点定位置的前面插入&#xff09;11.链表任意位置删除12.空间释…

IPWorks Bluetooth ! IPWorks BLE 2022 C++ Edition Crack

蓝牙库-IPWorks Bluetooth ! IPWorks BLE 2022 C Edition 一个蓝牙低功耗组件库&#xff0c;提供对 BLE 操作的直接访问。IPWorks BLE 组件提供简单的服务发现和对支持 BLE 的设备的访问。 最新的 IPWorks BLE 现已推出&#xff01;最新版本的 IPWorks BLE 具有现代化和简化的…

【MySQL】MySQL 知识点总结

文章目录 前言关系型数据库和非关系型数据库关系型数据库非关系型数据库关系型数据库与非关系型数据库之间的区别 MySQL整体架构SQL 的执行步骤MySQL 的架构图示连接器分析优化和执行查询缓存分析器优化器&执行器 存储引擎MyISAM和InnoDB的区别 事务事务的四大特性隔离级别…

【电动车】基于双层凸优化的燃料电池混合动力汽车研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清…

聚观早报 | 巴菲特后悔减持苹果;羊了个羊侵害用户权利被通报;

今日要闻&#xff1a;巴菲特两年前减持苹果是个愚蠢的决定&#xff1b;羊了个羊侵害用户权利被通报&#xff1b;英特尔预计二季度营收同比下滑&#xff1b;陆奇最称中国要先赶上GPT-3.5&#xff1b;任天堂对GitHub展开大规模DMCA行动 巴菲特两年前减持苹果是个愚蠢的决定 在伯…

【Linux】Redis数据库、实例项目搭建redis服务器环境下mysql实现la/nmp架构缓存

一、Redis简介 Redis 是当前互联网世界最为流行的 NoSQL&#xff08;Not Only SQL&#xff09;数据库。NoSQL 在互联网系统中的作用很大&#xff0c;因为 它可以在很大程度上提高互联网系统的性能。 Redis 具备一定持久层的功能&#xff0c;也可以作为一种缓存工具。对于 NoSQL…

【论文复现】基于区块链的分布式光伏就地消纳交易模式研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

盖雅案例入选「首届人力资源服务国际贸易交流合作大会20项创新经验」

近日&#xff0c;首届人力资源服务国际贸易交流合作大会顺利召开。为激励企业在人力资源服务贸易领域不断创新&#xff0c;加快培育对外贸易新业态、新模式&#xff0c;形成人力资源服务领域国际竞争新优势&#xff0c;大会评选出了「首届人力资源服务国际贸易交流合作大会20项…

第2天学习——Docker安装

一、前言 Docker 是一个用于开发、传送和运行应用程序的开放平台。Docker 使您能够将应用程序与基础设施分开&#xff0c;以便您可以快速交付软件。使用 Docker&#xff0c;您可以像管理应用程序一样管理基础设施。通过利用 Docker 的快速交付、测试和部署代码的方法&#xff0…

sqli-labs通关(十四)(十五)(十六)

第十四关 输入1",出现如下报错信息&#xff0c;告诉我们要双引号闭合 所以我们输入 1" or 11# 没有任何返回信息&#xff0c;这一关和十三关一样&#xff0c;利用报错信息爆出数据 1" and extractvalue(1,concat(0x7e,(select database())))# 第十五关 输入1是这…

【软件测试】第二章 黑盒测试

系列文章目录 文章目录 系列文章目录前言第二章 黑盒测试2.1 等价类划分2.2 边界值分析2.3 因果图法2.4 判定表驱动2.5 正交试验法2.6 其他黑盒测试方法2.7 功能性测试总结 总结 前言 第二章 黑盒测试 黑盒测试&#xff1a;功能测试或数据驱动测试测试对象&#xff1a;需求规格…

发布会实录|悠易科技CTO李旸:洞察新引擎 品牌新增长

4月26日&#xff0c;悠易科技LinkFlow对其核心的 “洞察”产品能力进行了升级。作为开场嘉宾&#xff0c;悠易科技CTO李旸做了题为《洞察新引擎 品牌新增长》的精彩分享&#xff0c;为我们阐释了本次发布升级的背景和出发点&#xff0c;帮助我们更好地理解LinkFlow CDP如何借助…

【postgresql】一些函数记录

1、coalesce函数&#xff1a;合并&#xff0c;coalesce(值1&#xff0c;值2&#xff0c;值3……)&#xff0c;返回第一个不为null的值&#xff1b; 2、coalesce和ifnull的区别&#xff0c;ifnull只有两个参数&#xff0c;返回第一个不为null的参数 3、if和casewhen的区别&…

信息安全评估

安全评估基础 概念、作用、安全评估标准 安全评估基本概念 什么是安全评估 针对潜在影响资产正常执行其职能的行为产生干扰或者破坏的因素进行识别、评价的过程 对安全评估的理解 狭义指对一个具有特定功能的工作系统中固有的或潜在的危险及其严重程度所进行的分析与评估&a…

通用路由封装协议GRE

通用路由封装协议原理 通用路由封装协议GRE(Generic Routing Encapsulation)可以对某些网络层协议(如IPX、ATM、IPv6、AppleTalk等)的数据报文进行封装,使这些被封装的数据报文能够在另一个网络层协议(如IPv4)中传输。 GRE提供了将一种协议的报文封装在另一种协议报文中…

国产AI大模型酣战,科大讯飞打响“智慧涌现”第一枪

配图来自Canva可画 ChatGPT问世半年之久&#xff0c;人与AI“你问我答”的游戏热度不降反升&#xff0c;AI大模型技术需求也随之水涨船高&#xff0c;成为科技企业重点关注的方向。 在海外&#xff0c;OpenAI、谷歌、微软的AI大模型战争正打得火热&#xff1b;在国内&#xf…

PowerShell系列(二):PowerShell和Python之间的差异介绍

目录 1、Python定义 2、Python用途 4、PowerShell用途 5、PowerShell和Python对比 5.1 共同点 5.2 不同点 6、总结 今天给大家聊聊PowerShell和Python之间有哪些共同之处&#xff0c;各自有哪些优势&#xff0c;希望对运维的朋友了解两种语言能提供一些有用的信息。 1、Python定…

Unit 为啥还能当函数参数?面向实用的 Kotlin Unit 详解

视频先行 下面是视频内容的脚本文案原稿分享。 文案原稿 很多从 Java 转到 Kotlin 的人都会有一个疑惑&#xff1a;为什么 Kotlin 没有沿用 Java 的 void 关键字&#xff0c;而要引入这个叫 Unit 的新东西&#xff1f; // Java public void sayHello() {System.out.println(&qu…