第一章: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的特点,我总结为三点:
- 并行执行:这是硬件语言和软件语言最大的区别。软件代码是顺序执行的,Verilog代码是并行执行的。嗯,这里要注意,initial块和always块里的语句是顺序执行的,但多个块之间是并行的。
- 时间概念:Verilog里有`#10`这样的延时控制,可以精确描述信号变化的时间点。这在仿真中非常有用。
- 层次化设计:你可以把一个大系统拆成多个模块,每个模块单独设计、单独仿真,最后再拼起来。我在项目中遇到过一个大项目,分了十几个模块,每个模块由不同工程师负责,最后用顶层模块一整合,跑通的那一刻,成就感满满。
个人经验:初学者最容易犯的错误,就是把Verilog当成C语言来写。记住,你是在描述硬件,不是在写软件。比如`always @(posedge clk)`,这表示一个时钟上升沿触发的寄存器,不是循环。
1.3 Lattice半导体公司简介
说到FPGA厂商,大家首先想到的可能是Xilinx(现在叫AMD)和Altera(现在叫Intel)。但Lattice是一家被低估的公司。它专注于低功耗、小尺寸的FPGA,在物联网、工业控制、消费电子领域应用很广。
Lattice的产品线主要有:
- MachXO系列:用于控制逻辑、桥接、接口扩展。
- iCE40系列:超低功耗,适合可穿戴设备。
- ECP5系列:性能较强,支持高速SerDes,适合通信和视频处理。
为什么我选Lattice来教学?原因有三:
- 工具免费:Diamond软件有免费版本,对学生和爱好者很友好。
- 上手快:Lattice的器件规模适中,适合入门学习。
- 文档清晰:Lattice的技术文档写得比较易懂,不像某些大厂那样晦涩。
避坑指南:我曾经在选型时忽略过Lattice的封装信息。它的某些小封装芯片,引脚间距非常小,手工焊接几乎不可能。如果你是自己做实验,记得选大封装的型号,比如TQFP144。
1.4 开发环境Diamond安装与验证
好了,理论讲完了,咱们来点实际的。Diamond是Lattice官方的FPGA开发工具,集成了设计输入、综合、布局布线、仿真、下载等功能。
安装步骤很简单:
- 去Lattice官网下载Diamond安装包(建议选最新稳定版)。
- 双击安装,一路Next。注意安装路径不要有中文。
- 安装完成后,需要申请一个免费的License。Lattice官网注册账号,然后生成License文件。
- 将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是工具,Lattice是平台,Diamond是环境。四者缺一不可。
好了,第一章的内容就到这里。记住,学习FPGA没有捷径,多写代码、多仿真、多烧录,慢慢就有感觉了。