?? gwdvpb.txt
字號:
LIBRARY IEEE; -- 2003/7/21 GWDVPB
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY gwdvpb IS
PORT (CLK0 : IN STD_LOGIC; --CLOCK0 標準頻率時鐘信號
TCLK : IN STD_LOGIC; --PIO27 待測頻率時鐘信號
CLR : IN STD_LOGIC; --PIO0 清零和初始化信號
CL : IN STD_LOGIC; --PIO1 當SPUL為高電平時,CL為預置門控信號,用于測頻計數時間控制
--當SPUL為低電平時,CL為測脈寬控制信號,CL高電平時測高電平脈寬
--而當CL為低電平時,測低電平脈寬。
SPUL : IN STD_LOGIC; --PIO2 測頻或測脈寬控制
START : OUT STD_LOGIC; --PIO2
EEND : OUT STD_LOGIC; --PIO3 由低電平變到高電平時指示脈寬計數結束,
SEL : IN STD_LOGIC_VECTOR(2 DOWNTO 0); --PIO6/PIO5/PIO4
--兩個32位計數器計數值分8位讀出多路選擇控制
DATA : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); --PIO8/9/10/11/12/13/14/15 8位數據讀出
CONT : OUT STD_LOGIC --計數分頻
);
END ;
ARCHITECTURE behav OF gwdvpb IS
SIGNAL BZQ : STD_LOGIC_VECTOR(31 DOWNTO 0); --標準計數器
SIGNAL TSQ : STD_LOGIC_VECTOR(31 DOWNTO 0); --測頻計數器
SIGNAL ENA : STD_LOGIC; -- 計數使能
SIGNAL CNT : STD_LOGIC_VECTOR(15 DOWNTO 0);
SIGNAL BCLK,LL : STD_LOGIC;
SIGNAL MA : STD_LOGIC;
SIGNAL CLK1,CLK4 : STD_LOGIC;
SIGNAL CLK2 : STD_LOGIC;
SIGNAL CLK3 : STD_LOGIC;
SIGNAL Q1 : STD_LOGIC;
SIGNAL Q2 : STD_LOGIC;
SIGNAL Q3 : STD_LOGIC;
SIGNAL BENA : STD_LOGIC;
SIGNAL 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) ;
-- HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
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;
-- gggggggggggggggggggggggggggggggggggggggggggggggggggg
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;
--FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
PROCESS(TCLK,CLR) --計數控制使能觸發器,CL為預置門控信號,同時兼作正負脈寬測試控制信號
BEGIN
IF CLR = '1' THEN ENA <= '0' ;
ELSIF TCLK'EVENT AND TCLK = '1' THEN
ENA <= CL ;
END IF;
END PROCESS;
--OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
MA <= (TCLK AND CL) OR NOT(TCLK OR CL) ; --測脈寬邏輯
CLK1 <= NOT MA ;
CLK2 <= MA AND Q1 ;
CLK3 <= NOT CLK2 ;
SS <= Q2 & Q3 ;
-- HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
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;
-- HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
GT :
PUL <= '1' WHEN SS = "10" ELSE --當SS=“10”時,PUL高電平,允許標準計數器計數,
'0' ; --禁止計數
EEND <= '1' WHEN SS = "11" ELSE --EEND為低電平時,表示正在計數,由低電平變到高電平
'0' ; --時,表示計數結束,可以從標準計數器中讀數據了
--UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
BENA <= ENA WHEN SPUL = '1' ELSE --標準計數器時鐘使能控制信號,當SPUL為1時,測頻率
PUL WHEN SPUL = '0' ELSE --當SPUL為0時,測脈寬和占空比
PUL ;
--UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
-- 標準頻率分頻
PROCESS(CLK0)
BEGIN
IF CLK0'EVENT AND CLK0 = '1' THEN CLK4 <= NOT CLK4 ;
END IF;
END PROCESS;
---TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
PROCESS(CLK4)
BEGIN
IF CLK4'EVENT AND CLK4 = '1' THEN BCLK <= NOT BCLK ;
END IF;
END PROCESS;
-- UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
PROCESS(BCLK)
BEGIN
IF BCLK'EVENT AND BCLK='1' THEN
LL<=NOT LL;
END IF;
END PROCESS;
CONT<=LL;
END behav;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -