第一章:Verilog入门——数字电路设计概述、Verilog历史与特点、Lattice半导体公司简介、开发环境Diamond安装与验证

各位同学,欢迎来到《Verilog基础语法与Lattice实现》的第一课。

我是你们的讲师,一个在FPGA圈子里摸爬滚打了十几年的老工程师。今天咱们不聊虚的,直接切入正题。这一章,我打算带大家先搞清楚三件事:数字电路设计到底在干嘛?Verilog这门语言是怎么来的?以及我们为什么要选Lattice的板子和Diamond这个工具?

1.1 数字电路设计概述

说白了,数字电路设计就是用0和1去实现你想要的功能。你想想看,我们日常用的手机、电脑、路由器,里面跑的都是数字信号。这些信号在芯片里被各种逻辑门(与门、或门、非门)处理,最终完成复杂的运算和控制。

我刚开始入行时,画电路图用的是原理图输入法。一个个门电路拖进去,连线连到眼花。那时候一个简单的计数器,画出来能占满一张A4纸。后来有了硬件描述语言(HDL),我们才从“画电路”变成了“写电路”。

数字电路设计有两个核心方向:

  • ASIC(专用集成电路):一次性流片,成本高,但性能好、功耗低。适合大规模量产。
  • FPGA(现场可编程门阵列):买回来就能编程,灵活,适合原型验证和小批量生产。

我个人习惯用FPGA做前期验证。为什么呢?因为改起来方便。ASIC流片一次几十万甚至上百万,万一有个bug,哭都来不及。FPGA就不一样了,改完代码重新烧录一下,几分钟搞定。

核心观点:FPGA是连接软件思维和硬件实现的桥梁。你写的每一行Verilog代码,最终都会变成实实在在的硬件电路。

1.2 Verilog历史与特点

Verilog诞生于1984年,由Gateway Design Automation公司开发。后来被Cadence收购,再后来成了IEEE标准(IEEE 1364)。

同期还有另一门语言叫VHDL。这两者经常被拿来比较。我的看法是:VHDL语法严谨,像写论文;Verilog简洁灵活,像写代码。在工业界,Verilog的普及率更高,尤其是美国和中国。欧洲那边用VHDL多一些。

Verilog的特点,我总结为三点:

  1. 并行执行:这是硬件语言和软件语言最大的区别。软件代码是顺序执行的,Verilog代码是并行执行的。嗯,这里要注意,initial块和always块里的语句是顺序执行的,但多个块之间是并行的。
  2. 时间概念:Verilog里有`#10`这样的延时控制,可以精确描述信号变化的时间点。这在仿真中非常有用。
  3. 层次化设计:你可以把一个大系统拆成多个模块,每个模块单独设计、单独仿真,最后再拼起来。我在项目中遇到过一个大项目,分了十几个模块,每个模块由不同工程师负责,最后用顶层模块一整合,跑通的那一刻,成就感满满。

个人经验:初学者最容易犯的错误,就是把Verilog当成C语言来写。记住,你是在描述硬件,不是在写软件。比如`always @(posedge clk)`,这表示一个时钟上升沿触发的寄存器,不是循环。

1.3 Lattice半导体公司简介

说到FPGA厂商,大家首先想到的可能是Xilinx(现在叫AMD)和Altera(现在叫Intel)。但Lattice是一家被低估的公司。它专注于低功耗、小尺寸的FPGA,在物联网、工业控制、消费电子领域应用很广。

Lattice的产品线主要有:

  • MachXO系列:用于控制逻辑、桥接、接口扩展。
  • iCE40系列:超低功耗,适合可穿戴设备。
  • ECP5系列:性能较强,支持高速SerDes,适合通信和视频处理。

为什么我选Lattice来教学?原因有三:

  1. 工具免费:Diamond软件有免费版本,对学生和爱好者很友好。
  2. 上手快:Lattice的器件规模适中,适合入门学习。
  3. 文档清晰:Lattice的技术文档写得比较易懂,不像某些大厂那样晦涩。

避坑指南:我曾经在选型时忽略过Lattice的封装信息。它的某些小封装芯片,引脚间距非常小,手工焊接几乎不可能。如果你是自己做实验,记得选大封装的型号,比如TQFP144。

1.4 开发环境Diamond安装与验证

好了,理论讲完了,咱们来点实际的。Diamond是Lattice官方的FPGA开发工具,集成了设计输入、综合、布局布线、仿真、下载等功能。

安装步骤很简单:

  1. 去Lattice官网下载Diamond安装包(建议选最新稳定版)。
  2. 双击安装,一路Next。注意安装路径不要有中文。
  3. 安装完成后,需要申请一个免费的License。Lattice官网注册账号,然后生成License文件。
  4. 将License文件放到安装目录下,或者设置环境变量`LICENSE_FILE`指向它。

验证安装是否成功,我习惯写一个最简单的代码:

module led_blink (
    input  wire clk,
    input  wire rst_n,
    output reg  led
);

    reg [23:0] counter;

    always @(posedge clk or negedge rst_n) begin
        if (!rst_n)
            counter <= 24'd0;
        else
            counter <= counter + 1'b1;
    end

    always @(posedge clk or negedge rst_n) begin
        if (!rst_n)
            led <= 1'b0;
        else if (counter == 24'd5000000)
            led <= ~led;
    end

endmodule

这段代码实现了一个LED闪烁功能。时钟频率假设是50MHz,计数器计到5000000时翻转一次,大概就是5Hz的闪烁频率。

在Diamond里新建工程,把这段代码加进去,然后综合、布局布线、生成比特流,最后下载到开发板上。如果LED开始闪烁,恭喜你,环境配置成功了。

小技巧:第一次下载时,如果提示找不到设备,检查一下下载器驱动是否安装。Lattice的下载器通常需要手动安装驱动,在Diamond安装目录的`ispvms\cable_drivers`文件夹里可以找到。

本章知识体系

下面这张图,是我用SVG画的本章知识结构。你可以把它当作一张地图,随时回来看看。

Verilog入门 数字电路设计概述 Verilog历史与特点 Lattice半导体公司 Diamond安装与验证 ASIC vs FPGA 并行/时序 低功耗FPGA LED闪烁代码 第一章:Verilog入门知识体系

这张图把本章的四个核心内容串起来了。数字电路设计是背景,Verilog是工具,Lattice是平台,Diamond是环境。四者缺一不可。

好了,第一章的内容就到这里。记住,学习FPGA没有捷径,多写代码、多仿真、多烧录,慢慢就有感觉了。


专注资料整理