• 正文
  • 相关推荐
申请入驻 产业图谱

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

11/14 11:03
481
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

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 进行联合仿真。

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

关键一步:关联仿真工具

打开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)施加激励,并检查其输出。

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

编写测试脚本:将以下代码写入 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中见证电路工作!

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

Tool name

      • :

ModelSimFormat for output netlist

      • :

VerilogOutput directory

      • :

simulation/modelsim

      •  (默认即可)

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

在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文件
由于本次代码较为简单,已全部提供在文章内,直接复制即可,不再另外单独提供。

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

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

《Verilog十日谈》系列精华抢先看:

Day 2: 数字电路的筋骨:详解wire、reg与模块层次化设计。深入硬件描述核心,搞懂“线”与“寄存器”的本质区别。

Day 3: 组合逻辑的双刃剑:assign与always@(*)与Latch陷阱。掌握描述组合逻辑的两种方式,并规避初学者100%会踩的锁存器大坑

Day 4: 时序逻辑的基石:时钟、复位与非阻塞赋值(<=)。进入能够“记忆”的时序逻辑世界,这是CPU、FIFO等一切复杂设计的基础。

Day 5: 价值千金的法则:阻塞(=)与非阻塞(<=)的终极对决本系列灵魂一课! 用大量波形图揭秘其底层差异,总结出让你终生受益的编码风格。

Day 6: 实战:用有限状态机实现一个序列检测器综合运用前5天知识,完成一个经典、实用的数字系统设计。

Day 7: Testbench进阶:自动化验证、任务与系统函数。教你写出更强大、高效的测试脚本,真正驾驭ModelSim。

Day 8: 高效设计之道:PLL、RAM等IP核的调用与仿真。站在巨人的肩膀上,快速构建复杂系统。

Day 9 & 10: 番外答疑与FPGA学习路线图。集中解决难题,为你规划清晰的进阶路径。

从思维到工具,从语法到项目,我们已经为你铺平了道路。点击关注,用十天,我们深入Verilog的“筋骨”所在,不见不散!


互动话题: 在Quartus和ModelSim联仿中遇到什么问题?或者你最想在下节课中深入了解哪个知识点?欢迎在评论区留言!

 

【来源:www.hdlcode.com

相关推荐

登录即可解锁
  • 海量技术文章
  • 设计资源下载
  • 产业链客户资源
  • 写文章/发需求
立即登录