EDA技术实用教程 第12章 电子系统设计实践
第12章 电子系统设计实践 EDA技术实用教程
2器时 121等精度频率计设计 在此完成的设计项目可达到的指标为: (1)频率测试功能:测频范围01Hz~100MHz。测频 精度:测频全域相对误差恒为百万分之一。 (2)脉宽测试功能:测试范围01~1s,测试精度 0.01us (3)占空比测试功能:测试精度1%~99% (4)相位测试功能(附加功能)
康芯科技 12.1 等精度频率计设计 在此完成的设计项目可达到的指标为: (1) 频率测试功能:测频范围0.1Hz~100MHz。测频 精度:测频全域相对误差恒为百万分之一。 (2) 脉宽测试功能:测试范围0.1μs~1s,测试精度 0.01μs。 (3) 占空比测试功能:测试精度1%~99%。 (4) 相位测试功能(附加功能)
121.1主系统组成 待测信号 数码显 TCLKK信号放大整形电路 P2 FPGA/CPLD 89C51 100MHz 单片机 BCLK 晶振 测厝期键测频率键测脉宽键测占空比键复位键 图12-1频率计主系统电路组成
康芯科技 12.1.1 主系统组成 图12-1 频率计主系统电路组成
121.2测频原理 2器时 START BZH BENA 100MHz标准频率信号BCLK Bz[31.0 BCLK 预置控制信号 CL o QENA CLR 被测频率、TCLK 寸o× DATA[7. 0 CLR TF ENA T5Q[31.可 TCLK 清零信号 CLR CLR 3EL20 数据输出通道选择SEL2.0 图12-2等精度频率计主控结构
康芯科技 12.1.2 测频原理 图12-2 等精度频率计主控结构
121.2测频原理 2器时 设在一次预置门时间Tr中对被测信号计数值为Nx,对标准频 率信号的计数值为Ns,则下式成立: Fx/ mx= fs/ ms 12-1 不难得到测得的频率为: Fx=(Fs/Ns)·Nx12 BCLK Tmmmmmmmmmmmmnmmmmmmmmmmmmmmmmmmmmmmnnmmmmmmmmmmmmmmmonnmmm 一=TCLK START 计数允许周期 CLR 图12-3频率计测控时序
康芯科技 设在一次预置门时间Tpr中对被测信号计数值为Nx,对标准频 率信号的计数值为Ns,则下式成立: Fx/ Nx = Fs/ Ns 12-1 不难得到测得的频率为: Fx = (Fs/ Ns)Nx 12-2 图12-3 频率计测控时序 12.1.2 测频原理
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器时 START0) ELSIF BCLKEVENT AND BCLK =1 THEN IF BENA='1 THEN BZQ 0; ELSIF TCLK'EVENT AND TCLK='1 THEN IF ENA=1 THEN TSQ <=TSQ+ 1: END IF; END IF: 接下页
康芯科技 BEGIN START '0' ) ; ELSIF BCLK'EVENT AND BCLK = '1' THEN IF BENA = '1' THEN BZQ '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;