1. FPGA自动售货机项目概述
作为一名FPGA开发工程师,我经常遇到初学者对Verilog语法感到困惑的情况。今天我想通过一个自动售货机的实际项目,带大家从零开始理解FPGA开发的基础知识。这个项目非常适合刚接触FPGA的朋友,因为它涵盖了数字电路设计的核心概念,同时又足够直观有趣。
自动售货机看似简单,但它包含了状态机、数据处理、用户交互等FPGA开发的典型要素。在DAY1的内容中,我们将重点解析项目的Verilog代码基础部分,特别是数据类型和控制结构这些看似基础但极其重要的概念。
提示:如果你是第一次接触FPGA开发,建议先准备好Quartus或Vivado开发环境,这样可以在阅读的同时动手实践代码示例。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Verilog核心数据类型解析
2.1 wire类型:硬件连接的桥梁
wire类型是Verilog中最基础的数据类型,它直接对应硬件中的物理连线。在自动售货机项目中,所有的输入输出端口都默认使用wire类型:
verilog复制input [0:2] KEY; // 3位按键输入
input [0:9] SW; // 10位拨码开关输入
output [0:9] LEDR; // 10位LED输出
output [0:6] HEX5; // 7段数码管输出
wire类型有几个重要特性:
- 它只负责传输信号,不具备存储功能
- 默认值为高阻态(z)
- 在连续赋值语句(assign)中必须使用wire类型
- 模块间的信号连接必须使用wire类型
在实际项目中,我习惯将所有显式连接的信号都声明为wire,即使它默认就是wire类型。这样可以提高代码的可读性:
verilog复制wire [3:0] product_selected; // 明确声明为wire类型
2.2 reg类型:存储与状态保持
与wire不同,reg类型可以存储数值,相当于硬件中的寄存器。在自动售货机项目中,我们需要用reg来保存各种状态信息:
verilog复制reg[1:0] escolher; // 2位选择状态
reg[7:0] produto_escolhido; // 8位商品编码
reg
