📄 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 + -