• 方案介绍
  • 相关推荐
申请入驻 产业图谱

多位计数器 FPGA 设计 VHDL Vivado

06/23 15:48
32
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

名称:多位计数器 FPGA 设计 VHDL Vivado

软件:Vivado

语言:VHDL

功能介绍

本设计实现一个基于 VHDL 的多位计数器模块,顶层模块名称为 counter。模块提供时钟 clk、使能 en 和复位 rst 输入,并输出 CNT1、CNT2、CNT3、CNT4 四组 4 位无符号计数结果,适合用于 FPGA 数字逻辑课程设计、计数显示前级逻辑、分级计数结构学习等场景。

计数输出采用 UNSIGNED(3 DOWNTO 0) 类型,每一路计数值均为 4 位宽度,便于后续连接数码管译码、状态显示、计数级联或其他数字系统模块。通过独立的使能和复位控制,设计具备常见同步逻辑工程所需的基本控制接口。

工程同时配套 Testbench,可用于在 Vivado 仿真环境中观察计数器在时钟、复位、使能条件下的行为变化,帮助理解计数逻辑的时序关系和输出变化过程。

运行环境

开发语言:VHDL

开发软件:Vivado

工程类型:FPGA/VHDL 工程

仿真文件:testbench.vhd

主设计文件:counter.vhd

顶层模块:counter

设计思路

设计以 counter 模块作为核心计数单元,外部通过 clk 提供时序基准,通过 rst 控制计数状态复位,通过 en 控制计数器是否工作。该接口形式清晰,便于在更大的 FPGA 系统中作为基础功能模块复用。

CNT1、CNT2、CNT3、CNT4 四个输出端口均定义为 4 位 UNSIGNED 类型,能够直接表达 0 到 15 范围内的二进制计数值。多路计数输出的结构适合扩展为多位十进制/十六进制计数显示,也便于在仿真波形中分别观察各级计数状态。

Testbench 用于构造仿真激励,对 counter 模块进行行为级验证。通过仿真可观察复位、使能和时钟作用下的输出变化,从而确认模块接口和基本计数逻辑是否符合预期。设计文档中包含工程文件、程序文件、程序编译、RTL 图、Testbench 和仿真图等内容,便于学习者对照工程结构理解完整开发流程。

模块结构

主要模块包括:

1. counter:计数器主模块,包含 clk、en、rst 输入,以及 CNT1、CNT2、CNT3、CNT4 四路 4 位计数输出。

2. test:仿真测试模块,用于对 counter 进行 Testbench 行为仿真。

主要工程文件包括 counter.xpr、counter.vhd、testbench.vhd,可在 Vivado 中打开工程并进行综合、RTL 查看和仿真。

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

设计文档包含工程文件、程序文件、程序编译、RTL 图、Testbench 和仿真图等内容。工程中包含 Vivado XSIM 行为仿真相关文件,可用于查看 testbench 对 counter 模块的仿真过程。

多位计数器 FPGA 设计 VHDL Vivado 设计文档图片 image9.png

多位计数器 FPGA 设计 VHDL Vivado 设计文档图片 image8.png

多位计数器 FPGA 设计 VHDL Vivado 设计文档图片 image7.png

多位计数器 FPGA 设计 VHDL Vivado 设计文档图片 image6.png

多位计数器 FPGA 设计 VHDL Vivado 设计文档图片 image10.png

多位计数器 FPGA 设计 VHDL Vivado 设计文档图片 image5.png

多位计数器 FPGA 设计 VHDL Vivado 设计文档图片 image4.png

多位计数器 FPGA 设计 VHDL Vivado 设计文档图片 image3.png

多位计数器 FPGA 设计 VHDL Vivado 设计文档图片 image2.png

多位计数器 FPGA 设计 VHDL Vivado 设计文档图片 image1.png

部分代码

以下展示顶层模块 counter 的部分代码,完整源码请下载压缩包查看。

ENTITY counter IS
   PORT (
      clk   : IN STD_LOGIC;
      en    : IN STD_LOGIC;
      rst   : IN STD_LOGIC;
      CNT1  : OUT UNSIGNED(3 DOWNTO 0);
      CNT2  : OUT UNSIGNED(3 DOWNTO 0);
      CNT3  : OUT UNSIGNED(3 DOWNTO 0);
      CNT4  : OUT UNSIGNED(3 DOWNTO 0)
   );
END counter;

代码文件(付费下载)

相关推荐