Verilog 零基础入门:语法、仿真与 FPGA 实战
一、入门前提
Verilog 是 FPGA 开发的核心硬件描述语言,学习需具备两大基础:一是数字电子技术常识(理解逻辑门、时序 / 组合逻辑等概念),二是 C 语言基础(有助于快速适应语法结构)。学习核心是掌握 “代码→硬件” 的映射逻辑,而非单纯记忆语法。
二、仿真环境选择
根据开发场景选择适配环境,需重点注意路径约束:
- FPGA 开发环境:Xilinx Vivado(主流推荐)、Xilinx ISE(已停更)、Intel Quartus II
- ASIC 开发环境:Synopsys VCS
- 关键约束:电脑用户名、软件安装路径、工程路径必须全英文(无中文 / 特殊符号),否则会导致软件启动失败、编译报错或仿真异常。
三、Verilog 设计流程
- 需求分析:明确电路核心功能(如 LED 闪烁、数据运算);
- 功能划分:拆解复杂功能为独立子模块(如时钟模块、逻辑处理模块);
- HDL 描述:用 Verilog 代码编写模块,定义端口、数据类型与逻辑功能;
- 功能仿真:验证代码逻辑正确性,不通过则返回修改;
- 逻辑综合:将代码映射为 FPGA 内部物理结构(查找表、触发器等);
- 布局布线:按时序、引脚约束,匹配 FPGA 硬件资源;
- 时序仿真:验证时序性能,无问题则生成比特流文件,下载至 FPGA 硬件。
四、核心语法规则
1. 基础格式规范
- 大小写敏感:
clk与CLK是不同标识符,关键字必须全小写; - 空格与换行:无语法意义,可灵活排版;
- 语句结束:以分号
;结尾,不可省略; - 注释方式:单行
// 注释内容,多行/* 注释内容 */(不可嵌套)。
示例(两种写法功能一致):
verilog
// 推荐写法:分行排版 input wire a; input wire b; wire [1:0] results; assign results = (a == 1'b0) ? 2'b01 : (b == 1'b0) ? 2'b10 : 2'b11; // 紧凑写法:语法合法但可读性差 input wire a;input wire b;wire[1:0] results;assign results=(a==1'b0)?2'b01:(b==1'b0)?2'b10:2'b11; 2. 标识符与关键字
- 标识符:变量 / 模块的 “名字”,首字符为字母 / 下划线,后续可接字母 / 数字 / 下划线(不可数字 / 特殊符号开头);
- 关键字:语言预留功能词汇(全小写),如
reg(寄存器)、input(输入端口)、wire(线网)等; - 示例:
reg [3:0] counter;中,reg是关键字,counter是标识符。
3. 数值表示规则
(1)四种基础逻辑值(硬件电平描述)
- 0:逻辑 0(低电平,“假”);
- 1:逻辑 1(高电平,“真”);
- x/X:未知状态(信号可能为 0 或 1);
- z/Z:高阻状态(无驱动源,逻辑值由上下拉电阻决定)。
(2)进制格式(格式:位宽 +' 进制符号 + 数值)
- 二进制:
'b(如2'b01); - 八进制:
'o(如3'o15); - 十进制:
'd(如4'd10); - 十六进制:
'h(如8'h3F,适合简化宽位数据)。