?? ccd.vhd.bak
字號:
--------------------------------------------------------------------
--------------------------------------------------------------------
--------------------------------------------------------------------
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_unsigned.all;
USE ieee.std_logic_arith.all;
--------------------------------------------------------------------
ENTITY CCD IS
PORT
(
CLK : IN STD_LOGIC;--GLOBE CLOCK
RESET,RUN,PIXEL,ADS : IN STD_LOGIC;--CONTROL SIGNAL/AD STATE
SRG3,SRG2,SRG1 : OUT STD_LOGIC;--CCD DRIVER CLOCK
IAG,SAG,TRG : OUT STD_LOGIC;--CCD DRIVER CLOCK
STATE_OUT : OUT STD_LOGIC_VECTOR(1 DOWNTO 0);--WORK STATE
SHP,SHD,AD : OUT STD_LOGIC--CDS/AD CLOCK
);
SIGNAL P_CNT,L_CNT,FLAG : STD_LOGIC;--PIXEL FLAG/LINE FLAG
SIGNAL CNT_1US : STD_LOGIC_VECTOR(1 DOWNTO 0);
SIGNAL CNT_2US : STD_LOGIC_VECTOR(2 DOWNTO 0);
SIGNAL CNT_8US : STD_LOGIC_VECTOR(4 DOWNTO 0);
SIGNAL STATE : INTEGER RANGE 0 TO 7;--STATE
SIGNAL H_COUNTER_CLR : INTEGER RANGE 0 TO 10;--H_COUNTER FOR CLEAR
SIGNAL V_COUNTER_CLR : INTEGER RANGE 0 TO 990;--V_COUNTER FOR CLEAR
SIGNAL H_COUNTER : INTEGER RANGE 0 TO 266;--H_COUNTER FOR READ
SIGNAL V_COUNTER : INTEGER RANGE 0 TO 488;--H_COUNTER FOR READ
END CCD;
------------------------------------------------------------------
ARCHITECTURE LJCCD OF CCD IS
BEGIN
------------------------------------------------------------------
STATE_SWITCH:PROCESS(CLK,RUN,L_CNT,V_COUNTER,H_COUNTER,STATE)
BEGIN
IF CLK'LAST_VALUE='0' AND CLK'EVENT AND CLK='1' THEN
IF RESET='1' THEN--RESET
STATE<=0;--INITIALISITION
ELSE
IF RUN='1' AND STATE=0 THEN
STATE<=1;--CLR/IAG,SAG
ELSIF RUN='0' AND STATE=2 AND L_CNT='1' THEN
STATE<=3;--CLR/SRG(INT)
END IF;
IF STATE=1 AND V_COUNTER_CLR=990 THEN--990
STATE<=2;--CLR/SAG(INT)
ELSIF STATE=3 AND H_COUNTER_CLR=10 THEN--10
STATE<=4;--FT(FRAME TRANFER)
ELSIF STATE=4 AND V_COUNTER=244 THEN--244
STATE<=5;--LS(LINE SHIFT WITH INTERNAL BINNING)
ELSIF STATE=5 AND L_CNT='1' THEN
STATE<=6;--SRR(SERIAL REGISTER READOUT)
ELSIF STATE=6 AND P_CNT='1' THEN
STATE<=7;--DELAY(FOR READ)
ELSIF STATE=7 AND PIXEL=FLAG THEN
IF H_COUNTER<266 THEN--266
STATE<=6;
ELSIF H_COUNTER=266 AND V_COUNTER<488 THEN--266--488
STATE<=5;
ELSIF H_COUNTER=266 AND V_COUNTER=488 THEN--266--488
STATE<=0;
END IF;
END IF;
END IF;
END IF;
END PROCESS STATE_SWITCH;
---------------------------------------------------------
COUNTERS:PROCESS(CLK,STATE,ADS,L_CNT,P_CNT,PIXEL)--
BEGIN
--STATE_OUT
IF STATE=0 THEN
STATE_OUT<="00";
ELSIF STATE=5 OR STATE=6 OR STATE=7 THEN
IF ADS'LAST_VALUE='1' AND ADS'EVENT AND ADS='0' THEN
STATE_OUT(0)<=NOT PIXEL;
STATE_OUT(1)<=PIXEL;
END IF;
END IF;
--V_COUNTER_CLR
IF STATE=1 THEN
IF L_CNT'LAST_VALUE='0' AND L_CNT'EVENT AND L_CNT='1' THEN
V_COUNTER_CLR<=V_COUNTER_CLR+1;
END IF;
ELSE
V_COUNTER_CLR<=0;
END IF;
--H_COUNTER_CLR
IF STATE=3 THEN
IF P_CNT'LAST_VALUE='0' AND P_CNT'EVENT AND P_CNT='1' THEN
H_COUNTER_CLR<=H_COUNTER_CLR+1;
END IF;
ELSE
H_COUNTER_CLR<=0;
END IF;
--V_COUNTER
IF STATE=4 OR STATE=5 OR STATE=6 OR STATE=7 THEN
IF L_CNT'LAST_VALUE='0' AND L_CNT'EVENT AND L_CNT='1' THEN
V_COUNTER<=V_COUNTER+1;
END IF;
ELSE
V_COUNTER<=0;
END IF;
--H_COUNTER
IF STATE=6 OR STATE=7 THEN
IF P_CNT'LAST_VALUE='0' AND P_CNT'EVENT AND P_CNT='1' THEN
H_COUNTER<=H_COUNTER+1;
END IF;
ELSE
H_COUNTER<=0;
END IF;
END PROCESS COUNTERS;
--------------------------------------------------------------------------
DRIVER:PROCESS(STATE,CLK)
BEGIN
IF CLK'LAST_VALUE='0' AND CLK'EVENT AND CLK='1' THEN
CASE STATE IS
WHEN 0=>--INITIALISITION
FLAG<='0';
-- CNT_1US<="00";CNT_2US<="000";CNT_8US<="00000";
CNT_2US<="000";CNT_8US<="00000";
L_CNT<='0';P_CNT<='0';
-- IAG<='0';SAG<='0';TRG<='0';
-- SRG3<='0';SRG2<='0';SRG1<='0';
SHP<='0';SHD<='0';AD<='1';
CASE CNT_1US IS
WHEN "00"=>CNT_1US<="01";
L_CNT<='0';
IAG<='1';SAG<='1';TRG<='1';
SRG3<='0';SRG2<='0';SRG1<='0';
WHEN "01"=>CNT_1US<="10";
L_CNT<='0';
IAG<='1';SAG<='1';TRG<='1';
SRG3<='0';SRG2<='0';SRG1<='0';
WHEN "10"=>CNT_1US<="11";
L_CNT<='1';
IAG<='0';SAG<='0';TRG<='0';
SRG3<='1';SRG2<='1';SRG1<='1';
WHEN "11"=>CNT_1US<="00";
L_CNT<='0';
IAG<='0';SAG<='0';TRG<='0';
SRG3<='1';SRG2<='1';SRG1<='1';
END CASE;
WHEN 1=>--CLR/IAG,SAG
FLAG<='0';
CNT_2US<="000";CNT_8US<="00000";
P_CNT<='0';
SHP<='0';SHD<='0';AD<='1';
CASE CNT_1US IS
WHEN "00"=>CNT_1US<="01";
L_CNT<='0';
IAG<='1';SAG<='1';TRG<='1';
SRG3<='0';SRG2<='0';SRG1<='0';
WHEN "01"=>CNT_1US<="10";
L_CNT<='0';
IAG<='1';SAG<='1';TRG<='1';
SRG3<='0';SRG2<='0';SRG1<='0';
WHEN "10"=>CNT_1US<="11";
L_CNT<='1';
IAG<='0';SAG<='0';TRG<='0';
SRG3<='1';SRG2<='1';SRG1<='1';
WHEN "11"=>CNT_1US<="00";
L_CNT<='0';
IAG<='0';SAG<='0';TRG<='0';
SRG3<='1';SRG2<='1';SRG1<='1';
END CASE;
WHEN 2=>--CLR/SAG(INT)
FLAG<='0';
CNT_2US<="000";CNT_8US<="00000";
P_CNT<='0';
SHP<='0';SHD<='0';AD<='1';
CASE CNT_1US IS
WHEN "00"=>CNT_1US<="01";
L_CNT<='0';
SAG<='1';TRG<='1';
SRG3<='0';SRG2<='0';SRG1<='0';
WHEN "01"=>CNT_1US<="10";
L_CNT<='0';
SAG<='1';TRG<='1';
SRG3<='0';SRG2<='0';SRG1<='0';
WHEN "10"=>CNT_1US<="11";
L_CNT<='1';
SAG<='0';TRG<='0';
SRG3<='1';SRG2<='1';SRG1<='1';
WHEN "11"=>CNT_1US<="00";
L_CNT<='0';
SAG<='0';TRG<='0';
SRG3<='1';SRG2<='1';SRG1<='1';
END CASE;
WHEN 3=>--CLR/SRG(INT)
FLAG<='0';
CNT_2US<="000";CNT_8US<="00000";
L_CNT<='0';
IAG<='0';SAG<='0';
SHP<='0';SHD<='0';AD<='1';
CASE CNT_1US IS
WHEN "00"=>CNT_1US<="01";
P_CNT<='0'; TRG<='1';
SRG3<='0';SRG2<='0';SRG1<='0';
WHEN "01"=>CNT_1US<="10";
P_CNT<='0';TRG<='1';
SRG3<='0';SRG2<='0';SRG1<='0';
WHEN "10"=>CNT_1US<="11";
P_CNT<='1';TRG<='0';
SRG3<='1';SRG2<='1';SRG1<='1';
WHEN "11"=>CNT_1US<="00";
P_CNT<='0';TRG<='0';
SRG3<='1';SRG2<='1';SRG1<='1';
END CASE;
WHEN 4=>--FT(FRAME TRANFER)
FLAG<='0';
CNT_2US<="000";CNT_8US<="00000";
P_CNT<='0';
SHD<='0';AD<='1';
CASE CNT_1US IS
WHEN "00"=>CNT_1US<="01";
L_CNT<='0';
IAG<='1';SAG<='1';TRG<='1';
SRG3<='0';SRG2<='0';SRG1<='0';
WHEN "01"=>CNT_1US<="10";
L_CNT<='0';
IAG<='1';SAG<='1';TRG<='1';
SRG3<='0';SRG2<='0';SRG1<='0';
WHEN "10"=>CNT_1US<="11";
L_CNT<='1';
IAG<='0';SAG<='0';TRG<='0';
SRG3<='1';SRG2<='1';SRG1<='1';
WHEN "11"=>CNT_1US<="00";
L_CNT<='0';
IAG<='0';SAG<='0';TRG<='0';
SRG3<='1';SRG2<='1';SRG1<='1';
END CASE;
WHEN 5=>--LS(LINE SHIFT WITH INTERNAL BINNING)
CNT_1US<="00";CNT_8US<="00000";
P_CNT<='0';
IAG<='0';SHD<='0';AD<='1';
CASE CNT_2US IS
WHEN "000"=>CNT_2US<="001";
L_CNT<='0';
SAG<='0';TRG<='1';
SRG3<='0';SRG2<='0';SRG1<='0';
WHEN "001"=>CNT_2US<="010";
L_CNT<='0';
SAG<='0';TRG<='0';
SRG3<='0';SRG2<='0';SRG1<='0';
WHEN "010"=>CNT_2US<="011";
L_CNT<='0';
SAG<='0';TRG<='1';
SRG3<='0';SRG2<='0';SRG1<='0';
WHEN "011"=>CNT_2US<="100";
L_CNT<='0';
SAG<='0';TRG<='0';
SRG3<='0';SRG2<='0';SRG1<='0';
WHEN "100"=>CNT_2US<="101";
L_CNT<='0';
SAG<='0';TRG<='1';
SRG3<='0';SRG2<='0';SRG1<='0';
WHEN "101"=>CNT_2US<="110";
L_CNT<='0';
SAG<='1';TRG<='0';
SRG3<='1';SRG2<='1';SRG1<='1';
WHEN "110"=>CNT_2US<="111";
L_CNT<='1';
SAG<='0';TRG<='0';
SRG3<='0';SRG2<='0';SRG1<='0';
WHEN "111"=>CNT_2US<="000";
L_CNT<='0';
SAG<='0';TRG<='0';
SRG3<='0';SRG2<='0';SRG1<='0';
END CASE;
WHEN 6=>--SRR(SERIAL REGISTER READOUT)
CNT_1US<="00";CNT_2US<="000";
L_CNT<='0';
IAG<='0';SAG<='0';TRG<='0';
CASE CNT_8US IS
WHEN "00000"=>CNT_8US<="00001";--1
P_CNT<='0';
SRG3<='0';SRG2<='0';SRG1<='0';
SHP<='0';SHD<='0';AD<='1';
WHEN "00001"=>CNT_8US<="00010";
P_CNT<='0';
SRG3<='0';SRG2<='0';SRG1<='0';
SHP<='0';SHD<='0';AD<='0';
WHEN "00010"=>CNT_8US<="00011";
P_CNT<='0';
SRG3<='0';SRG2<='0';SRG1<='0';
SHP<='0';SHD<='0';AD<='0';
WHEN "00011"=>CNT_8US<="00100";
P_CNT<='0';
SRG3<='1';SRG2<='0';SRG1<='0';
SHP<='1';SHD<='0';AD<='1';
WHEN "00100"=>CNT_8US<="00101";--2
P_CNT<='0';
SRG3<='1';SRG2<='0';SRG1<='0';
SHP<='1';SHD<='0';AD<='1';
WHEN "00101"=>CNT_8US<="00110";
P_CNT<='0';
SRG3<='1';SRG2<='0';SRG1<='0';
SHP<='1';SHD<='0';AD<='1';
WHEN "00110"=>CNT_8US<="00111";
P_CNT<='0';
SRG3<='1';SRG2<='0';SRG1<='0';
SHP<='1';SHD<='0';AD<='1';
WHEN "00111"=>CNT_8US<="01000";
P_CNT<='0';
SRG3<='1';SRG2<='0';SRG1<='0';
SHP<='1';SHD<='0';AD<='1';
WHEN "01000"=>CNT_8US<="01001";--3
P_CNT<='0';
SRG3<='1';SRG2<='0';SRG1<='0';
SHP<='1';SHD<='0';AD<='1';
WHEN "01001"=>CNT_8US<="01010";
P_CNT<='0';
SRG3<='1';SRG2<='0';SRG1<='0';
SHP<='1';SHD<='0';AD<='1';
WHEN "01010"=>CNT_8US<="01011";
P_CNT<='0';
SRG3<='1';SRG2<='0';SRG1<='0';
SHP<='1';SHD<='0';AD<='1';
WHEN "01011"=>CNT_8US<="01100";
P_CNT<='0';
SRG3<='1';SRG2<='0';SRG1<='0';
SHP<='1';SHD<='0';AD<='1';
WHEN "01100"=>CNT_8US<="01101";--4
P_CNT<='0';
SRG3<='1';SRG2<='0';SRG1<='0';
SHP<='1';SHD<='0';AD<='1';
WHEN "01101"=>CNT_8US<="01110";
P_CNT<='0';
SRG3<='1';SRG2<='0';SRG1<='0';
SHP<='1';SHD<='0';AD<='1';
WHEN "01110"=>CNT_8US<="01111";
P_CNT<='0';
SRG3<='1';SRG2<='0';SRG1<='0';
SHP<='1';SHD<='0';AD<='1';
WHEN "01111"=>CNT_8US<="10000";
P_CNT<='0';
SRG3<='1';SRG2<='0';SRG1<='0';
SHP<='1';SHD<='0';AD<='1';
WHEN "10000"=>CNT_8US<="10001";--5
P_CNT<='0';
SRG3<='1';SRG2<='0';SRG1<='0';
SHP<='1';SHD<='0';AD<='1';
WHEN "10001"=>CNT_8US<="10010";
P_CNT<='0';
SRG3<='1';SRG2<='0';SRG1<='0';
SHP<='1';SHD<='0';AD<='1';
WHEN "10010"=>CNT_8US<="10011";
P_CNT<='0';
SRG3<='1';SRG2<='0';SRG1<='0';
SHP<='1';SHD<='0';AD<='1';
WHEN "10011"=>CNT_8US<="10100";
P_CNT<='0';
SRG3<='1';SRG2<='0';SRG1<='0';
SHP<='1';SHD<='0';AD<='1';
WHEN "10100"=>CNT_8US<="10101";--6
P_CNT<='0';
SRG3<='1';SRG2<='0';SRG1<='0';
SHP<='1';SHD<='0';AD<='1';
WHEN "10101"=>CNT_8US<="10110";
P_CNT<='0';
SRG3<='1';SRG2<='0';SRG1<='0';
SHP<='1';SHD<='0';AD<='1';
WHEN "10110"=>CNT_8US<="10111";
P_CNT<='0';
SRG3<='1';SRG2<='0';SRG1<='0';
SHP<='1';SHD<='0';AD<='1';
WHEN "10111"=>CNT_8US<="11000";
P_CNT<='0';
SRG3<='1';SRG2<='0';SRG1<='0';
SHP<='1';SHD<='0';AD<='1';
WHEN "11000"=>CNT_8US<="11001";--7
P_CNT<='0';
SRG3<='1';SRG2<='0';SRG1<='0';
SHP<='1';SHD<='0';AD<='1';
WHEN "11001"=>CNT_8US<="11010";
P_CNT<='0';
SRG3<='1';SRG2<='0';SRG1<='0';
SHP<='1';SHD<='0';AD<='1';
WHEN "11010"=>CNT_8US<="11011";
P_CNT<='0';
SRG3<='1';SRG2<='0';SRG1<='0';
SHP<='1';SHD<='0';AD<='1';
WHEN "11011"=>CNT_8US<="11100";
P_CNT<='0';
SRG3<='1';SRG2<='0';SRG1<='0';
SHP<='1';SHD<='0';AD<='1';
WHEN "11100"=>CNT_8US<="11101";--8
P_CNT<='0';
SRG3<='1';SRG2<='0';SRG1<='0';
SHP<='1';SHD<='0';AD<='1';
WHEN "11101"=>CNT_8US<="11110";
P_CNT<='0';
SRG3<='1';SRG2<='0';SRG1<='0';
SHP<='1';SHD<='0';AD<='1';
WHEN "11110"=>CNT_8US<="11111";
P_CNT<='1';
SRG3<='1';SRG2<='0';SRG1<='0';
SHP<='1';SHD<='0';AD<='1';
FLAG<=NOT FLAG;
WHEN "11111"=>CNT_8US<="00000";
P_CNT<='0';
SRG3<='1';SRG2<='0';SRG1<='0';
SHP<='1';SHD<='0';AD<='1';
END CASE;
WHEN 7=>--DELAY(FOR READ)
CNT_1US<="00";CNT_2US<="000";CNT_8US<="00000";
L_CNT<='0';P_CNT<='0';
IAG<='0';SAG<='0';TRG<='0';
SRG3<='0';SRG2<='0';SRG1<='0';
SHP<='0';SHD<='1';AD<='1';
END CASE;
END IF;
END PROCESS DRIVER;
-------------------------------------------------------------------
END LJCCD;--END
-------------------------------------------------------------------
-------------------------------------------------------------------
-------------------------------------------------------------------
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -