2器时 121等精度频率计设计 121.3 FPGA/CPLD开发的ⅤHDL设计 Ni 占空比= ×100 12-3 N1+N2
康芯科技 占空比 = 12 100% -3 1 2 1 N + N N 12.1 等精度频率计设计 12.1.3 FPGA/CPLD开发的VHDL设计
【例12-1】 IBRARY EEE;-等精度频率计FPGA设计部分 2器时 USE IEEE STD LOGIC 1164.ALL: USE IEEE STD LOGIC UNSIGNED.ALL ENTITY tester IS PORT(BCLK: IN STD LOGIO;-标准频率时钟信号cock2,50MHZ TCLK: IN STD LOGIC;-待测频率时钟信号 CLR: IN STD LOGIO;-清零和初始化信号 CL: IN STD LOGIO;-¥当SPUL为高电平时,CL为预置门控信号,用于测频计数 时间控制当SPUL为低电平时,CL为测脉宽控制信号, CL高电平时测高电平脉宽而当CL为低电平时,测低电平脉宽。 SPUL: IN STD LOGIO;-测频或测脉宽控制 START: OUT STD LOGIC;-起始计数标志信号 EEND: OUT STD LOGIC;-由低电平变到高电平时指示脉宽计数结束 SEL: IN STD LOGIOⅤ ECTOR(2 DOWNTO0);-数据读出选同控制 DATA: OUT STD LOGIC VECTOR(7 DOWNTO0);-8位数据读出 END tester; architecture behay of tester is SIGNAL BZQ: STD LOGICⅤ ECTOR(31 DOWNTO0;-标准计数器 SIGNAL TSQ: STD LOGIC VECTOR(31 DOWNTO 0); -测频计数器 SIGNAL ENA STD LOGIC: -计数使能 SIGNAL MA, CLK1, CLK 2, CLK3: STD LOGIC; SIGNAL Q1, Q2, Q3, BENA, PUL: STD LOGIC; SIGNAL SS: STD LOGIC VECTOR(I DOWNTO 0); 接下页
【例 康芯科技 12-1】 LIBRARY IEEE; --等精度频率计FPGA设计部分 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 2器时 START<=ENA DATA<=BZQ(7 DOWNTO0) WHEN SEL="000LSE-标准频率计数低8位输出 BZo(5 doWntO 8)WHEN SEL=OOl ELSE BZQ(23 DOWNTO 16)WHEN SEL=010"ELSE BZQ(31 DOWNTO24) WHEN SEL="0ELSE-标准频率计数最高8位输出 TSQ(7 DOWNTO0) WHEN SEL="100"ELSE-待测频率计数值最低8位输出 TSQ(15 dOWNTO 8 WHEN SELF101 ELSE TSQ(23 DOWNTO 16) WHEN SEL=110 ELSE TSQ(31 DOWNTO24) WHEN SEL="1ELSE-待测频率计数值最高8位输出 TSQ(1 DOWNTO 24) BZH: PROCESS(BCLK, CLR) 标准频率测试计数器,标准计数器 BEGIN IF CLR='1 THEN BZQ <=(OTHERS=>0) ELSIF BCLKEVENT AND BCLK =1 THEN IF BENA='1 THEN BZQ <=BZQ+ 1; END IF; END IF END PROCESS: TF: PROCESSTCLK, 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: 接下页
康芯科技 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 2器时 PROCESSOTCLK, CLR) BEGIN IF CLR='1 THEN ENA<='0' ELSIF TCLK'EVENT AND TCLK='1 THEN ENA < CL: END IF END PROCES MA<=( TCLK AND CL) OR NOT( TCLK OR CL);-测脉宽逻辑 CLKI<=NOT MA; CLK2<=MAAND Q1; CLK3<=NOT CLK 2; SS<=Q2 Q3 DDI: PROCESS(CLKI,CLR) BEGIN IF CLR='1'THEN Q1<=0; ELSIF CLKl'EVENT AND CLKI=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 2<=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 接下页
康芯科技 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<=MAAND 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; 接下页
2器时 PUL<=1 WHEN SS="10ELSE-当SS=“10时,PUL高电平,允许标准计数器计数 -禁止计数 EEND<= WHEN SS="I"ELSE-EEND为低电平时,表示正在计数,由低电平变到 高电平 -时,表示计数结束,可以从标准计数器中读数据了 BENA<= ENA WHEN SPUL=I'ELSE-标准计数器时钟使能控制信号,当SPUL为1时 测频率 PUL WHEN SPUL=0ELSE-当SPUL为0时,测脉宽和占空比 PUL ENd behav;
康芯科技 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时 ,测频率 PULWHEN SPUL='0' ELSE--当SPUL为0时,测脉宽和占空比 PUL ; END behav;