Verilog十日谈Day 1:从软件思维到硬件思维:我的第一行Verilog代码与仿真

 Verilog十日谈Day 1: 从软件思维到硬件思维:我的第一行Verilog代码与ModelSim仿真

告别点灯侠!从第一天起,就用工程师的方式写代码、做仿真。



各位未来的芯片设计与FPGA高手,你是否:

  • 困在“点灯”阶段
    :代码只会下载到板子看结果,出了问题一脸茫然,调试基本靠猜?
  • 对仿真望而生畏
    :听说过Testbench和ModelSim,但觉得复杂难学,迟迟不敢上手?
  • 缺乏工程化思维
    :教程只教语法,不教如何在一个完整的工程环境下编译、仿真、调试?

如果你的答案是“是”,那么你来对地方了。

我们见过太多学习者,因为第一步就走错了方向——他们只学语法,不学验证;只会综合,不会仿真。结果就是永远无法独立完成高质量的设计。

《Verilog十日谈》系列,就是要从根本上解决这个问题。 我们承诺:

  • ✅ 工业级流程
    :从Day 1起,就带你使用Quartus + ModelSim这一行业标准组合。
  • ✅ 验证驱动开发
    :强调Testbench编写与仿真分析,让你“代码未下载,已知结果对”。
  • ✅ 完整的工程视角
    :每个例子都是一个完整的Quartus工程,让你知其然,更知其所以然。
  • ✅ 手把手实战
    :提供每一步的详细截图和完整的源码工程。

今天,就让我们跨越理论与实践的鸿沟,完成从“学生”到“工程师”的第一个关键转变。


一、 思维破壁:你的代码不是程序,是电路蓝图!

请立刻忘记C/C++/Python!你不再是“程序员”,而是“数字世界的建筑师”。

  • 软件思维
    :代码顺序执行,核心是“时间流”和“算法流程”。
  • 硬件思维
    :代码描述电路结构,核心是“空间结构”和“并行工作”。

一个比喻
你的Verilog代码就像一张电路蓝图module就是你设计的芯片;input/output是芯片的引脚;assignalways块则是内部具体的逻辑门和寄存器。一旦上电,整个电路同时工作

理解“代码即电路”,是学好Verilog的唯一前提。


二、 环境准备:打造你的专业“数字工作站”

本系列使用 Intel QuartusII 和 ModelSim 进行联合仿真。

  1. 关于安装

    • 请确保你的Quartus版本中包含了ModelSim(例如Intel FPGA Edition或预装了ModelSim的版本)。
    • 关于软件安装、License设置(Quartus和ModelSim均有免费版本),B站有极其详尽的视频教程。请自行搜索学习,这是成为工程师的必备技能。
  2. 关键一步:关联仿真工具

    • 打开Quartus,进入 Tools -> Options -> General -> EDA Tool Options
    • 在“ModelSim”一项中,指定你的ModelSim可执行文件所在路径(例如 .../intelFPGA/XX.x/modelsim_ase/win32aloem)。
    • 这一步是Quartus能调用ModelSim的关键!

三、 第一行代码:设计一个“与门”芯片

启动Quartus,创建一个新项目(项目路径和名称不要有中文和空格!)。器件可以先选择一个Cyclone IV EP4CE6系列。

图片

新建一个Verilog文件,保存为 and_gate.v,输入以下代码:

// 模块声明:定义一个名为 and_gate 的“芯片”
module and_gate (
    input   a,      // 输入端口 a,好比一个开关
    input   b,      // 输入端口 b,好比另一个开关
    output  y       // 输出端口 y,好比一个灯泡
);

// 连续赋值语句:描述电路功能
// 这里是一个与门——只有当a和b都为1时,y才输出1
assign y = a & b;

endmodule

点击 编译按键。如果下方信息窗口显示成功,恭喜!你的第一个数字电路“蓝图”已经绘制完毕。

图片


图片

点击RTL图可以看到生成的电路图:

图片

可以看到生成了一个与门

图片

四、 第一个Testbench:为你的芯片搭建“测试平台”

这是工程师的核心技能!Testbench就是一个虚拟的“测试平台”,用来给你的设计(DUT)施加激励,并检查其输出。

  1. 新建Testbench文件:在Quartus中,再新建一个Verilog文件,命名为 tb_and_gate.v注意:这个文件不需要加入到项目中,它仅用于仿真。

  2. 编写测试脚本:将以下代码写入 tb_and_gate.v

// 测试模块(Testbench)
// 注意:testbench模块没有输入输出端口!
`timescale 1ns/1ns   // 定义仿真时间单位/精度

module tb_and_gate();

    // 1. 定义连接到被测模块的信号
    reg     a, b;   // "reg" 类型:在测试中用于驱动输入
    wire    y;      // "wire"类型:用于连接被测模块的输出

    // 2. 实例化被测模块 (Device Under Test, DUT)
    // 这相当于把设计好的“and_gate”芯片插到测试底座上
    and_gate u_and_gate (
        .a  (a),
        .b  (b),
        .y  (y)
    );

    // 3. 产生激励波形
    initial begin
        // 初始化信号
        a = 1'b0;
        b = 1'b0;
        #20; // 等待20个时间单位

        // 测试用例1: a=0, b=1
        a = 1'b0;
        b = 1'b1;
        #20;

        // 测试用例2: a=1, b=0
        a = 1'b1;
        b = 1'b0;
        #20;

        // 测试用例3: a=1, b=1
        a = 1'b1;
        b = 1'b1;
        #20;

        // 测试结束
        $stop; // 暂停仿真(ModelSim中可继续),用 $finish 则直接退出
    end

endmodule

五、 联合仿真:在ModelSim中见证电路工作!

  1. 设置仿真工具:在Quartus中,进入 Assignments -> Settings -> EDA Tool Settings -> Simulation

    • Tool name
      ModelSim
    • Format for output netlist
      Verilog
    • Output directory
      simulation/modelsim (默认即可)

    • 图片

  2. 启动仿真

    • 点击 Tools -> Run Simulation Tool -> RTL Simulation
    • Quartus会自动编译你的设计,生成仿真模型,并启动ModelSim。
      图片

  3. 在ModelSim中查看结果

    • 在0-20ns, a=0, b=0, y=0。
    • 在20-40ns, a=0, b=1, y=0。
    • 在40-60ns, a=1, b=0, y=0。
    • 在60-80ns, a=1, b=1, y=1。
    • ModelSim启动后,你可能需要手动将测试信号添加到波形窗口。在"Transcript"窗口输入:do wave.do (如果Quartus已生成) 或手动将左侧Objects窗口中的信号 aby 拖到波形窗口。
    • 在Transcript窗口输入:run 100ns 或点击工具栏上的"Run"按钮。
    • 现在,请凝视你的波形图!
       你可以清晰地看到:
    • 图片

这,就是你的芯片在工作! 你不再需要物理板卡,在电脑上就完美验证了设计的正确性。这就是仿真的威力!


【今日源码下载】

我们为本文提供了完整的源码与Testbench文件

lesson1.rar

【明日预告 & 系列精华一览】

今天,你迈出了最关键的一步:建立了硬件思维,并掌握了设计-验证的完整工业流程。接下来的课程,我们将在这个坚实的基础上,快速构建你的Verilog知识体系。

1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » Verilog十日谈Day 1:从软件思维到硬件思维:我的第一行Verilog代码与仿真

注册为本站会员,充值100得150,详情咨询客服

目前为止共有 *** 位优秀的会员加入! 立刻加入会员