8位 ALU 算术逻辑单元 FPGA 设计 VHDL Quartus

📅 2026/7/24 14:24:17 👁️ 阅读次数 📝 编程学习
8位 ALU 算术逻辑单元 FPGA 设计 VHDL Quartus

名称:8位 ALU 算术逻辑单元 FPGA 设计 VHDL Quartus

软件:Quartus

语言:VHDL

功能介绍

该工程实现了一个以 8 位 ALU 为核心的 VHDL 数字系统,适合学习 FPGA 中组合逻辑模块的拆分、功能选择控制、测试平台编写以及顶层板级接口连接。设计包含加法/减法器、桶形移位器、ALU、数码管译码和顶层控制等内容,能够从基础运算单元逐步扩展到可在开发板接口上观察的完整工程结构。 ALU 根据 Fsel 选择不同处理方式,既包括加减等基础算术操作,也包括取反、异或非等逻辑操作。加减法模块使用 Sub 信号切换模式;桶形移位器使用 LRn、K 与 Ci 分别控制移位方向、移位量和移入值。这样的模块划分清晰,便于逐个理解、独立仿真和替换扩展。 顶层 DE10_LITE 定义了时钟、按键、拨码开关、LED 与六位数码管接口,工程可作为 Quartus 下 VHDL ALU 课程设计、实验作业和板级接口练习的参考。付费内容包含 Quartus 工程、VHDL 源码、约束配置及相关仿真资料。

运行环境

硬件描述语言:VHDL 开发软件:Intel Quartus 工程包含 Quartus 工程文件、管脚分配文件和 SDC 时序约束文件,可在 Quartus 中打开工程后进行编译、仿真配置与下载验证。

设计思路

本设计围绕 8 位算术逻辑单元构建,采用分层 VHDL 结构实现基础算术、逻辑处理和结果显示。输入数据由顶层接口接入,ALU 根据功能选择信号 Fsel 决定当前运算类型,并将运算结果交由显示转换模块输出,便于在数码管和 LED 接口上直观观察结果。 算术部分由 AddSub 模块完成加法与减法控制:Sub 为低电平时执行加法,Sub 为高电平时执行减法。移位功能由 Barrel Shifter 模块实现,LRn 控制左右移方向,K 指定移位位数,Ci 作为移入数据,因此可用于理解组合移位器的结构与控制方式。 ALU 的功能选择覆盖常规运算与指定逻辑运算。例如 Fsel 为 0001 时保持不执行运算,0111 对应 A-B,1000 对应 B 取反,1011 对应异或非运算。工程同时配套测试平台,可用于对加减法、移位器和 ALU 的典型输入组合进行仿真验证。

模块结构

DE10_LITE:顶层接口模块,连接时钟、按键、拨码开关、LED 与数码管。 ALU:8 位算术逻辑单元,根据 Fsel 完成运算类型选择。 AddSub:加法/减法模块,使用 Sub 控制加减模式。 BrlSht:桶形移位模块,支持左右移、可配置移位位数与移入值。 FA:全加器基础单元。 MUX21:二选一多路选择模块。 bin2hex:二进制结果到七段数码管显示编码的转换模块。 ALU_tb、AddSub_tb、BrlSht_tb、SAM_tb:对应功能模块的仿真测试平台。

开发板验证

工程提供了顶层管脚分配文件与时序约束文件,DE10_LITE 顶层将时钟、按键、拨码开关、LED 和六位数码管接口集中定义,可用于开发板上的下载与接口对应验证。结合工程编译输出,可作为 VHDL 算术逻辑单元及其板级显示、输入控制连接的参考实现。

演示视频

提供 ALU 相关仿真演示视频,可配合工程观察运算模块与控制逻辑的运行过程。

演示视频请关注公众号后获取对应资料查看。

演示视频请关注公众号后获取对应资料查看。

演示视频请关注公众号后获取对应资料查看。

仿真图/仿真说明/设计文档图片

设计文档给出了 AddSub、BrlSht 和 8 位 ALU 的仿真说明与截图。AddSub 仿真用于观察 Sub 切换加减法后的结果;BrlSht 仿真用于观察 LRn 控制左右移、K 控制移位位数、Ci 控制移入值的变化;ALU 仿真展示了不同 Fsel 编码对应的运算选择及输出结果。

部分代码

以下展示顶层模块DE10_LITE的部分代码,完整代码可关注下方公众号卡片获取。

entity DE10_LITE is port ( -- CLOCK ADC_CLK_10: in std_logic; MAX10_CLK1_50: in std_logic; MAX10_CLK2_50: in std_logic; -- SEG7 HEX0: out std_logic_vector(7 downto 0); HEX1: out std_logic_vector(7 downto 0); HEX2: out std_logic_vector(7 downto 0); HEX3: out std_logic_vector(7 downto 0); HEX4: out std_logic_vector(7 downto 0); HEX5: out std_logic_vector(7 downto 0); -- KEY (debounced) KEY: in std_logic_vector(1 downto 0); -- LED LEDR: out std_logic_vector(9 downto 0); -- SW SW: in std_logic_vector(9 downto 0)); end DE10_LITE;

代码获取:下方公众号
“FPGA代码设计学习资料”