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

news2024/10/6 19:23:09

参考链接:

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  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  0     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) begin
    if (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.ChiselStage

class 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 := myReg

  when(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.coloradmin.cn/o/1885999.html

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

相关文章

武汉星起航:跨境电商领域的领航者,助力合作伙伴全球布局

在跨境电商的汹涌浪潮中&#xff0c;武汉星起航电子商务有限公司如同一颗璀璨的明星&#xff0c;自2017年起便以亚马逊自营店铺为核心业务&#xff0c;不断积累实战运营经验&#xff0c;逐步建立了自己在市场中的稳固地位。随着2020年公司的正式成立&#xff0c;武汉星起航明确…

@RequestMapping属性详解及案例演示

RequestMapping源码 Target({ElementType.TYPE, ElementType.METHOD}) Retention(RetentionPolicy.RUNTIME) Documented Mapping public interface RequestMapping {String name() default "";AliasFor("path")String[] value() default {};AliasFor(&quo…

最快33天录用!一投就中的医学4区SCI,几乎不退稿~

【SciencePub学术】今天小编给大家推荐2本生物医学领域的SCI&#xff0c;此期刊为我处目前合作的重点期刊&#xff01;影响因子0-3.0之间&#xff0c;最重要的是审稿周期较短&#xff0c;对急投的学者较为友好&#xff01; 医学医药类SCI 01 / 期刊概况 【期刊简介】IF&…

从0开始搭建vue项目

#先查下电脑有没有安装过node和npm node -v npm -v #安装vue npm install -g vue #安装webpack npm install webpack -g 都安装好后&#xff0c;进入你想创建的文件夹内 创建名字&#xff1a;vue init webpack <project_name> 就默认回车 然后根据项目需求Y/n 比如…

红酒香气探秘:解锁品味酒香的奥秘,带你领略葡萄酒的魅力

在葡萄酒的世界里&#xff0c;香气是葡萄酒的灵魂&#xff0c;它诉说着葡萄的故事&#xff0c;也展现着酿酒师的匠心独运。每一款红酒都有其不同的香气&#xff0c;如同一位优雅的舞者&#xff0c;用曼妙的舞姿诠释着酒的韵味。今天&#xff0c;就让我们一起走进红酒的香气世界…

24年诺瓦星云入职认知能力测验Verify + 职业性格问卷OPQ可搜索带解析求职SHL题库

一、走进西安诺瓦星云科技股份有限公司 西安诺瓦星云科技股份有限公司(简称诺瓦星云) 是全球极具竞争力的LED显示解决方案供应商&#xff0c;实施"基于西安&#xff0c;围绕北京与深圳&#xff0c;辐射全球"的全球化布局&#xff0c;总部位于西安&#xff0c;西安、…

微服务中的Feign远程调用

Feign的个人理解 Feign在英文中是“装”的意思&#xff0c;但在微服务中他是远程调用的一种方式&#xff0c;我的理解是&#xff1a;他替代了RestTemplateNacos中的URL编码的方式&#xff0c;显得很高大上&#xff0c;所以很装&#xff1a;&#xff08;声明式事务&#xff0c;只…

静态IP代理:保障网络稳定的核心技术

静态IP代理作为一种重要的网络工具&#xff0c;因其稳定性和持久性&#xff0c;受到越来越多用户的青睐。本文将深入探讨静态IP代理的定义和优势。 静态IP代理是什么&#xff1f; 静态IP代理是指在代理服务器中分配一个固定的IP地址&#xff0c;用户在使用过程中始终使用同一个…

当我问AI,智星云算力有什么特点时,答案出乎意料!

当我问AI&#xff0c;智星云算力有什么特点时&#xff0c;它的回答几乎全中。 唯一的错误是在“分钟计费”这里&#xff0c;之前确实是按分钟计费过&#xff0c;今年改成了按小时计费&#xff0c;大约一小时0.75元起。 另外就是一些更具体的特点没有展现出来&#xff0c;比如…

Mysql和ES使用汇总

一、mysql和ES在业务上的配合使用 一般使用时使用ES 中存储全文检索的关键字与获取的商品详情的id&#xff0c;通过ES查询获取查询商品的列表中展示的数据&#xff0c;通过展示id 操作去获取展示商品的所有信息。mysql根据id去查询数据库数据是很快的&#xff1b; 为什么ES一般…

高效除氟:探索CH-87up树脂在氟化工废水处理中的应用

摘要 本研究旨在评估Tulsimer CH-87up树脂针对经钙镁预处理后的氟化工废水的深度处理效果。实验结果显示&#xff0c;CH-87up树脂能显著降低废水中的氟离子浓度&#xff0c;从43.4mg/L降至0.34mg/L&#xff0c;远低于行业排放标准的5mg/L。此外&#xff0c;该树脂表现出卓越的…

Windows打开redis以及Springboot整合redis

目录 前言Windows系统打开redisSpringboot整合redis依赖实体类yml配置文件config配置各个数据存储类型分别说明记录string数据写入redis&#xff0c;并查询通过命令行查询 list插入数据到redis中从redis中读取命令读取数据 hash向redis中逐个添加map键值对获取key对应的map中所…

[附源码]最新springboot线上电商|前后端分离|界面简洁

一. 前言 今天小编给大家带来了一款可学习&#xff0c;可商用的&#xff0c;线上电商的网站源码&#xff0c;支持二开&#xff0c;无加密。代码的后端是SpringBoot技术栈&#xff08;非jsp&#xff09;&#xff0c;前端是Angular。如果您需要定制需求请找小编。 文章第六小节…

Vue 数据大屏适配

1、准备俩个盒子 .dataScreen-content 盒子内容根据设计稿给的px单位进行正常的布局就行 2、盒子的CSS样式 .dataScreen-container {width: 100%;height: 100%;// 有背景图需要的样式background: url("./images/bg.png") no-repeat;background-repeat: no-repeat;b…

让采购和工程师们既爱又恨的任务——BOM

在项目研发与生产过程中&#xff0c;有一个常常让采购经理和工程师们既爱又恨的任务&#xff0c;那就是整理BBOMB。BOM作为连接设计与制造的桥梁&#xff0c;其重要性不言而喻&#xff0c;它详细列出了产品构成所需的所有零部件、材料及其规格、数量&#xff0c;是成本估算、采…

学习记录之数学表达式(6)

目录 十二、图与网络12.1 有向图12.2 元组与对象12.3 二元关系与有向图12.4 无向图12.5 有向网络12.6 作业 十三、树13.1 例子13.2 定义13.3 Java代码13.4 作业 十四、 m \mathbf{m} m叉树14.1 预备知识&#xff1a;字符串14.2 m \mathbf{m} m-叉树的定义14.3 Java代码14.4 作…

代码随想录算法训练营第20天 | 题目: 235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点

代码随想录算法训练营第20天 | 题目&#xff1a; 235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点 文章来源&#xff1a;代码随想录 题目名称&#xff1a; 235. 二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的…

【.Net】Web项目部署腾讯云

文章目录 总述前置准备docker-compose部署普通部署 参考 总述 前置准备 云服务添加端口 另有linux本身防火墙请参考&#xff1a; 【Linux】防火墙命令 需安装.Net SDK和Asp .Net Runtime 注意&#xff1a; 1、sdk也要不只是runtime 2、是Asp .Net Runtime不是.Net Runtime …

Linux socketcan应用编程

一、基本步骤 1、打开并绑定到 CAN 套接字 在执行任何操作之前&#xff0c;第一步是创建一个套接字。此函数接受三个参数 – 域/协议系列 &#xff08;PF_CAN&#xff09;、套接字类型&#xff08;原始或数据报&#xff09;和套接字协议。如果成功&#xff0c;该函数将返回文件…

游戏AI的创造思路-技术基础-tanh函数详解

又来搞事情&#xff0c;总想着把sigmoid函数替换成其他函数作为激活函数&#xff0c;或者找到更合适某一段训练的函数&#xff0c;所以今天来聊聊tanh函数&#xff08;谁让咱当年差点去了数学系&#xff0c;结果还是在数学系转过去计算机的&#xff09; 目录 3.9. tanh函数详解…