掌握 VHDL:FPGA 与 ASIC 设计的全面入门指南
教程:VHDL 简介
VHDL 是个拗口的缩写:VHSIC Hardware Description Language。其中 VHSIC 代表 Very High Speed Integrated Circuit。全称展开为:Very High Speed Integrated Circuit Hardware Description Language。VHDL 与 Verilog 是教育界与工业界设计 FPGA 与 ASIC 的两大主流语言,其硬件描述范式与 C、Java 等传统软件语言截然不同。
本例将创建一个描述与门的 VHDL 文件。与门有两个输入、一个输出,仅当两输入均为 1 时输出为 1。下图为我们要描述的与门逻辑符号。
VHDL 基础:信号与赋值
VHDL 的基本单元是信号。暂时理解为信号仅取 0 或 1(实际还有其他取值,后续介绍)。基础逻辑代码示例:
signal and_gate : std_logic; and_gate <= input_1 and input_2;
第一行定义名为 and_gate 的 std_logic 类型信号(最常用类型)。该代码生成一个双输入单输出的与门。and 为保留关键字,<= 为赋值运算符。读作:“信号 and_gate 取 input_1 与 input_2 的与运算结果。”
实体:定义输入输出接口
input_1、input_2 来自外部,需在实体中声明。实体包含端口,定义所有输入输出信号:
entity example_and is
port (
input_1 : in std_logic;
input_2 : in std_logic;
and_result: out std_logic
);
end example_and;
定义了名为 example_and 的实体,含两个输入、一个输出,均为 std_logic 类型。
架构:描述功能行为
架构描述实体的具体功能。打个比方:实体是论文目录,架构是正文内容。为上述实体创建架构:
architecture rtl of example_and is signal and_gate : std_logic; begin and_gate <= input_1 and input_2; and_result <= and_gate; end rtl;
架构名 rtl(Register Transfer Level),隶属于实体 example_and。is 与 begin 间声明内部信号,begin 与 end 间编写逻辑。
库引用
还需指定库文件,定义关键字行为。文件开头必须包含:
library ieee; use ieee.std_logic_1164.all;
完整的与门 VHDL 代码
library ieee;
use ieee.std_logic_1164.all;
entity example_and is
port (
input_1 : in std_logic;
input_2 : in std_logic;
and_result: out std_logic
);
end example_and;
architecture rtl of example_and is
signal and_gate : std_logic;
begin
and_gate <= input_1 and input_2;
and_result <= and_gate;
end rtl;
仅一个与门就需编写这么多代码?首先,与门并不“愚蠢”。其次,VHDL 确实冗长——软件中简单的任务在 HDL 中往往耗时更长。但请让软件工程师尝试用 C 语言驱动 VGA 显示康威生命游戏,他们会大吃一惊!那个视频正是用 VHDL + FPGA 实现的,您很快也能做到。
下一节将介绍另一个核心关键字:process。
VHDL
- 精通 VHDL Generate 语句:轻松构建可复用去抖动器
- VHDL入门:构建你的第一个与门
- 掌握VHDL有符号与无符号类型:实战洞察
- 理解 VHDL 中信号与变量的区别
- 掌握VHDL端口映射实例化实战指南
- 掌握VHDL std_logic:状态、分辨函数与波形分析
- 什么是 VHDL?硬件描述语言实用指南
- 基于 Tcl 驱动的 VHDL 密码锁模块测试平台
- VHDL 实现 PWM 控制器:设计、仿真与 FPGA 演示
- VUnit 101:自动化VHDL验证实战指南
- 掌握 VHDL Loop 与 Exit 构造:实用指南
- 基于 Ready/Valid 握手在块 RAM 中实现 AXI FIFO