Chisel学习笔记(1)——Chisel安装与Verilog代码仿真

参考链接:

https://www.chisel-lang.org/docs/installation

使用Chisel语言编写硬件描述语言,相比于使用Verilog会更加地灵敏快捷,Coding效率更高,但似乎debug会出现一些小问题。但新工具还是要尝试一下才知道好不好用。

1 安装Chisel及生成Verilog代码

1、安装Scala CLI:

https://scala-cli.virtuslab.org/install/

Scala CLI安装的同时会自动下载和管理Chisel的依赖,包括JDK等等。如果是更加复杂的工程需要用户自行安装JDK和构建工具。

2、下载Chisel Scala CLI例程:

curl -O -L https://github.com/chipsalliance/chisel/releases/latest/download/chisel-example.scala

下载情况如下:

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  CurrentDload  Upload   Total   Spent    Left  Speed0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     00     0    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0
100   947  100   947    0     0    421      0  0:00:02  0:00:02 --:--:--     0

3、使用Scala CLI编译并运行例程:

scala-cli chisel-example.scala

运行结果:

Downloading JVM temurin:17
Downloading compilation server 1.5.17-sc-2
Starting compilation server
Downloading compiler plugin org.chipsalliance:::chisel-plugin:6.4.0
Downloading Scala 2.13.12 compiler
Downloading Scala 2.13.12 bridge
Downloading 2 dependencies
Compiling project (Scala 2.13.12, JVM (17))
Compiled project (Scala 2.13.12, JVM (17))
// Generated by CIRCT firtool-1.62.0
module Foo(input        clock,reset,a,b,c,d,e,f,input  [7:0] foo,bar,output [7:0] out
);reg [7:0] myReg;always @(posedge clock) beginif (reset)myReg <= 8'h0;else if (d & e & f)myReg <= bar;else if (a & b & c)myReg <= foo;end // always @(posedge)assign out = myReg;
endmodule

Chisel Scala CLI例程是一个简单、单文件的Chisel例程,运行后Verilog代码会显示在命令行窗口中。

  • 当遇到更加复杂的工程,一般使用SBT或者Mill等构建工具进行编译,但依旧建议使用Scala CLI来进行实验和编写片段。

4、打开chisel-example.scala文件,查看内部代码:

//> using scala "2.13.12"
//> using dep "org.chipsalliance::chisel:6.4.0"
//> using plugin "org.chipsalliance:::chisel-plugin:6.4.0"
//> using options "-unchecked", "-deprecation", "-language:reflectiveCalls", "-feature", "-Xcheckinit", "-Xfatal-warnings", "-Ywarn-dead-code", "-Ywarn-unused", "-Ymacro-annotations"import chisel3._
// _root_ disambiguates from package chisel3.util.circt if user imports chisel3.util._
import _root_.circt.stage.ChiselStageclass Foo extends Module {val a, b, c = IO(Input(Bool()))val d, e, f = IO(Input(Bool()))val foo, bar = IO(Input(UInt(8.W)))val out = IO(Output(UInt(8.W)))val myReg = RegInit(0.U(8.W))out := myRegwhen(a && b && c) {myReg := foo}when(d && e && f) {myReg := bar}
}object Main extends App {println(ChiselStage.emitSystemVerilog(gen = new Foo,firtoolOpts = Array("-disable-all-randomization", "-strip-debug-info")))
}

更详细的Windows或Linux安装步骤请查阅:

https://www.chisel-lang.org/docs/installation

2 Verilog仿真

2.1 安装Verilator

Verilator是一款高性能、开源的Verilog仿真软件。该软件不使用传统方法进行仿真,而是在编译时将Verilog代码转译成C++语言。因此仿真器需要C++编译器至少支持C++14和Make,Windows上还需要部分Perl脚本。

Windows上使用Verilator较为麻烦,这里使用VMware虚拟机运行Ubuntu 20.04,在Linux环境下安装Verilator。

1、安装依赖包:

sudo apt-get install git help2man 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)

2、git clone 模拟器程序

git clone https://github.com/verilator/verilator

3、查看版本:

cd verilator
git pull         # Make sure git repository is up-to-date
git tag          # See what versions exist
#git checkout master      # Use development branch (e.g. recent bug fixes)
#git checkout stable      # Use most recent stable release
#git checkout v{version}  # Switch to specified release version

4、构建:

autoconf         # Create ./configure script
./configure      # Configure and create Makefile
make -j `nproc`  # Build Verilator itself (if error, try just 'make')

这一步时间较长,构建结束可以看到的以下内容:

在这里插入图片描述

5、通过运行自检来检查编译:

make test

在这里插入图片描述

6、安装:

sudo make install

在这里插入图片描述

2.2 安装GTKWave

2.2.1 安装方法1(本人安装失败)

链接:

https://gtkwave.sourceforge.net/

1、安装依赖包:

sudo apt-get install tcl tk tcl-dev tk-dev

如果/usr/lib/目录下有tclConfig.shtkConfig.sh,或者tcl8.6tk8.6文件夹内部有相关文件,才可以接下来的操作。
在这里插入图片描述
2、安装gperf、libbz2等依赖包:

sudo apt-get install gperf libbz2-dev lzma

3、安装xz-devel:

sudo apt-get install xz-devel

如果这个依赖包下载不下来,./configure添加--disable-xz后缀跳过。
4、尝试使用./configure命令:

sudo ./configure --prefix=/usr --with-tcl=/usr/lib --with-tk=/usr/lib

xz不通过,尝试以下命令:

sudo ./configure --prefix=/usr --with-tcl=/usr/lib --with-tk=/usr/lib --disable-xz

依赖追踪失败,尝试以下命令:

sudo ./configure --prefix=/home/ren/gtkwave --with-tcl=/usr/lib --with-tk=/usr/lib --disable-xz --disable-dependency-tracking

接下来一步make,程序报错,原因未知。

2.2.2 安装方法2(本人安装成功)

包管理器安装gtkwave:

sudo apt-get install gtkwave

3 一生一芯相关依赖包

需要安装如下程序:

sudo apt-get install build-essential man gcc-doc gdb git libreadline-dev libsdl2-dev llvm llvm-dev llvm-11 llvm-11-dev

4 安装中文输入法

参考链接:

https://blog.csdn.net/qq_42257666/article/details/128174474

安装输入法包:

sudo apt-get install ibus ibus-gtk ibus-gtk3 ibus-pinyin

重新启动:

sudo reboot

打开Settings,Region & Language,点击加号+添加输入源,找到Chinese。

按下键盘上的Win+Space键就可以切换输入法了,如果没用,就点开Input Sources右侧的小齿轮,查看Keyboard Shortcuts。

在这里插入图片描述

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

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

相关文章

构建RAG+nebula graph(知识图谱KG)

目标&#xff1a;通过利用 LlamaIndex 和 NebulaGraph 为费城费城人队&#xff08;Philadelphia Phillies&#xff09;构建一个RAG流程&#xff0c;深入探讨知识图谱。 NebulaGraph 是市场上最好的知识图谱数据库之一。它是开源的、分布式的&#xff0c;并且能够处理具有亿万边…

【linux】网络基础(2)——udp协议

文章目录 引言udp协议的特点udp的头部结构UDP的工作原理简单的UDP网络程序套接字的认识udp服务端代码udp客户端代码服务端运行 引言 用户数据报协议&#xff08;User Datagram Protocol, UDP&#xff09;是一种无连接的传输层协议。它是因特网协议家族的一部分&#xff0c;定义…

C语言的数据结构:图的基本概念

前言 之前学过了其它的数据结构&#xff0c;如&#xff1a; 集合 \color{#5ecffd}集合 集合 —— 数据元素属于一个集合。 线型结构 \color{#5ecffd}线型结构 线型结构 —— 一个对一个&#xff0c;如线性表、栈、队列&#xff0c;每一个节点和其它节点之间的关系 一个对一个…

超酷的打字机效果?分享 1 段优质 CSS 代码片段!

大家好&#xff0c;我是大澈&#xff01; 本文约 900 字&#xff0c;整篇阅读约需 1 分钟。 每日分享一段优质代码片段。 今天分享一段优质 CSS 代码片段&#xff0c;实现打字机般的效果或其他类似的离散动画效果。 老规矩&#xff0c;先阅读代码片段并思考&#xff0c;再看代…

Python入门 2024/7/2

目录 格式化的精度控制 字符串格式化 对表达式进行格式化 小练习&#xff08;股票计算小程序&#xff09; 数据输入 布尔类型和比较运算符 if语句 小练习&#xff08;成人判断&#xff09; if-else语句 if-elif-else语句 练习&#xff1a;猜猜心里数字 嵌套语句 猜…

Pytest+Allure+Yaml+PyMsql+Jenkins+Gitlab接口自动化(四)Jenkins配置

一、背景 Jenkins&#xff08;本地宿主机搭建&#xff09; 拉取GitLab(服务器)代码到在Jenkins工作空间本地运行并生成Allure测试报告 二、框架改动点 框架主运行程序需要先注释掉运行代码&#xff08;可不改&#xff0c;如果运行报allure找不到就直接注释掉&#xff09; …

offer7.重建二叉树

根据二叉树的前序遍历和中序遍历重建二叉树 问题描述&#xff1a;输入某二叉树的前序遍历和中序遍历的结果&#xff0c;请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如&#xff0c;输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3…

二叉树之遍历OJ(含迭代)

目录 1.递归实现 前言 &#xff08;1&#xff09;前序遍历 &#xff08;2&#xff09;中序遍历 &#xff08;3&#xff09;后序遍历 2.迭代实现 前言 &#xff08;1&#xff09;前序遍历 方法一 方法二 &#xff08;2&#xff09;中序遍历 方法一 方法二 &#x…

