上次 ,我使用FSM将Verilog码与序列检测器一起呈现。被检测的序列是“1011”。
这 VHDL项目 呈现完整的VHDL代码 摩尔fsm. 序列探测器。还提供了VHDL测试窗用于模拟。要检测的序列是“1001”。

序列检测器的MOORE FSM状态图如下图所示。

摩尔FSM序列检测器的VHDL码基于Moore FSM的状态图和框图设计:
-- fpga4student.com: FPGA projects, Verilog projects, VHDL projects -- VHDL project: VHDL code for Sequence Detector using Moore FSM -- The sequence being detected is "1001" or One Zero Zero One library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity VHDL_MOORE_FSM_Sequence_Detector is port ( clock: in std_logic; --- clock signal reset: in std_logic; -- reset input sequence_in: in std_logic; -- binary sequence input detector_out: out std_logic -- output of the VHDL sequence detector ); end VHDL_MOORE_FSM_Sequence_Detector; architecture Behavioral of VHDL_MOORE_FSM_Sequence_Detector is type MOORE_FSM is (Zero, One, OneZero, OneZeroZero, OneZeroZeroOne); signal current_state, next_state: MOORE_FSM; begin -- Sequential memory of the VHDL MOORE FSM Sequence Detector process(clock,reset) begin if(reset='1') then current_state <= Zero; elsif(rising_edge(clock)) then current_state <= next_state; end if; end process; -- Next state logic of the VHDL MOORE FSM Sequence Detector -- Combinational logic process(current_state,sequence_in) begin case(current_state) is when Zero => if(sequence_in='1') then -- "1" next_state <= One; else next_state <= Zero; end if; when One => if(sequence_in='0') then -- "10" next_state <= OneZero; else next_state <= One; end if; when OneZero => if(sequence_in='0') then -- "100" next_state <= OneZeroZero; else next_state <= One; end if; when OneZeroZero => if(sequence_in='1') then -- "1001" next_state <= OneZeroZeroOne; else next_state <= Zero; end if; when OneZeroZeroOne => if(sequence_in='1') then next_state <= One; else next_state <= OneZero; end if; end case; end process; -- Output logic of the VHDL MOORE FSM Sequence Detector process(current_state) begin case current_state is when Zero => detector_out <= '0'; when One => detector_out <= '0'; when OneZero => detector_out <= '0'; when OneZeroZero => detector_out <= '0'; when OneZeroZeroOne => detector_out <= '1'; end case; end process; end Behavioral;
使用Moore FSM的序列探测器VHDL Testbench:
-- fpga4student.com: FPGA projects, Verilog projects, VHDL projects -- VHDL project: VHDL code for Sequence Detector using Moore FSM -- VHDL testbench for Moore FSM Sequence Detector LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY tb_VHDL_Moore_FSM_Sequence_Detector IS END tb_VHDL_Moore_FSM_Sequence_Detector; ARCHITECTURE behavior OF tb_VHDL_Moore_FSM_Sequence_Detector IS -- Component Declaration for the Moore FSM Sequence Detector in VHDL COMPONENT VHDL_MOORE_FSM_Sequence_Detector PORT( clock : IN std_logic; reset : IN std_logic; sequence_in : IN std_logic; detector_out : OUT std_logic ); END COMPONENT; --Inputs signal clock : std_logic := '0'; signal reset : std_logic := '0'; signal sequence_in : std_logic := '0'; --Outputs signal detector_out : std_logic; -- Clock period definitions constant clock_period : time := 10 ns; BEGIN -- Instantiate the Moore FSM Sequence Detector in VHDL uut: VHDL_MOORE_FSM_Sequence_Detector PORT MAP ( clock => clock, reset => reset, sequence_in => sequence_in, detector_out => detector_out ); -- Clock process definitions clock_process :process begin clock <= '0'; wait for clock_period/2; clock <= '1'; wait for clock_period/2; end process; -- Stimulus process stim_proc: process begin -- hold reset state for 100 ns. sequence_in <= '0'; reset <= '1'; -- Wait 100 ns for global reset to finish wait for 30 ns; reset <= '0'; wait for 40 ns; sequence_in <= '1'; wait for 10 ns; sequence_in <= '0'; wait for 10 ns; sequence_in <= '1'; wait for 20 ns; sequence_in <= '0'; wait for 20 ns; sequence_in <= '1'; wait for 20 ns; sequence_in <= '0'; -- insert stimulus here wait; end process; END;
VHDL中摩尔FSM序列检测器的仿真波形:
推荐的 VHDL项目 :
1. 什么是FPGA? VHDL如何在FPGA上使用
2. FIFO内存的VHDL代码
3. FIR筛选器的VHDL代码
4. 8位微控制器的VHDL代码
5. 矩阵乘法的VHDL代码
6. 用于开关尾圈计数器的VHDL代码
7. FPGA上数字闹钟的VHDL代码
8. 8位比较器的VHDL代码
9. 如何使用VHDL将文本文件加载到FPGA中
10。 D触发器的VHDL代码
11. 完整加法器的VHDL代码
12. VHDL中的PWM发生器,具有可变占空比
13。 ALU的VHDL代码
14。 VHDL代码用于测试台的计数器
15. 16位ALU的VHDL代码
16。 vhdl的变速器设计
17。 VHDL中的非线性查找表实现
18。 VHDL中的加密协处理器设计
1. 什么是FPGA? VHDL如何在FPGA上使用
2. FIFO内存的VHDL代码
3. FIR筛选器的VHDL代码
4. 8位微控制器的VHDL代码
5. 矩阵乘法的VHDL代码
6. 用于开关尾圈计数器的VHDL代码
7. FPGA上数字闹钟的VHDL代码
8. 8位比较器的VHDL代码
9. 如何使用VHDL将文本文件加载到FPGA中
10。 D触发器的VHDL代码
11. 完整加法器的VHDL代码
12. VHDL中的PWM发生器,具有可变占空比
13。 ALU的VHDL代码
14。 VHDL代码用于测试台的计数器
15. 16位ALU的VHDL代码
16。 vhdl的变速器设计
17。 VHDL中的非线性查找表实现
18。 VHDL中的加密协处理器设计
20。 FPGA时钟分频器的VHDL代码
没意见:
发表评论