⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ps2.vhd

📁 有關於EP2C的一些程序(EX:I2C,FLASH,IRDA,MUSIC,LED,LIGHT,SRAM,UART,PS2,SPI )
💻 VHD
字号:
---------------------------------------------------------------------------------------------------
--*************************************************************************************************
--  CreateDate  :  2007-07-12 
--  ModifData   :  2007-07-12 
--  Description :  PS2 ( Synchronous, Data bits: 8 ) 
--  Author      :  Explorer01 
--  Version     :  V1.0  
--*************************************************************************************************
---------------------------------------------------------------------------------------------------

-- VHDL library Declarations 
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.std_logic_unsigned.ALL;

---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
-- The Entity Declarations 
ENTITY PS2 IS
	PORT 
	(
		RESET: 	IN STD_LOGIC;
		GCLK:   IN STD_LOGIC;
		
		KBDATA: IN STD_LOGIC; 
		KBCLK:  IN STD_LOGIC;
		
		EOC:   OUT STD_LOGIC;
		PDATA: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)
	);
END PS2;

---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
-- The Architecture of Entity Declarations 
ARCHITECTURE Behavioral OF PS2 IS
	SIGNAL CLK  : STD_LOGIC;
	SIGNAL DATA : STD_LOGIC;
	
	SIGNAL spdata:  STD_LOGIC_VECTOR(10 DOWNTO 0);
	SIGNAL cnt8:    INTEGER RANGE 0 TO 10;
	
	SIGNAL Flag  : STD_LOGIC;
	SIGNAL Count : STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
	
	DATA <= KBDATA; 
	-------------------------------------------------
	-- Optimize : CLK Filter  
	PROCESS( RESET, GCLK, KBCLK, Count )
	BEGIN
		IF( RESET='0' ) THEN 
			CLK <= '1';
			Count <= (OTHERS=>'0');
		ELSIF( KBCLK='0' ) THEN 
			IF( GCLK'EVENT AND GCLK='1' ) THEN 
				IF( Count<"1110" ) THEN Count <= Count + 1; 
				ELSE 					Count <= "1111"; CLK <= '0';
				END IF; 
			END IF; 
		ELSE 
			CLK <= '1';
			Count <= (OTHERS=>'0');
		END IF; 
	END PROCESS; 
	
	-------------------------------------------------
	-- Check flag of end 
	PROCESS( RESET, GCLK, CLK, KBCLK )
		VARIABLE CountEnd : STD_LOGIC_VECTOR(5 DOWNTO 0);
	BEGIN
		IF( RESET='0' ) THEN 
			Flag <= '0';
			CountEnd := (OTHERS=>'0');
		ELSIF( KBCLK='0' ) THEN 
			Flag <= '1';
			CountEnd := (OTHERS=>'0');
		ELSE 
			IF( GCLK'EVENT AND GCLK='1' ) THEN 
				IF( CountEnd<"110010" ) THEN Flag <= '1';CountEnd := CountEnd + 1; -- 50 
				ELSE 						 Flag <= '0';
				END IF; 
				
			END IF; 
		END IF; 
	END PROCESS; 
	
	-------------------------------------------------
	-- Recevie 
	Recevie: PROCESS( RESET, CLK, DATA, spdata, cnt8, Flag )
	BEGIN
		IF( RESET = '0' ) THEN 
			cnt8 <= 0; spdata <= (OTHERS=>'0');
		ELSIF( Flag='0' ) THEN 
			cnt8 <= 0; 
		ELSIF( CLK'event AND CLK = '0' ) THEN 
			IF( cnt8<10 AND Flag='1' ) THEN 
				spdata(cnt8) <= DATA;
				cnt8 <= cnt8 + 1;
			ELSE 
				cnt8 <= 0; 
			END IF; 
		END IF; 
	END PROCESS; 
	
	-------------------------------------------------
	-- End of recevie 
	PROCESS( RESET, cnt8 )
	BEGIN
		IF   ( RESET='0' ) THEN EOC <= '0';
		ELSIF( cnt8=10   ) THEN EOC <= '1';
		ELSE					EOC <= '0';
		END IF; 
	END PROCESS; 
	
	-------------------------------------------------
	-------------------------------------------------
	PDATA <= spdata( 8 downto 1 );
	
END Behavioral; 

⌨️ 快捷键说明

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