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

📄 ad0809.vhd

📁 CPLD器件的4种实际应用列子。欢迎下载并评价。
💻 VHD
字号:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY AD0809 IS
	PORT(   
     SYSCLOCK : IN STD_LOGIC;
	       OE : OUT STD_LOGIC;
	     WR_n : OUT STD_LOGIC;
	     ADDR : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);
			D : IN STD_LOGIC_VECTOR(15 DOWNTO 0);
	        Q : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);
	
		EOC_0 : IN STD_LOGIC;
		CLK_0 : OUT STD_LOGIC;
      RST_n_0 : OUT STD_LOGIC;
		 CS_0 : OUT STD_LOGIC;
	 HOLD_A_0 : OUT STD_LOGIC;
	 HOLD_B_0 : OUT STD_LOGIC;
	 HOLD_C_0 : OUT STD_LOGIC;	
	 BYTE_n_0 : OUT STD_LOGIC;
	    ADD_0 : OUT STD_LOGIC;
	
		EOC_1 : IN STD_LOGIC;
		CLK_1 : OUT STD_LOGIC;
      RST_n_1 : OUT STD_LOGIC;
		 CS_1 : OUT STD_LOGIC;
	 HOLD_A_1 : OUT STD_LOGIC;
	 HOLD_B_1 : OUT STD_LOGIC;
	 HOLD_C_1 : OUT STD_LOGIC;	
	 BYTE_n_1 : OUT STD_LOGIC;
	    ADD_1 : OUT STD_LOGIC );

END AD0809;

ARCHITECTURE behav OF AD0809 IS

COMPONENT ADLL_ADS
PORT(
	inclk0		:IN 	STD_LOGIC;
	c0			:OUT 	STD_LOGIC		--40MHz 
	);
END COMPONENT;

TYPE    states IS (st0,st1,st2,st3,st4,st5,st6,st7,st8,st9,st10,
				   st11,st12,st13,st14,st15,st16,st17,st18,st19,st20);
SIGNAL  current_state, next_state: states :=st0;
SIGNAL  REGL : STD_LOGIC_VECTOR(15 DOWNTO 0);
SIGNAL  RD : STD_LOGIC;
SIGNAL 	ADS8364_CLK	: STD_LOGIC;
SIGNAL 	SYSCLK : STD_LOGIC;
SIGNAL  START : STD_LOGIC;


BEGIN
      ADD_0 <= '0';
	  BYTE_n_0 <= '0';
	  RST_n_0 <= '1';
	
	  ADD_1 <= '0';
	  BYTE_n_1 <= '0';
	  RST_n_1 <= '1';
	
	  WR_n <= '1';
	
	  ADDR(2 DOWNTO 0) <= "111";
	  HOLD_A_0 <= START;
	  HOLD_B_0 <= START;
	  HOLD_C_0 <= START;
	  HOLD_A_1 <= START;
	  HOLD_B_1 <= START;
	
	  Q  <= REGL; OE <= RD;
	
ADCLK: PROCESS(SYSCLK)
		VARIABLE COUNT: STD_LOGIC_VECTOR(3 DOWNTO 0); 
	   BEGIN
		 IF RISING_EDGE(SYSCLK) THEN 
			IF COUNT="0100" THEN 			
			COUNT := (OTHERS => '0');
			ADS8364_CLK<=NOT ADS8364_CLK;
			ELSE COUNT :=COUNT + 1;
			END IF;
		END IF;
END PROCESS ADCLK;
			
	CLK_0 <= ADS8364_CLK;
	CLK_1 <= ADS8364_CLK;
	
COM: PROCESS(current_state,EOC_0)
     VARIABLE COUNT1: STD_LOGIC_VECTOR(1 DOWNTO 0);
	  BEGIN
	  	CASE  current_state IS
		WHEN st0 =>CS_0<= '1'; CS_1<= '1'; START <= '1'; RD <= '1'; next_state <= st1;
		WHEN st1 =>CS_0<= '1'; CS_1<= '1'; START <= '0'; RD <= '1'; next_state <= st2;
		WHEN st2 =>CS_0<= '1'; CS_1<= '1'; START <= '1'; RD <= '1'; 
			IF (COUNT1 = "11") THEN
			   COUNT1 := "00";
			   next_state <= st3;
			ELSIF (EOC_0 = '1' AND EOC_0 'EVENT) THEN 
			   COUNT1 := COUNT1 + 1;
			   next_state <=st2;
			END IF;
		WHEN st3 =>CS_0<= '0'; CS_1<= '1'; START <= '1'; RD <= '0'; next_state <= st4;
		WHEN st4 =>CS_0<= '0'; CS_1<= '1'; START <= '1'; RD <= '1'; next_state <= st5;
		WHEN st5 =>CS_0<= '0'; CS_1<= '1'; START <= '1'; RD <= '0'; next_state <= st6;
		WHEN st6 =>CS_0<= '0'; CS_1<= '1'; START <= '1'; RD <= '1'; next_state <= st7;
		WHEN st7 =>CS_0<= '0'; CS_1<= '1'; START <= '1'; RD <= '0'; next_state <= st8;
		WHEN st8 =>CS_0<= '0'; CS_1<= '1'; START <= '1'; RD <= '1'; next_state <= st9;
		WHEN st9 =>CS_0<= '0'; CS_1<= '1'; START <= '1'; RD <= '0'; next_state <= st10;
		WHEN st10 =>CS_0<= '0'; CS_1<= '1'; START <= '1'; RD <= '1'; next_state <= st11;
		WHEN st11 =>CS_0<= '0'; CS_1<= '1'; START <= '1'; RD <= '0'; next_state <= st12;
		WHEN st12 =>CS_0<= '0'; CS_1<= '1'; START <= '1'; RD <= '1'; next_state <= st13;
		WHEN st13 =>CS_0<= '0'; CS_1<= '1'; START <= '1'; RD <= '0'; next_state <= st14;
		WHEN st14 =>CS_0<= '0'; CS_1<= '1'; START <= '1'; RD <= '1'; next_state <= st15;

		WHEN st15 =>CS_0<= '1'; CS_1<= '0'; START <= '1'; RD <= '0'; next_state <= st16;
		WHEN st16 =>CS_0<= '1'; CS_1<= '0'; START <= '1'; RD <= '1'; next_state <= st17;
		WHEN st17 =>CS_0<= '1'; CS_1<= '0'; START <= '1'; RD <= '0'; next_state <= st18;
		WHEN st18 =>CS_0<= '1'; CS_1<= '0'; START <= '1'; RD <= '1'; next_state <= st19;
		WHEN st19 =>CS_0<= '1'; CS_1<= '0'; START <= '1'; RD <= '0'; next_state <= st20;
		WHEN st20 =>CS_0<= '1'; CS_1<= '0'; START <= '1'; RD <= '1'; next_state <= st0;
		WHEN OTHERS => next_state <= st0;
		END CASE;
END PROCESS COM;

REG: PROCESS(ADS8364_CLK)
     BEGIN
		IF (ADS8364_CLK 'EVENT AND ADS8364_CLK = '0') THEN 
			current_state <= next_state;
		END IF;
END PROCESS REG;

LATCH1: PROCESS(RD)
		BEGIN
		IF RD = '0'  THEN 
			REGL <= D;
	    ELSE
	        REGL <= "ZZZZZZZZZZZZZZZZ";
		END IF;
END PROCESS LATCH1;

	U1:ADLL_ADS
	PORT MAP(
		inclk0		=>	SYSCLOCK,
		c0			=>	SYSCLK);

END behav;

⌨️ 快捷键说明

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