运算单元的时序控制器(VHDL)
-- 库声明使用标准逻辑库 library IEEE; use IEEE.STD_LOGIC_1164.ALL; -- 有限状态机实体运算单元时序控制器 entity FSM is port ( clock: in std_logic; -- 系统时钟下降沿更新状态 reset : in std_logic; -- 高电平复位复位后回到初始空闲状态 acc, start : in std_logic; -- acc1累加模式 / acc0普通运算start启动信号 STATE_OUT : out std_logic_vector(2 downto 0); -- 3bit状态编码用于观测当前阶段 WRA, WRB, WRC, SEL : out std_logic -- 寄存器写使能、运算通路选择信号 ); end fsm; architecture Behavioral of FSM is -- 定义状态枚举5个工作阶段 type state is (init, fetch, procc, write_result, accumulate); signal current_state, next_state : state; -- 当前状态、下一状态缓存信号 begin -- 时序进程状态寄存器只负责保存/更新状态 process (clock, reset) begin if (reset1) then current_state init; -- 复位强制进入空闲初始态 elsif(falling_edge(clock)) then current_statenext_state; -- 时钟下降沿刷新当前状态为预计算的次态 END IF; end process; -- 组合逻辑进程完成状态跳转判断 所有控制输出赋值 process(start, acc) begin case(current_state) is when init -- 初始空闲状态编码000等待启动信号 STATE_OUT000; WRA 0; WRB 0; WRC 0; SEL 0; -- 根据acc区分两种工作模式 IF (START1 and acc0) then next_statefetch; -- 普通运算跳转取数阶段 elsif (START1 and acc1) then next_state accumulate; -- 累加运算跳转累加准备阶段 else next_stateinit; -- 无启动信号保持空闲 end if; when fetch -- 取数阶段编码001存入A、B两个操作数 STATE_OUT001; WRA 1; -- 打开A寄存器写入 WRB 1; -- 打开B寄存器写入 WRC 0; SEL 0; next_stateprocc; -- 取数完成直接进入运算阶段 when accumulate -- 累加准备阶段编码010切换累加运算通路 STATE_OUT010; WRA 0; WRB 0; WRC 1; -- 写入累加寄存器C SEL 1; -- 多路选择器切到累加通路 next_stateprocc; -- 准备完成进入运算阶段 when procc -- 运算计算阶段编码011仅执行运算不写寄存器 STATE_OUT011; WRA 0; WRB 0; next_statewrite_result; -- 运算结束跳转写结果 when write_result -- 结果回存阶段编码100运算结果存入C寄存器 STATE_OUT100; WRA 0; WRB 0; WRC 1; -- 将计算结果写入C保存 SEL 0; next_stateinit; -- 保存完成回到空闲等待下一次启动 end case; end process; end behavioral;