?? ad.vhd
字號:
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_ARITH.all;
use IEEE.std_logic_UNSIGNED.all;
entity AD is
port (
--以下是引腳信號
CLK :IN STD_LOGIC; --系統時鐘
RST_N :IN STD_LOGIC; --系統復位
--AD0809部分接口
AD_INT :IN STD_LOGIC; --中斷信號,轉換完畢即中斷,電平中斷
AD_CS :OUT STD_LOGIC; --片選信號
AD_RD :OUT STD_LOGIC; --寫信號
AD_WR :INOUT STD_LOGIC; --讀信號
AD_D :IN STD_LOGIC_VECTOR(7 downto 0); --8位采集數據
AD_Q :out STD_LOGIC_VECTOR(7 downto 0) --8位輸出數據
);
end AD;
ARCHITECTURE behav OF AD IS
type statetype is(AD_IDLE, AD_WRITE, AD_WAIT, AD_WAIT1, AD_READ, AD_READ1, AD_STOP);
signal present_state,next_state: statetype;
signal datain: STD_LOGIC_VECTOR(7 downto 0);
BEGIN
--AD控制狀態機
P1: process(present_state,next_state,AD_INT)
begin
case present_state is
when AD_IDLE =>
AD_CS <= '1';
AD_RD <= '1';
AD_WR <= '1';
next_state <= AD_WRITE;
when AD_WRITE => --寫信號
AD_CS <= '0';
AD_WR <= '0';
AD_RD <= '1';
next_state <= AD_WAIT;
when AD_WAIT => --寫結束
AD_CS <= '0';AD_WR <= '1';AD_RD <= '1';
if (AD_INT = '0') then --當由1變0時,轉換結束
next_state <= AD_WAIT1;
else
next_state <= AD_WAIT;
end if;
when AD_WAIT1 =>
AD_CS <= '0';
AD_WR <= '1';
AD_RD <= '0';
next_state <= AD_READ;
when AD_READ => --寫信號
AD_CS <= '0';
AD_WR <= '1';
AD_RD <= '0';
next_state <= AD_READ1;
when AD_READ1 => --讀鎖存
AD_CS <= '0';
AD_WR <= '1';
AD_RD <= '1';
next_state <= AD_STOP;
when AD_STOP =>
AD_CS <= '1';
AD_WR <= '1';
AD_RD <= '1';
next_state <= AD_IDLE;
end case;
end process P1;
P2: process(CLK, RST_N)
begin
if (RST_N = '0') then
present_state <= AD_IDLE;
datain <= "00000000";
elsif falling_edge(CLK) then
present_state <= next_state;
if(present_state = AD_READ) then
datain <= AD_D;
end if;
end if;
AD_Q<=datain;
end process P2;
END behav;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -