初识数字电路设计

仿真环境搭建

采取精简的原则,选择 VScode + Modelsim 的 Windows 环境作为代码书写及仿真环境,配置参考了 CSDN 教程 Windos下高效Verilog环境搭建

配置 VScode

下载并配置Universal Ctags 软件及 Win 系统变量。登陆网站:github, 解压后放到软件盘路径,并添加环境变量
image.png

需要的 VScode插件列表:

  1. Verilog-HDL/SystemVerilog/Bluespec SystemVerilog
    用于语法检查、代码跳转、自动补全、自动生成实例化代码
    image.png
    插件安装完成之后需要对插件进行配置,在 VScode 中的 File->Preferences->Settings 中搜索 Verilog,对 Verilog. Ctags. Path、Verilog.Linting.Linter、Verilog.Linter.Modelsim.Work进行配置这里的work(必填)是对应modelsim的逻辑库名,不填这个无法做语法检查。
    image.png
  2. CTags Support
    代码跳转必备软件, 此插件不需要过多配置。
    image.png
  3. Verilog_Testbench
    自动生成Testbench插件,需添加Python3 chardet库包支持
pip install chatdet

上述的 VScode 配置完成之后,重启 VScode。

安装 Modelsim2019

过程省略,具体参考安装包文件夹中的 Modelsim2019 安装教程。

开始第一个工程

为了验证搭建的环境是否正确及开发流程,新建一个移位操作的电路,并仿真观察波形

  1. 在 VScode 中 File->Open Folder 打开文件夹作为工作目录,此处新建的工程目录在 F:/Project_Design/Digital_Design/test 中。
  2. 新建一个 src 文件夹作为模块电路存放的路径,再新建一个 sim 文件夹用于存放 testbench 文件。
    image.png
  3. 由于用的仿真器为 Modelsim,因此需要创建一个逻辑库,再 VScode 的 terminal 输入 vlib work 即可,
    image.png
    之后自动生成 work 文件夹,此时一个简单的工作区建立完毕。

开始写 Verilog 代码

  1. 在 src 文件夹下新建文件 top. v,编写一个移位操作的流水灯代码。
  2. 在插件的帮助下可以快速生成语法块,并进行语法错误检查。
    完整代码如下:
module top (

    input clk,

    input rst_n,

    output reg [31:0] led

);

    always @(posedge clk or negedge rst_n) begin

        if(~rst_n)

            led <= 32'b1;

        else

            led <= {led[30:0],led[31]};

    end

endmodule
  1. 自动生成 testbench 功能,在 VScode 界面中输入 ctrl+shift+p 打开命令,搜索 testbench,在 terminal 中自动生成代码,在 sim 文件夹下新建 tb_top. v 并粘贴至文件中,注意:此处生成的为代码模板,需要对代码进行必要修改,如仿真时间设置,具体代码如下:
`timescale  1ns / 1ps

module tb_top;

// top Parameters

parameter PERIOD  = 10;

// top Inputs

reg   clk                                  = 0 ;

reg   rst_n                                = 0 ;


// top Outputs

wire  [31:0]  led                           ;

  
  

initial

begin

    forever #(PERIOD/2)  clk=~clk;

end

initial

begin

    #(PERIOD*2) rst_n  =  1;

end

top  u_top (

    .clk                     ( clk          ),

    .rst_n                   ( rst_n        ),

    .led                     ( led    [31:0] )

);

initial

begin

    #1000000;

    $finish;

end

endmodule

进行仿真

接下来,我们通过命令的方式执行文件的编译,仿真。

  1. 在终端命令行中对工作区的所有文件进行编译
vlog .\sim\tb_top.v .\src\top.v

此处由于需要对文件夹下的所有. v 文件进行编译,因此我们可以写一个 vflist 文件,将所有的. v 文件的绝对路径添加至文件中,具体可以参考:多个.v文件编译 并执行如下的命令:

vlog -f vflist
  1. 进行仿真,这里记得加 -voptargs=+acc选项否则新版本的modelsim很容易把object给优化掉:
vsim tb_top -voptargs=+acc
  1. 执行完以上两两步之后,跳出 modelsim gui 界面
  2. 添加波形 , 设置仿真时间 ,RUN跑仿真
    image.png
    image.png

Cadence 环境下的 nc-verilog 尝试

  1. 新建一个 SIM_verilog library 用于测试
    image.png
  2. 新建一个 SC_AOI12_14_9 的 cellview 且为 verilog 文件格式,此时会打开一个文本编辑器,输入下图中的代码,并编译,若无错误,软件提示会从生成 symbol:
    image.png
  3. 接下来将新建一个 sigGen cellview 用于生成测试波形,同上,并以无误,会提示是否生成 symbol,代码如下图所示:
    image.png
  4. 新建一个 schematic 的 cellview,用于将激励和被测电路连接,
    image.png
  5. 打开 Virtuoso->tool->NC-Verilog, 并将对应的 library 添加至相应的位置,并按如下图标识顺序依次点击按钮:
    image.png
  6. 接下来会跳出 Design browser 界面,并将所观察的波形添加至 Waveform 中仿真查看。
    image.png
  7. 查看波形
    image.png