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

2,580 阅读3分钟

前言

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

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

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

环境安装前置预备

IDEA安装

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

官网:www.jetbrains.com/idea/downlo…

JDK安装

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

官网:www.oracle.com/java/techno…

详细安装JDK:www.liaoxuefeng.com/wiki/125259…

Scala与SBT安装

官网:www.scala-lang.org/

建议安装Scala 2.11.12版本

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

image.png

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

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

image.png

选择高级系统设置

image.png

选择环境变量

image.png

先按Path,再按编辑

image.png

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

image.png

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

image.png

IDEA配置

进入IDEA安装Scala插件

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

image.png

image.png

DEA 配置Scala JDK

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

image.png

image.png

建立工程文件,设置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已成功加载

image.png

创建Scala文件

image.png

image.png

生成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

image.png

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

image.png

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

image.png

SpinalHDL仿真环境

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

安装MSYS2

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

image.png

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

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打开

image.png

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

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

image.png

image.png

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

Reference

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

SpinalHDL的官方文档: spinalhdl.github.io/SpinalDoc-R…

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

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

Intellij IDEA 安装Scala插件 + 创建Scala项目(Hello World!) blog.csdn.net/Appleyk/art…

idea添加scala环境_SpinalHDL——环境搭建 blog.csdn.net/weixin_3998…

msys2安装gcc、g++编译器 blog.csdn.net/Lazybones_3…

如何以 MinGW 和 MSYS2 建置 C 和 C++ 開發環境 michaelchen.tech/windows-pro…

SpinalHDL 环境搭建(1) blog.csdn.net/AS7062031/a…

SpinalHDL 开发环境 Windows 安装 blog.csdn.net/htgoco/arti…

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