下面是对 VHDL(VHSIC Hardware Description Language)语言基础的系统性讲解,适合初学者学习和掌握数字电路设计中的 VHDL 编码。


🧠 一、VHDL 是什么?

VHDL 是一种用于描述数字系统的硬件描述语言,它可以用来建模、仿真和综合逻辑电路,广泛应用于 FPGA 和 ASIC 开发中。

VHDL 不是程序语言,而是电路建模语言

  • 编写的不是指令序列,而是硬件行为或结构
  • 主要用于描述门级、寄存器传输级(RTL)、系统级的设计

📌 二、VHDL 文件基本结构

library ieee;
use ieee.std_logic_1164.all;

entity <模块名> is
    port (
        <端口定义>
    );
end <模块名>;

architecture <结构名> of <模块名> is
    <信号声明>
begin
    <行为描述或结构连接>
end <结构名>;

🧩 三、关键概念简要说明

概念说明
library / use引入标准库(IEEE 库)用于逻辑表示
entity实体(模块接口定义)
architecture架构(模块内部行为/结构实现)
signal信号,用于模块内部通信
port接口端口(输入输出)
process过程块(常用于同步逻辑)
if/elsif / case条件判断
when/with多路选择
<=信号赋值

⚙️ 四、VHDL 端口类型

类型说明
in输入端口
out输出端口
inout双向端口
buffer可读可写输出端口

常用类型

std_logic        -- 单比特
std_logic_vector -- 多比特(如总线)

🛠️ 五、常见模块实例

1️⃣ 与门

entity AndGate is
    port (
        A, B : in std_logic;
        Y    : out std_logic
    );
end AndGate;

architecture Behavioral of AndGate is
begin
    Y <= A and B;
end Behavioral;

2️⃣ 2选1多路选择器(MUX)

entity MUX2 is
    port (
        A, B  : in std_logic;
        SEL   : in std_logic;
        Y     : out std_logic
    );
end MUX2;

architecture Behavioral of MUX2 is
begin
    Y <= A when SEL = '0' else B;
end Behavioral;

3️⃣ 异步复位 D 触发器

entity DFF is
    port (
        clk   : in std_logic;
        rst   : in std_logic;
        D     : in std_logic;
        Q     : out std_logic
    );
end DFF;

architecture Behavioral of DFF is
begin
    process(clk, rst)
    begin
        if rst = '1' then
            Q <= '0';
        elsif rising_edge(clk) then
            Q <= D;
        end if;
    end process;
end Behavioral;

🔄 六、仿真 vs 综合(Simulation vs Synthesis)

阶段说明
仿真(Simulation)用于验证逻辑功能正确性(Modelsim等工具)
综合(Synthesis)将 VHDL 转为门级结构,可烧录进 FPGA(如 Vivado、Quartus)

✅ 七、常用 IEEE 库

library ieee;
use ieee.std_logic_1164.all;      -- 逻辑电平(std_logic)
use ieee.numeric_std.all;         -- 整数运算(signed, unsigned)

💬 八、VHDL 小贴士

  • 所有信号赋值必须使用 <=(非 C 语言的 =
  • 所有信号值均为9态(’0′, ‘1’, ‘Z’, ‘U’, ‘X’, ‘W’, ‘L’, ‘H’, ‘-‘)
  • 多位信号使用 std_logic_vector
  • rising_edge(clk) 是标准的时钟上升沿检测方式

📚 九、学习路径建议

  1. 学习数字逻辑电路基础(组合逻辑、时序逻辑)
  2. 学习 VHDL 语法(可从 And、Or、Mux、寄存器模块入手)
  3. 使用仿真软件(如 ModelSim)
  4. 尝试综合并下载到 FPGA(如使用 Vivado + Xilinx 板卡)
  5. 进一步扩展状态机、计数器、串口、RAM 等模块设计

如果你需要:

  • ✅ 详细的 PDF 学习手册
  • ✅ ModelSim/Vivado 工程模板
  • ✅ 进阶应用(如状态机、UART、SPI)
  • ✅ 转为 Verilog 比较学习