?? etester.vhd
字號:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY etester IS
PORT (
BCLK : IN STD_LOGIC; --標準頻率時鐘信號clock2,50MHZ
TCLK : IN STD_LOGIC; --待測頻率時鐘信號
CLR : IN STD_LOGIC; --清零和初始化信號
CL : IN STD_LOGIC; --當SPUL 為高電平時,CL 為預置門控信號,用于測頻計數
--時間控制當SPUL 為低電平時,CL 為測脈寬控制信號,
--CL 高電平時測高電平脈寬而當CL 為低電平時,測低電平脈寬。
SPUL : IN STD_LOGIC; --測頻或測脈寬控制
START : OUT STD_LOGIC; --起始計數標志信號
EEND : OUT STD_LOGIC; --由低電平變到高電平時指示脈寬計數結束,
SEL : IN STD_LOGIC_VECTOR(2 DOWNTO 0); --數據讀出選通控制
DATA : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) --8 位數據讀出
);
END etester;
ARCHITECTURE behav OF etester IS
SIGNAL BZQ : STD_LOGIC_VECTOR(31 DOWNTO 0); --標準計數器
SIGNAL TSQ : STD_LOGIC_VECTOR(31 DOWNTO 0); --測頻計數器
SIGNAL ENA : STD_LOGIC; --計數使能
SIGNAL MA, CLK1, CLK2, CLK3 : STD_LOGIC;
SIGNAL Q1,Q2,Q3,BENA,PUL : STD_LOGIC;
SIGNAL SS : STD_LOGIC_VECTOR(1 DOWNTO 0);
BEGIN
START <= ENA ;
DATA <= BZQ(7 DOWNTO 0) WHEN SEL="000" ELSE -- 標準頻率計數低8 位輸出
BZQ(15 DOWNTO 8) WHEN SEL="001" ELSE
BZQ(23 DOWNTO 16) WHEN SEL="010" ELSE
BZQ(31 DOWNTO 24) WHEN SEL="011" ELSE -- 標準頻率計數最高8 位輸出
TSQ(7 DOWNTO 0) WHEN SEL="100" ELSE --待測頻率計數值最低8 位輸出
TSQ(15 DOWNTO 8) WHEN SEL="101" ELSE
TSQ(23 DOWNTO 16) WHEN SEL="110" ELSE
TSQ(31 DOWNTO 24) WHEN SEL="111" ELSE --待測頻率計數值最高8 位輸出
TSQ(31 DOWNTO 24) ;
BZH : PROCESS(BCLK, CLR) --標準頻率測試計數器,標準計數器
BEGIN
IF CLR = '1' THEN BZQ <= ( OTHERS=>'0' ) ;
ELSIF BCLK'EVENT AND BCLK = '1' THEN
IF BENA = '1' THEN BZQ <= BZQ + 1; END IF;
END IF;
END PROCESS;
TF : PROCESS(TCLK, CLR, ENA) --待測頻率計數器,測頻計數器
BEGIN
IF CLR = '1' THEN TSQ <= ( OTHERS=>'0' );
ELSIF TCLK'EVENT AND TCLK = '1' THEN
IF ENA = '1' THEN TSQ <= TSQ + 1; END IF;
END IF;
END PROCESS;
PROCESS(TCLK,CLR)
BEGIN --保證計數周期數為整數
IF CLR = '1' THEN ENA <= '0' ;
ELSIF TCLK'EVENT AND TCLK='1' THEN ENA <= CL ;
END IF;
END PROCESS;
MA<=(TCLK AND CL) OR NOT(TCLK OR CL) ; --測脈寬邏輯
CLK1<=NOT MA ; CLK2<=MA AND Q1 ; CLK3<=NOT CLK2; SS<=Q2 & Q3 ;
DD1: PROCESS(CLK1,CLR)
BEGIN
IF CLR = '1' THEN Q1 <= '0' ;
ELSIF CLK1'EVENT AND CLK1 = '1' THEN Q1 <= '1' ; END IF;
END PROCESS;
DD2: PROCESS(CLK2,CLR)
BEGIN
IF CLR = '1' THEN Q2 <= '0' ;
ELSIF CLK2'EVENT AND CLK2 = '1' THEN Q2 <= '1' ; END IF;
END PROCESS;
DD3: PROCESS(CLK3,CLR)
BEGIN
IF CLR = '1' THEN Q3 <= '0' ;
ELSIF CLK3'EVENT AND CLK3 = '1' THEN Q3 <= '1' ; END IF;
END PROCESS;
PUL<='1' WHEN SS="10" ELSE --當SS=“10”時,PUL 高電平,允許標準計數器計數,
'0' ; --禁止計數
EEND<='1' WHEN SS="11" ELSE --EEND 為低電平時,表示正在計數,由低電平變到高電平
'0' ; --時,表示計數結束,可以從標準計數器中讀數據了
BENA<=ENA WHEN SPUL='1' ELSE --標準計數器時鐘使能控制信號,當SPUL 為1 時,測頻率
PUL WHEN SPUL='0' ELSE --當SPUL 為0 時,測脈寬和占空比
PUL ;
END behav;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -