六步骤流程控制器 VHDL Quartus

名称:六步骤流程控制器 VHDL Quartus

软件:Quartus

语言:VHDL

功能介绍

这是一个基于VHDL和Quartus的多步骤流程控制工程,适合实现具有固定工序、定时执行和重复次数要求的控制任务。系统通过启动按键开始运行,依次执行六个步骤,并在数码管上输出当前单次倒计时,同时提供步骤编号、毫秒级进度和流程结束指示信号。 工程将控制逻辑、数码管译码和LED驱动拆分为独立模块。流程控制器负责状态机、计时和重复执行;seg7_encoder负责倒计时数字到七段显示码的转换;led_driver根据过程进度产生LED显示效果;顶层模块完成各部分连接,测试平台work_controller_tb用于仿真验证。该结构便于学习VHDL时序逻辑、状态机设计、计数器以及多模块层次化集成。

运行环境

开发语言:VHDL 开发软件:Intel Quartus 工程顶层:work_controller_top 输入时钟:10Hz,单拍时间为100ms 主要工程文件:work_controller_top.qsf、process_controller.vhd、seg7_encoder.vhd、led_driver.vhd、work_controller_tb.vhd及顶层VHDL文件。

设计思路

本设计将完整流程划分为空闲、运行和结束三种状态,由process_controller统一管理启动、复位、步骤切换、单次计时和重复次数。start_key通过保存上一拍状态进行上升沿检测,避免按键保持高电平时重复触发;rst_n为低电平同步复位,系统复位后回到IDLE状态并清零步骤、计时和结束指示。 流程共有六个步骤,每个步骤具有独立的单次时长和重复次数:第一步6秒,第二步12秒并重复2次,第三步24秒,第四步8秒并重复3次,第五步10秒,第六步5秒。运行期间以10Hz时钟为基础,每拍累加100ms;当当前单次时长完成时,优先判断是否还有剩余重复次数,若有则清零本次计时并继续当前步骤,否则进入下一步骤。第六步完成后进入DONE状态并点亮结束指示灯,同时保留重新按键启动新流程的能力。 控制模块对外提供当前步骤号、倒计时十位和个位、当前单次已用毫秒以及结束指示信号。elapsed_ms可用于驱动LED动画,倒计时数字交由数码管显示模块处理,使流程控制、显示译码和LED驱动之间保持清晰的功能边界。

模块结构

工程顶层为work_controller_top,主要由以下模块组成: 1. process_controller:核心流程控制模块,管理IDLE、RUNNING、DONE状态,完成启动沿检测、复位、步骤计时、重复次数判断和结束状态控制。 2. seg7_encoder:将控制模块输出的十位和个位数字转换为数码管显示信号。 3. led_driver:依据当前步骤和elapsed_ms等过程信号驱动LED显示,用于呈现流程进度或动画效果。 4. work_controller_tb:测试平台,用于对顶层控制流程及各模块连接进行仿真激励。 5. work_controller_top:工程顶层封装,负责时钟、复位、启动按键、数码管和LED接口之间的连接。

演示视频

配套演示视频展示了工程运行过程,可用于了解流程启动、步骤切换、重复执行、数码管倒计时以及结束指示的整体效果。视频与工程文件配合使用,便于在导入Quartus工程后对照检查各模块信号和显示状态。

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

工程配套设计文档包含工程文件说明、程序结构、编译结果、RTL结构图、顶层仿真图以及控制模块、LED驱动模块和数码管显示模块的说明。工程目录同时提供process_controller、led_driver和顶层相关的波形工程文件,可用于在Quartus仿真环境中观察启动沿、步骤切换、重复计时、倒计时输出和结束状态等关键信号。

六步骤流程控制器 VHDL Quartus 设计文档图片 image1.png

六步骤流程控制器 VHDL Quartus 设计文档图片 image10.png

六步骤流程控制器 VHDL Quartus 设计文档图片 image11.png

六步骤流程控制器 VHDL Quartus 设计文档图片 image12.png

六步骤流程控制器 VHDL Quartus 设计文档图片 image13.png

六步骤流程控制器 VHDL Quartus 设计文档图片 image14.png

六步骤流程控制器 VHDL Quartus 设计文档图片 image2.png

六步骤流程控制器 VHDL Quartus 设计文档图片 image3.png

六步骤流程控制器 VHDL Quartus 设计文档图片 image4.png

六步骤流程控制器 VHDL Quartus 设计文档图片 image5.png

六步骤流程控制器 VHDL Quartus 设计文档图片 image6.png

六步骤流程控制器 VHDL Quartus 设计文档图片 image7.png

六步骤流程控制器 VHDL Quartus 设计文档图片 image8.png

六步骤流程控制器 VHDL Quartus 设计文档图片 image9.png

部分代码

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

library ieee;
use ieee.std_logic_1164.all;

-- 控制模块:管理工序步骤、重复次数与倒计时(单位:秒),输入时钟为10Hz(100ms一拍)
-- 设计思路:
-- 1)start_key上升沿启动流程;rst_n为低时同步复位;
-- 2)每个步骤有固定“单次时长”(毫秒)与“重复次数”;计满一次则根据重复次数决定是否继续当前步骤或进入下一步骤;
-- 3)对外输出:当前步骤号(1~6)、当前单次倒计时秒数(HEX显示)、当前单次已用毫秒(LED动画用)、结束指示灯。
entity process_controller is
  port (
    clk        : in  std_logic;                   -- 10Hz时钟
    rst_n      : in  std_logic;                   -- 低电平复位
    start_key  : in  std_logic;                   -- 高电平按下,检测上升沿
    step_idx   : out integer range 0 to 9;        -- 当前步骤号(0表示空闲/未启动)
    tens_digit : out integer range 0 to 9;        -- 倒计时十位
    ones_digit : out integer range 0 to 9;        -- 倒计时个位
    elapsed_ms : out integer range 0 to 24000;    -- 当前单次已用毫秒(用于LED动画)
    end_led    : out std_logic                    -- 流程结束指示,高电平亮
  );
end entity;

architecture rtl of process_controller is
  -- 状态定义:空闲、运行、结束
  type state_t is (IDLE, RUNNING, DONE);
  signal state       : state_t := IDLE;
  
  signal time_sec_int   : integer range 0 to 99;       -- 当前单次倒计时(秒)

  -- 步骤与计时寄存器
  signal step        : integer range 0 to 9 := 0;     -- 当前步骤号
  signal rep_left    : integer range 0 to 3 := 0;     -- 当前步骤剩余重复次数
  signal t_ms        : integer range 0 to 24000 := 0; -- 当前单次已用毫秒
  signal prev_start  : std_logic := '0';              -- start_key上一拍,用于沿检测

  -- 各步骤单次时长(毫秒)
  -- 第一步6秒;第二步12秒×2次;第三步24秒;第四步8秒×3次;第五步10秒;第六步5秒
  function step_total_ms_func(s: integer) return integer is
  begin
    case s is
      when 1      => return 6000;
      when 2      => return 12000;
      when 3      => return 24000;
      when 4      => return 8000;
      when 5      => return 10000;
      when 6      => return 5000;
      when others => return 0;
    end case;
  end;

  -- 各步骤重复次数
  function step_repeat_func(s: integer) return integer is
  begin
    case s is
      when 2      => return 2;
      when 4      => return 3;
      when others => return 1;
    end case;
  end;

begin
  -- 主时序过程:按1ms累加,管理步骤与重复次数
  process(clk)
    variable total_ms : integer;
  begin
    if rising_edge(clk) then
      if rst_n = '0' then
        state    <= IDLE;
        step     <= 0;
        rep_left <= 0;
        t_ms     <= 0;
        end_led  <= '0';
        prev_start <= '0';
      else
        prev_start <= start_key;
        -- 空闲态:等待启动
        if state = IDLE then
          end_led <= '0';
          if (start_key = '1' and prev_start = '0') then
            step     <= 1;
            rep_left <= step_repeat_func(1);
            t_ms     <= 0;
            state    <= RUNNING;
          end if;
        -- 运行态:按当前步骤单次时长计时
        elsif state = RUNNING then
          total_ms := step_total_ms_func(step);
          if t_ms < total_ms then
            t_ms <= t_ms + 100; -- 10Hz时钟,100ms累加
          else
            -- 完成一次单次时长
            if rep_left > 1 then
              rep_left <= rep_left - 1;
              t_ms     <= 0;
            else
              if step < 6 then
                step     <= step + 1;
                rep_left <= step_repeat_func(step + 1);
                t_ms     <= 0;
              else
                state   <= DONE;
                end_led <= '1';
              end if;
            end if;
          end if;
        -- 结束态:保持结束指示,支持重新启动
        elsif state = DONE then
				step     <= 0;
			 if (start_key = '1' and prev_start = '0') then
            end_led  <= '0';
            step     <= 1;
            rep_left <= step_repeat_func(1);
            t_ms     <= 0;
            state    <= RUNNING;
          end if;
        end if;
      end if;
    end if;
  end process;

  -- 输出映射
// ... 以下代码略,完整源码请下载压缩包查看

代码文件(付费下载)

📥 付费后此处显示完整工程压缩包下载链接。
1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 六步骤流程控制器 VHDL Quartus

注册为本站会员,充值100得150,详情咨询客服

目前为止共有 *** 位优秀的会员加入! 立刻加入会员