ubuntu16.04安装verilator+systemc并运行测试程序

news2024/11/23 3:21:55

link

Verilator 能够把可综合的(通常不是行为级)的Verilog代码,外加一部分Synthesis,SystemVerilog和一小部分Verilog AMS代码转换成C++或者SystemC代码。Verilator不是一个完整的模拟器(simulator),只是一个编译器(compiler)。

安装verilator

ubuntu16.04系统下面安装verilator非常简单:sudo apt-get install verilator

版本为:

$ verilator --version
Verilator 3.874 2015-06-06 rev verilator_3_872-20-g0d43051

安装systemc


    
  1. $ wget -O systemc- 2.3. 0a.tar.gz http:/ /www.accellera.org/images /downloads/standards /systemc/systemc- 2.3. 0a.tar.gz
  2. $ tar -xzvf systemc- 2.3. 0a.tar.gz
  3. $ cd systemc- 2.3. 0a
  4. $ sudo mkdir -p /usr/local/systemc- 2.3. 0/
  5. $ mkdir objdir
  6. $ cd objdir
  7. $ ../configure --prefix= /usr/local /systemc-2.3.0
  8. $ make
  9. $ sudo make install
  10. $ export SYSTEMC_INCLUDE=/usr /local/systemc- 2.3. 0/ include
  11. $ export SYSTEMC_LIBDIR= /usr/local /systemc-2.3.0/lib-linux64
  12. $ export LD_LIBRARY_PATH= /usr/local /systemc-2.3.0/lib- linux64: $LD_LIBRARY_PATH

别忘记设置三个环境变量SYSTEMC_INCLUDE,SYSTEMC_LIBDIR和LD_LIBRARY_PATH,否则后面第二个例子没法编译。

当然最好是把这三个设置放入.profile或者.bashrc启动文件中。下面给出两个简单的例子来展示Verilator的使用方法

工作目录如下: 


    
  1. user @ubuntu1 :~/verilator $ tree
  2. .
  3. ├── test_our
  4. │   ├── obj_dir
  5. │   ├── our.v
  6. │   └── sim_main.cpp
  7. └── test_our_sc
  8. ├── obj_dir
  9. ├── our.v
  10. ├── sc_main.cpp
  11. ├── sc_main.d
  12. └── sc_main.o

例子 C++ 程序

我们将把这个例子编译成 C++ 程序。


    
  1. mkdir test_our
  2. cd test_our
  3. cat <<EOF >our.v
  4. module our;
  5. initial begin $ display( "Hello World"); $finish; end
  6. endmodule
  7. EOF
  8. cat <<EOF >sim_main.cpp
  9. #include "Vour.h"
  10. #include "verilated.h"
  11. int main(int argc, char** argv, char** env) {
  12. Verilated:: commandArgs(argc, argv);
  13. Vour* top = new Vour;
  14. while (!Verilated:: gotFinish()) { top-> eval(); }
  15. delete top;
  16. exit( 0);
  17. }
  18. EOF

开始用verilator编译这个小例子。

    verilator -Wall --cc our.v --exe sim_main.cpp
    

在 "obj_dir"目录下面将出现源代码。

    ls -l obj_dir
    

然后我们可以编译这些C++源代码

    make -j -C obj_dir -f Vour.mk Vour
    

(Verilator包括缺省编译和链接规则,我们在命令行中使用了 --exe 并且传递了 .cpp 文件。当然你也可以编写你自己的编译规则,就像我们在下一个例子中所做的那样)

现在我们可以运行它了。

    obj_dir/Vour
    

得到程序输出如下:


    
  1. Hello World
  2. - our.v: 2: Verilog $finish

例子 SYSTEMC 程序

这个例子与上面那个相同,只是使用了SystemC。


    
  1. mkdir test_our_sc
  2. cd test_our_sc
  3. cat <<EOF >our. v
  4. module our (clk);
  5. input clk; // Clock is required to get initial activation
  6. always @ (posedge clk)
  7. begin $ display( "Hello World"); $finish; end
  8. endmodule
  9. EOF
  10. cat <<EOF >sc_main.cpp
  11. #include "Vour.h"
  12. int sc_main(int argc, char **argv) {
  13. Verilated:: commandArgs(argc, argv);
  14. sc_clock clk ("clk", 10, 0.5, 3, true);
  15. Vour* top;
  16. top = new Vour( "top");
  17. top-> clk(clk);
  18. while (!Verilated:: gotFinish()) { sc_start( 1, SC_NS); }
  19. delete top;
  20. exit( 0);
  21. }
  22. EOF

现在我们对小程序运行Verilator。

    verilator -Wall --sc our.v
    

然后对它进行编译。


    
  1. cd obj_dir
  2. make -j -f Vour.mk Vour__ALL.a
  3. make -j -f Vour.mk ../sc_main.o verilated.o

接着链接SystemC。


    
  1. export SYSTEMC_LIBDIR=/path/to/where/libsystemc.a/exists
  2. export LD_LIBRARY_PATH= $SYSTEMC_LIBDIR: $LD_LIBRARY_PATH
  3. # Might be needed if SystemC 2.3.0
  4. export SYSTEMC_CXX_FLAGS=-pthread
  5. g++ -L $SYSTEMC_LIBDIR ../sc_main.o Vour__ALL*.o verilated.o \
  6. -o Vour -lsystemc

现在我们可以运行该程序


    
  1. cd ..
  2. obj_dir/Vour

最后我们得到与上述C++例子一样的输出:


    
  1. Hello World
  2. - our.v: 2: Verilog $finish

Enjoy Verilator !!!

 

</article>

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

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

相关文章

打工人必学的法律知识(六)——《劳动法》案例-差绩效不等于「不能胜任工作」

目录 一、差绩效不等于「不能胜任工作」 二、劳动者无条件解除劳动合同的情形 一、差绩效不等于「不能胜任工作」 员工在用人单位等级考核中居于末位等次&#xff0c;不等同于“不能胜任工作”&#xff08;最高人民法院指导案例18号&#xff09; 2005年7月&#xff0c;被告王…

【Linux】Linux多线程(上)

前言 hi~ 大家好呀&#xff0c;欢迎来到我的Linux学习笔记。本篇笔记将会重点从内核结构引入Linux下的线程&#xff0c;理解Linux下线程和进程的相关性和区别&#xff0c;以及线程相关的操作方法&#xff0c;在到之后的线程互斥和线程同步中的条件变量相关概念哦~ Linux进程控…

世界杯数据可视化分析

目录 1.数据来源 2.字段解释 世界杯成绩信息表&#xff1a;WorldCupsSummary 世界杯比赛比分汇总表&#xff1a;WorldCupMatches.csv 世界杯球员信息表&#xff1a;WorldCupPlayers.csv 3.数据分析及可视化 世界杯已经告一段落&#xff0c;作为一个学习大数据的学生&…

CentOS即将停止维护,拥抱阿里“龙蜥“(Anolis OS),VMware安装Anolis OS与介绍

一、前言 大家在自己电脑来进行服务器的一些操作时&#xff0c;基本都是使用CentOS 7或者是CentOS 8&#xff0c;但是2021年底CentOS 8宣布停止了维护&#xff1b;CentOS 7 在2024年6月30日也会停止维护&#xff01; 所以我们是时候换一个操作系统了&#xff0c;经过十几年的…

[319]. 灯泡开关

[319]. 灯泡开关题目算法设计&#xff1a;完全平方数题目 传送门&#xff1a;https://leetcode.cn/problems/bulb-switcher/ 算法设计&#xff1a;完全平方数 问题是有多少灯是亮的。 那怎么样灯才会亮呢&#xff1f; 点偶数次相当于没点&#xff0c;开了又关。只有点奇…

标准库中的string类

深爱学习的你&#xff0c;在很多场景下一定经常和字符串打交道&#xff01; 字符串是以‘\0’结尾的字符合集&#xff0c;C语言中提供了一些库函数来处理字符串,让大家在写代码的过程中方便了许多&#xff1a; 字符串函数_Bug程序员小张的博客-CSDN博客字符串函数https://blog…

基于Simulink的带通BPSK信号调制解调实验报告(含代码和slx文件)

重要声明:为防止爬虫和盗版贩卖,文章中的核心代码和数据集可凭【CSDN订阅截图或公z号付费截图】私信免费领取,一律不认其他渠道付费截图! 摘要 数字相位调制又称为相移键控(Phase Shift Keying,PSK),是一种十分重要的基本数字调制技术,是一种用载波相位表示输入信号…

磨金石教育摄影技能干货分享|有哪些风格独特的摄影作品

1 奋勇向前照片中退却的海浪与冲上岸的海浪交汇拍打&#xff0c;形成大量的白色泡沫。于是画面被平均分成两部分&#xff0c;分割线由左上延伸到右下&#xff0c;一条明显的对角线。也让画面形成对称式的构图&#xff0c;所以照片看着既平衡又美观。作者给照片起名为《奋勇向前…

Docker安装MySQL、MySQL主从复制、双主双从

文章目录Docker安装MySQL新建容器配置,记得 重启加载配置&#xff01;测试MySQL 主从复制原理新增两个mysql,一主一从在主机上在从机上MySQL双主双从必看&#xff01;创建容器在两个主机上在两个从机上问题解决Navicat无法连接MySQL的问题WARNING: IPv4 forwarding is disabled…

计算机网络概况

1 前言计算机网络是指将位于不同地理位置&#xff0c;但具有独立功能的多台设备&#xff0c;通过通信设备和线路连接起来&#xff0c;在网络操作系统&#xff0c;网络管理软件、网络通信协议的协调管理下&#xff0c;实现资源共享和信息传递的计算机系统。简单来说&#xff0c;…

智慧农业灌溉系统-数字农业-农业物联网机井灌溉节水新模式

平升电子智慧农业灌溉系统/农业物联网机井灌溉系统&#xff0c;可实现井电双控&#xff08;以电控水&#xff09;、以电折水、以阀控水等各种形式的地下取水井用水计量监测控制需求&#xff0c;助推农业水价改革实施、高效节水灌溉和地下水超采综合治理&#xff0c;促进节水型社…

Python数学建模问题总结(2)数据可视化Cookbook指南·上

概括总结&#xff1a;一、可视化问题1.不会可视化图标&#xff1b;2.可视化效果不好看&#xff1b;3.数据可视化成果无法得到很好的推广使用。二、可视化原则准确的、有帮助的、可扩展的。三、类型1.随时间变化&#xff1b;2.类别比较图表&#xff1b;3.排名列表&#xff1a;有…

proc文件系统下各参数解析

文章目录一、proc文件系统1.1 /proc/[pid]1.1.1 /proc/[pid]/arch_status1.1.2 /proc/[pid]/attr1.1.2.1 /proc/[pid]/attr/current1.1.2.2 /proc/[pid]/attr/exec1.1.2.3 /proc/[pid]/attr/fscreate1.1.2.4 /proc/[pid]/attr/keycreate1.1.2.5 /proc/[pid]/attr/prev1.1.2.6 /…

【操作系统】 第一章 操作系统概述

文章目录第一章 知识体系1.1 操作系统的基本概念1.1.1 操作系统的概念1.1.2 操作系统的特征1.1.3 操作系统的目标和功能1.2 操作系统的发展历程1.3 操作系统的运行环境1.3.1 处理器的运行模式1.3.2 中断和异常的概念1.3.3 系统调用1.4 操作系统结构1.5 操作系统引导1.6 虚拟机第…

C++进阶 红黑树封装map和set

作者&#xff1a;小萌新 专栏&#xff1a;C进阶 作者简介&#xff1a;大二学生 希望能和大家一起进步&#xff01; 本篇博客简介&#xff1a;使用红黑树封装出map和set 红黑树封装map和set红黑树源代码红黑树模板参数的控制红黑树结点当中存储的数据模板参数仿函数的增加正向迭…

react基础Day04-React原理揭秘React路由基础

React原理揭秘 目标 能够说出React组件的更新机制能够对组件进行性能优化能够说出虚拟DOM和DIff算法 组件更新机制 setState() 的两个作用 修改state更新组件 过程&#xff1a;父组件重新渲染时&#xff0c;也会重新渲染子组件&#xff0c;但只会渲染当前组件子树&#xff…

[Android Studio]查看和修改Android API SDK的配置

&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea; Android Debug&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea; Topic 发布安卓学习过程中遇到问题解决过程&#xff0c;希望我的解决方案可以对小伙伴们有帮助。 &#x1f4cb;笔记目…

高并发系统设计 -- 缓存与数据库一致性问题详细讲解

CAP理论 首先来谈一下数据的一致性这个话题&#xff0c;所谓的一致性就是数据保持一致&#xff0c;在分布式系统中&#xff0c;可以理解为多个节点中的数据的值是一致的。 强一致性&#xff1a;这种一致性级别是最符合用户直觉的&#xff0c;它要求系统写入什么&#xff0c;读…

steam搬砖项目,信息差赚钱,内含全部讲解

Steam平台就是一个全球的游戏平台&#xff0c;搬砖主要是搬的一款火遍全球的游戏CSGO的装备和饰品。CS听说过吧&#xff0c;这款游戏就是CS的一个系列。&#xff08;通俗易懂的理解就是&#xff0c;从国外steam游戏平台购买装备&#xff0c;再挂到国内网易buff平台上进行售卖。…

【TypeScript】TS进阶-装饰器(九)

&#x1f431;个人主页&#xff1a;不叫猫先生 &#x1f64b;‍♂️作者简介&#xff1a;前端领域新星创作者、阿里云专家博主&#xff0c;专注于前端各领域技术&#xff0c;共同学习共同进步&#xff0c;一起加油呀&#xff01; &#x1f4ab;系列专栏&#xff1a;vue3从入门到…