拯救Verilog!搭建SpinalHDL的IDE环境和仿真环境(保姆级教学)
5

前言

这是我以前在学校做编译原理实验时做的笔记,遇到不少的坑,但是最后还是完成了。这是一篇搭建SpinalHDL的教学,希望对读者有帮助。做完这个实验后我好兴幸自己不是读硬件有关的专业而是读软件

对硬件设计有点了解读者都知道Verilog吧,写小项目的时候觉得还好,但是写大项目的时候,只要想改一点点东西,就要改成千上万行代码,工作量巨大。所以,基于Scala的SpinalHDL框架就出来了,成功解决了上述问题。在添加标签时没有SpinalHDL标签,又不能创建,这知名度也太低了吧

工欲善其事,必先利其器 -- 《论语·卫灵公》

环境安装前置预备

IDEA安装

从官网下载,选Community版,完成后需安装Scala插作(先装IDEA然后往下做,等下再装插件)。

官网:https://www.jetbrains.com/idea/download/#section=windows

JDK安装

SpinalHDl基于Scala,Scala基于Java,下载Java SDK 1.8,从官网下载,选Java SE 8

官网:https://www.oracle.com/java/technologies/javase-downloads.html

详细安装JDK:https://www.liaoxuefeng.com/wiki/1252599548343744/1280507291631649

Scala与SBT安装

官网:https://www.scala-lang.org/

建议安装Scala 2.11.12版本

安装后,打开cmd,输入where Scala指令查看Scala安装路径

31c9edd61a07432a8e95899df72fbdae~tplv-k3u1fbpfcp-zoom-in-crop-mark_1512_0_0_0.webp

增加环境变量 Path: C:\Program Files (x86)\scala\bin

对此电脑,按右键,选属性

818c08e86fdf4485bd1b7ff780d14838~tplv-k3u1fbpfcp-zoom-in-crop-mark_1512_0_0_0.webp

选择高级系统设置

edffcc4b84484036a2391ae21926d3a9~tplv-k3u1fbpfcp-zoom-in-crop-mark_1512_0_0_0.webp

选择环境变量

ba2632f2c3044c6b85b364d6583abe32~tplv-k3u1fbpfcp-zoom-in-crop-mark_1512_0_0_0.webp

先按Path,再按编辑

7898de5003cb432dba6d22ed8b1498fd~tplv-k3u1fbpfcp-zoom-in-crop-mark_1512_0_0_0.webp

新建,再把刚才的路径贴上再按确定就可以了

2d3941df3d984907be1d08a852d82a99~tplv-k3u1fbpfcp-zoom-in-crop-mark_1512_0_0_0.webp

重新打开cmd,输入scala -version,如果出现以下画面即环境配置成功

a37fbc254e374f1189602d1a6d5fd50d~tplv-k3u1fbpfcp-zoom-in-crop-mark_1512_0_0_0.webp

IDEA配置

进入IDEA安装Scala插件

File->Settings调出设置窗口,找到Plugins并搜索Scala插件

19e9229ac5e0429281a41549a9fb3810~tplv-k3u1fbpfcp-zoom-in-crop-mark_1512_0_0_0.webp

4befb20a0a0144adae18b1e83014ced4~tplv-k3u1fbpfcp-zoom-in-crop-mark_1512_0_0_0.webp

DEA 配置Scala JDK

建立sbt工程文件,建立方法如下

4d286df6f33e4bedabd0a21a7df8d8af~tplv-k3u1fbpfcp-zoom-in-crop-mark_1512_0_0_0.webp

c3aa1323e8724da1b668f9de5a0c6b50~tplv-k3u1fbpfcp-zoom-in-crop-mark_1512_0_0_0.webp

建立工程文件,设置build.sbt文件,设置如下

name := "untitled2"

version := "0.1"

scalaVersion := "2.11.12"

val spinalVersion = "1.4.0"

libraryDependencies ++= Seq(

  "com.github.spinalhdl" % "spinalhdl-core_2.11" % spinalVersion,

  "com.github.spinalhdl" % "spinalhdl-lib_2.11" % spinalVersion,

  compilerPlugin("com.github.spinalhdl" % "spinalhdl-idsl-plugin_2.11" % spinalVersion)

)

fork := true

等待工具自动加载完成后可看到SpinalHDL已成功加载

6bc16f6abd38428abab7af97d4260c77~tplv-k3u1fbpfcp-zoom-in-crop-mark_1512_0_0_0.webp

创建Scala文件

4f4c2c4d82b647ff8f56e994629fb70b~tplv-k3u1fbpfcp-zoom-in-crop-mark_1512_0_0_0.webp

459be782d46947c593ac122d97d5d4d3~tplv-k3u1fbpfcp-zoom-in-crop-mark_1512_0_0_0.webp

生成Verilog的例子

配置环境后,當然要運行代碼測試是否完成環境配置

//newTest.scala

import spinal.core._

object SimAsynchronousExample {

    class Dut extends Component {

        val io = new Bundle {

        val a, b, c = in UInt (8 bits)

        val result = out UInt (8 bits)

        }

        io.result := io.a + io.b - io.c

    }

    def main(args: Array[String]): Unit = {

        SpinalSystemVerilog(new Dut)  //* *这行的意思就是把SpinalHDL翻译成Verilog

    }

}

编译并运行,按Run

35dc3d11e56a44af833e2f9831bf3fae~tplv-k3u1fbpfcp-zoom-in-crop-mark_1512_0_0_0.webp

看见如下信息代表编译并运行成功

4365d48e27254f3b9b4fc1bfd30110dc~tplv-k3u1fbpfcp-zoom-in-crop-mark_1512_0_0_0.webp

它会生成Verilog档案,𥚃面有刚生成的Verilog代码

ed7b7ddbeef441b3b29192669d1a3af8~tplv-k3u1fbpfcp-zoom-in-crop-mark_1512_0_0_0.webp

SpinalHDL仿真环境

只生成Verilog代码,没有运行演示总觉得差了点什么,以下为搭建仿真环境教学。其实SpinalHDL提供了sim功能,方便用户进行仿真。

安装MSYS2

打开MSYS2,输入指令pacman -Syuu,完成后它会提示重开

e2e34517ab714e959c254ba84668d076~tplv-k3u1fbpfcp-zoom-in-crop-mark_1512_0_0_0.webp

重开后,输入下列指令以安装所需软件

pacman -Syuu

# Close the MSYS2 shell once you're asked to

pacman -Syuu

pacman -S --needed base-devel mingw-w64-x86_64-toolchain \

                   git flex\

                   mingw-w64-x86_64-cmake

pacman -U http://repo.msys2.org/mingw/x86_64/mingw-w64-x86_64-verilator-4.032-1-any.pkg.tar.xz

安装完成后加入 C:\msys64\usr\bin;C:\msys64\mingw64\bin 到环境变量(前面己演示过)

重开IDEA

安装Gtkwave

这是个示波器,方便观察运行结果,以下为安装方法

下载iverilog安装包,它𥚃面有gtkwave

安装后自行配置环境变量,或者在安装时勾选加入环境变量 Path:C:\\iverilog\\bin;C:\\iverilog\\gtkwave\\bin

通过一个例子进行仿真

这段代码大概意思就是随机生成100组数据进行异步加法,等下会通过gtkwave来观察运行

import spinal.sim._

import spinal.core._

import spinal.core.sim._

 

import scala.util.Random

 

 

object SimAsynchronousExample {

  class Dut extends Component {

    val io = new Bundle {

      val a, b, c = in UInt (8 bits)

      val result = out UInt (8 bits)

    }

    io.result := io.a + io.b - io.c

  }

 

  def main(args: Array[String]): Unit = {

    SimConfig.withWave.compile(new Dut).doSim{ dut =>

      var idx = 0

      while(idx < 100){

        val a, b, c = Random.nextInt(256)

        dut.io.a #= a

        dut.io.b #= b

        dut.io.c #= c

        sleep(1) // Sleep 1 simulation timestep

        assert(dut.io.result.toInt == ((a + b - c) & 0xFF))

        idx += 1

      }

    }

  }

}

成功时会显示以下信息,然后会在workspace𥚃有vcd文件,用gtkwave打开

4365d48e27254f3b9b4fc1bfd30110dc~tplv-k3u1fbpfcp-zoom-in-crop-mark_1512_0_0_0.webp

直接用cmd打开vcd文件,首先要移动位置,输入cd到你的vcd当前目录(dir为显示当前目录有什么文件,等同于linux的ls)

输入gtkwave 档案名.vcd 打开文件

540443364eea45d48022dcb1b11a1b2d~tplv-k3u1fbpfcp-zoom-in-crop-mark_1512_0_0_0.webp

b1b2324b6c3c41c380d14475ab3c3917~tplv-k3u1fbpfcp-zoom-in-crop-mark_1512_0_0_0.webp

这𥚃有100组数据,以第一组数据为例,8C+74-CA=36,不信的话按计算器算一下,通过vch文件可以更直观地观察结果

Reference

本人推介微信公众号:Spinal FPGA,这里有很多有关SpinalHDL的资讯!

SpinalHDL的官方文档:
https://spinalhdl.github.io/SpinalDoc-RTD/index.html

全平台轻量开源verilog仿真工具iverilog+GTKWave使用教程
https://zhuanlan.zhihu.com/p/95081329

在Windows 10下配置和使用Icarus Verilog (iverilog)和GTKWave
https://www.twblogs.net/a/5c9e960abd9eee73ef4b65fd

Intellij IDEA 安装Scala插件 + 创建Scala项目(Hello World!)
https://blog.csdn.net/Appleyk/article/details/82180599

idea添加scala环境_SpinalHDL——环境搭建
https://blog.csdn.net/weixin_39983404/article/details/111627298

msys2安装gcc、g++编译器
https://blog.csdn.net/Lazybones_3/article/details/88633738

如何以 MinGW 和 MSYS2 建置 C 和 C++ 開發環境
https://michaelchen.tech/windows-programming/mingw-msys/

SpinalHDL 环境搭建(1)
https://blog.csdn.net/AS7062031/article/details/110850892

SpinalHDL 开发环境 Windows 安装
https://blog.csdn.net/htgoco/article/details/113037450

用Verilator仿真Ibex的hello world
https://zhuanlan.zhihu.com/p/108624018

拯救Verilog!搭建SpinalHDL的IDE环境和仿真环境(保姆级教学)
https://blog.jamesmok.xyz/archives/zheng-jiu-verilog-da-jian-spinalhdlde-idehuan-jing-he-fang-zhen-huan-jing-bao-mu-ji-jiao-xue
作者
Administrator
发布于
更新于
许可