BIOS设置与系统分区

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 目录 一BIOS 1破解密码的前提 2B…

《植物大战僵尸融合版》1.0预览版下载以及安装教程

游戏介绍 《植物大战僵尸融合版》是一款基于经典游戏《植物大战僵尸》的创新改版&#xff0c;由B站UP主蓝飘飘fly开发。这款游戏的特色在于引入了植物融合系统&#xff0c;允许玩家将两种不同的植物合体&#xff0c;创造出具有新特性的植物&#xff0c;从而带来全新的策略对战…

Canvas:掌握贝塞尔曲线与封装路径

想象一下&#xff0c;用几行代码就能创造出如此逼真的图像和动画&#xff0c;仿佛将艺术与科技完美融合&#xff0c;前端开发的Canvas技术正是这个数字化时代中最具魔力的一环&#xff0c;它不仅仅是网页的一部分&#xff0c;更是一个无限创意的画布&#xff0c;一个让你的想象…

文件夹加密软件推荐,这款软件满足各种加密需求

文件夹加密是保护电脑数据安全的重要方式&#xff0c;而在加密文件夹时&#xff0c;我们需要选择专业的文件夹加密软件。下面小编就为大家推荐一款优秀的文件夹加密软件&#xff0c;满足你的各种文件夹加密需求。 文件夹加密超级大师 由于文件夹储存的数据不同&#xff0c;比如…

MCU 是什么?一文了解MCU 产业

MCU&#xff08;Microcontroller Unit&#xff09;&#xff0c;中文名为“微控制器单元”、“单片微型计算机”。MCU 将中央处理器&#xff08;CPU&#xff09;、内存&#xff08;RAM&#xff09;、输入 / 输出界面&#xff08;I/O&#xff09;等等一大堆东西&#xff0c;全部整…

数据结构——带环链表、循环队列问题

1.带环链表问题 1.1给定一个链表判断其是否带环 解决思路&#xff1a;利用快慢指针法&#xff0c;快指针一次走两步慢指针一次走一步&#xff0c;从链表起始位置遍历链表&#xff0c;如果链表带环&#xff0c;则快慢指针一定会在环中相遇&#xff0c;否则快指针先到达链表末尾…

Kafka-服务端-副本同步-源码流程

杂 在0.9.0.0之前&#xff0c;Kafka提供了replica lag.max.messages 来控制follower副本最多落后leader副本的消息数量&#xff0c;follower 相对于leader 落后当超过这个数量的时候就判定该follower是失效的&#xff0c;就会踢出ISR&#xff0c;这里的指的是具体的LEO值。 对…

软考高级之系统分析师及系统架构设计师备考过程记录

0x00 前言 考了两次系分&#xff0c;一次架构&#xff0c;今年系分终于上岸。 在此记录备考过程和一些体会 先说我自己的情况&#xff0c;我本硕都是计算机科班出身&#xff0c;本科的时候搞Java后端开发&#xff0c;硕士搞python和深度学习&#xff0c;但工作之后就基本没碰过…

洞鉴-产品部署及其功能

网络策略&#xff1a;安装&#xff1a; 资源准备 ⼀、系统安装包 https://chaitin-release.oss-cnbeijing.aliyuncs.com/release%2Ff%2F66600aac66bcea13c086319c?Expires1719310707 &OSSAccessKeyIdLTAI5tBpSz7iLYLH51NrVx22&SignaturesOpuVYuKpm9ZBoEzfwiRlJ fLrhQ…

STM32 HAL库读取ID

在stm32f1xx_hal.c文件中由读取ID号的子函数&#xff0c;不同单片机的UID_BASE不同&#xff0c;本单片机用的是STM32F103CBT6,跳转之后可以看到地址为&#xff1a;0x1FFFF7E8 在程序中只需定义一个数组调用读取ID的函数即可 uint32_t UID[3]; while(1) { UID[0] HAL_GetUIDw0…

C盘清理和管理

本篇是C盘一些常用的管理方法&#xff0c;以及定期清理C盘的方法&#xff0c;大部分情况下都能避免C盘爆红。 C盘清理和管理 C盘存储管理查看存储情况清理存储存储感知清理临时文件清理不需要的 迁移存储 磁盘清理桌面存储管理应用存储管理浏览器微信 工具清理 C盘存储管理 查…

VUE3+ AntV Select 选择器:mode=“multiple“和mode=“tags“的区别是什么

文章目录 VUE3 AntV Select 选择器&#xff1a;mode"multiple"和mode"tags"的区别是什么一、解释二、对比演示 VUE3 AntV Select 选择器&#xff1a;mode"multiple"和mode"tags"的区别是什么 一、解释 “mode” 是一个参数&#xff…