stemdetecor_moore_onehot.vhd

来自「VHDL写的大部分程序。希望大家一起学习」· VHDL 代码 · 共 70 行

VHD
70
字号
LIBRARY IEEE; 
USE ieee.std_logic_1164.all ;
ENTITY StemDetecor_moore_onehot IS
	PORT(
		clk								: IN	STD_LOGIC;    --状态机时钟
		reset							: IN	STD_LOGIC;    --异步复位
		din								: IN	STD_LOGIC;    --数据输入
		dout							: OUT	STD_LOGIC);   --检测结果输出
END StemDetecor_moore_onehot;

ARCHITECTURE behavier OF StemDetecor_moore_onehot IS

	constant A: STD_logic_vector(2 downto 0):="001";		   --定义状态编码
	constant B: STD_logic_vector(2 downto 0):="010";
	constant C: STD_logic_vector(2 downto 0):="100";
	SIGNAL present_state: STD_logic_vector(2 downto 0);
	SIGNAL next_state: STD_logic_vector(2 downto 0);
BEGIN
	update :PROCESS(reset, clk)			    --每个时钟上升沿,更新状态
     BEGIN
   	     IF (reset = '1') THEN 					--状态机复位
	 		present_state <= A;
	     ELSIF (clk'EVENT AND clk='1') THEN     --状态更新
	 		present_state <= next_state;
	     END IF;
    END PROCESS update;

	statedecoder:PROCESS(clk)					--状态译码
	BEGIN
		CASE present_state IS
			WHEN A =>
				IF din='1' THEN
					next_state <= B;
				ELSE
					next_state <= A;
				END IF;
			WHEN B =>
				IF din='0' THEN
					next_state <= A;
				ELSE
					next_state <= C;
				END IF;
			WHEN C =>
				IF din='0' THEN
					next_state <= A;
				ELSE
					next_state <= C;
				END IF;
			WHEN OTHERS =>						  --多于状态处理
				next_state<=A;
		END CASE;
	END PROCESS statedecoder;

	outputdecoder:PROCESS(clk,present_state,din)      --输出译码
	BEGIN	
		IF reset='1' THEN
			dout<='0';
		ELSE
			--IF clk'EVENT AND clk = '1' THEN			 --同步输出
				IF present_state = C THEN
					dout<='1';
				ELSE
					dout<='0';
				END IF;	
			--END IF;
	    END IF;
	END PROCESS outputdecoder;
END behavier;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?