首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >VHDL十大经典基础功能设计实例代码合集

VHDL十大经典基础功能设计实例代码合集

作者头像
风骏时光少年
发布2026-06-25 15:56:02
发布2026-06-25 15:56:02
350
举报

VHDL十大经典基础功能设计实例代码合集

一、文档概述

VHDL是硬件描述语言核心标准,广泛应用于FPGA、ASIC开发,入门阶段掌握基础逻辑、时序、计数器、状态机等经典模块是硬件开发必备能力。本文整理10个高频经典VHDL工程案例,覆盖组合逻辑、时序逻辑、分频、移位寄存器、状态机等核心场景,每个案例附带可直接综合、仿真的完整代码,适配Quartus、Vivado主流开发工具,适合硬件初学者快速上手实操。

二、十大经典VHDL案例代码演示

案例1:二输入与门(组合逻辑基础)

最简组合逻辑,理解实体、结构体基础语法

代码语言:javascript
复制
library ieee;
use ieee.std_logic_1164.all;

entity and2 is
port(
    a,b : in std_logic;
    y   : out std_logic
);
end entity and2;

architecture behav of and2 is
begin
    y <= a and b;
end architecture behav;

案例2:4位二进制加法器

多位运算基础,掌握矢量信号使用

代码语言:javascript
复制
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity add4 is
port(
    num1,num2 : in std_logic_vector(3 downto 0);
    sum_out   : out std_logic_vector(3 downto 0);
    carry     : out std_logic
);
end add4;

architecture behav of add4 is
signal temp : std_logic_vector(4 downto 0);
begin
    temp <= ('0' & num1) + num2;
    sum_out <= temp(3 downto 0);
    carry <= temp(4);
end behav;

案例3:D触发器(基础时序单元)

时序逻辑入门,时钟、复位信号标准写法

代码语言:javascript
复制
library ieee;
use ieee.std_logic_1164.all;

entity dff is
port(
    clk,rst,d : in std_logic;
    q         : out std_logic
);
end dff;

architecture behav 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 behav;

案例4:8位同步计数器

掌握时序进程、循环计数逻辑

代码语言:javascript
复制
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity cnt8 is
port(
    clk,rst : in std_logic;
    cnt_out : out std_logic_vector(7 downto 0)
);
end cnt8;

architecture behav of cnt8 is
signal cnt : std_logic_vector(7 downto 0);
begin
process(clk,rst)
begin
    if rst='1' then
        cnt <= (others=>'0');
    elsif rising_edge(clk) then
        cnt <= cnt + 1;
    end if;
end process;
cnt_out <= cnt;
end behav;

案例5:二分频电路

时钟分频最常用基础模块

代码语言:javascript
复制
library ieee;
use ieee.std_logic_1164.all;

entity div2 is
port(
    clk_in,rst : in std_logic;
    clk_out    : out std_logic
);
end div2;

architecture behav of div2 is
signal temp : std_logic;
begin
process(clk_in,rst)
begin
    if rst='1' then
        temp <= '0';
    elsif rising_edge(clk_in) then
        temp <= not temp;
    end if;
end process;
clk_out <= temp;
end behav;

案例6:4位移位寄存器

串行数据传输基础模块

代码语言:javascript
复制
library ieee;
use ieee.std_logic_1164.all;

entity shift4 is
port(
    clk,rst,sin : in std_logic;
    q           : out std_logic_vector(3 downto 0)
);
end shift4;

architecture behav of shift4 is
signal reg : std_logic_vector(3 downto 0);
begin
process(clk,rst)
begin
    if rst='1' then
        reg <= "0000";
    elsif rising_edge(clk) then
        reg <= reg(2 downto 0) & sin;
    end if;
end process;
q <= reg;
end behav;

案例7:3-8译码器

地址译码、外设选通核心电路

代码语言:javascript
复制
library ieee;
use ieee.std_logic_1164.all;

entity decoder38 is
port(
    din : in std_logic_vector(2 downto 0);
    dout: out std_logic_vector(7 downto 0)
);
end decoder38;

architecture behav of decoder38 is
begin
with din select
dout <= "00000001" when "000",
        "00000010" when "001",
        "00000100" when "010",
        "00001000" when "011",
        "00010000" when "100",
        "00100000" when "101",
        "01000000" when "110",
        "10000000" when others;
end behav;

案例8:多路选择器MUX8to1

数据通路切换通用模块

代码语言:javascript
复制
library ieee;
use ieee.std_logic_1164.all;

entity mux8_1 is
port(
    sel : in std_logic_vector(2 downto 0);
    datain : in std_logic_vector(7 downto 0);
    dataout : out std_logic
);
end mux8_1;

architecture behav of mux8_1 is
begin
with sel select
dataout <= datain(0) when "000",
           datain(1) when "001",
           datain(2) when "010",
           datain(3) when "011",
           datain(4) when "100",
           datain(5) when "101",
           datain(6) when "110",
           datain(7) when others;
end behav;

案例9:奇偶校验电路

通信数据校验基础设计

代码语言:javascript
复制
library ieee;
use ieee.std_logic_1164.all;

entity parity is
port(
    din : in std_logic_vector(7 downto 0);
    parity_bit : out std_logic
);
end parity;

architecture behav of parity is
begin
parity_bit <= din(0) xor din(1) xor din(2) xor din(3)
            xor din(4) xor din(5) xor din(6) xor din(7);
end behav;

案例10:三段式有限状态机FSM

复杂时序逻辑标准开发范式

代码语言:javascript
复制
library ieee;
use ieee.std_logic_1164.all;

entity fsm3seg is
type state_type is (s0,s1,s2,s3);
port(
    clk,rst,start : in std_logic;
    state_out     : out std_logic_vector(1 downto 0)
);
end fsm3seg;

architecture behav of fsm3seg is
signal curr_state,next_state : state_type;
begin
--第一段:时序逻辑 状态寄存
process(clk,rst)
begin
    if rst='1' then
        curr_state <= s0;
    elsif rising_edge(clk) then
        curr_state <= next_state;
    end if;
end process;

--第二段:组合逻辑 状态跳转
process(curr_state,start)
begin
case curr_state is
when s0 => if start='1' then next_state<=s1; else next_state<=s0; end if;
when s1 => next_state <= s2;
when s2 => next_state <= s3;
when s3 => next_state <= s0;
end case;
end process;

--第三段:组合逻辑 输出逻辑
with curr_state select
state_out <= "00" when s0,
             "01" when s1,
             "10" when s2,
             "11" when s3;
end behav;

三、使用说明

  1. 1. 编译环境:代码兼容Vivado 2018+、Quartus II 13.0及以上版本;
  2. 2. 仿真操作:新建工程,复制对应模块代码,添加testbench即可完成波形仿真;
  3. 3. 综合注意:时序模块务必同步复位/异步复位规范书写,避免亚稳态;
  4. 4. 拓展方向:可基于计数器、分频器组合设计计时器、流水灯等综合项目。

海量精选技术文档和实战案例持续更新,敬请关注【风骏时光少年】

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 风骏时光少年 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • VHDL十大经典基础功能设计实例代码合集
    • 一、文档概述
    • 二、十大经典VHDL案例代码演示
      • 案例1:二输入与门(组合逻辑基础)
      • 案例2:4位二进制加法器
      • 案例3:D触发器(基础时序单元)
      • 案例4:8位同步计数器
      • 案例5:二分频电路
      • 案例6:4位移位寄存器
      • 案例7:3-8译码器
      • 案例8:多路选择器MUX8to1
      • 案例9:奇偶校验电路
      • 案例10:三段式有限状态机FSM
    • 三、使用说明
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档