Professional Documents
Culture Documents
第 12 章( A )
电子系统设计实践
KX
康芯科技
12.1 等精度频率计设计
在此完成的设计项目可达到的指标为:
( 3 )占空比测试功能:测试精度 1 %~ 99 %。
KX
康芯科技
12.1 等精度频率计设计
12.1.1 主系统组成
图 12-1 频率计主系统电路组成
KX
康芯科技
12.1 等精度频率计设计
12.1.2 测频原理
图 12-2 等精度频率计主控结构
KX
康芯科技
Fx / Nx Fs / Ns 12-1
不难得到测得的频率为:
Fx ( Fs / Ns ) Nx 12-2
图 12-3 频率计测控时序
KX
康芯科技
N1
占空比 = 100% 12-
N1 N 2
3
【例 12-1 】
LIBRARY IEEE; -- 等精度频率计
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY GWDVPB IS
PORT (BCLK : IN STD_LOGIC; --CLOCK1 标准频率时钟信号
TCLK : IN STD_LOGIC; -- 待测频率时钟信号
CLR : IN STD_LOGIC; -- 清零和初始化信号
CL : IN STD_LOGIC; -- 预置门控制
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)); -- 位数据读出
END GWDVPB; 接下页
KX
康芯科技
ARCHITECTURE behav OF GWDVPB IS
SIGNAL BZQ,TSQ : STD_LOGIC_VECTOR(31 DOWNTO 0);-- 标准计数器 / 测频计数器
SIGNAL ENA,PUL : STD_LOGIC; -- 计数使能 / 脉宽计数使能
SIGNAL MA,CLK1,CLK2,CLK3 : STD_LOGIC ;
SIGNAL Q1,Q2,Q3,BENA : 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;
KX
康芯科技
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)-- 计数控制使能, CL 为预置门控信号,同时兼作正负脉宽测试控制信号
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; 接下页
KX
康芯科技
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;
在使用单片机统调前,应该直接对下载了例
在使用单片机统调前,应该直接对下载了例12-1 12-1程序的
程序的FPGA
FPGA进行测
进行测
试,如果使用附录的
试,如果使用附录的 EDA 系统,建议用实验电路 NO.5 ,六个键分别控制SP
EDA 系统,建议用实验电路 NO.5 ,六个键分别控制 SP
UL 、 CL 、 CLR 和 SEL ; BCLK 输入 50MHz 频率, TCLK 接 CLOCK1 ( 5 或
UL 、 CL 、 CLR 和 SEL ; BCLK 输入 50MHz 频率, TCLK 接 CLOCK1 ( 5 或 99
等);用两个数码管显示
等);用两个数码管显示88位输出 位输出DATA[7..0]
DATA[7..0]。
。
例 12-1 的原理 KX
康芯科技
FPGA
¡®1¡¯ SS1
Q2 £¨EEND£©
END
D Q D Q D Q
Q3 PL
C C C
MUX21
¡®0¡¯
2Ñ¡1¶à·ѡÔñÆ÷ 等精度测频率专用芯片
£¨START£©
BENA
¡®1¡¯
SPUL BZH
£¨BCLK£©
BCLK
64-8¶à·ѡÔñÆ÷
£¨SPUL£© 32
BENA BZQ
CLR
£¨CL£© ENA 32λ±ê׼ƵÂʼÆÊýÆ÷
D Q
8
£¨DATA£©
£¨TCLK£© DATA
C
TF
SS1µÄÂß¼¹¦ÄÜΪ£º
£¨CLR£© TCLK
32 µ±Q2=¡®1¡¯£¬Q3=¡®0¡¯
ENA TSQ
ÔòPUL=¡®1¡¯£¬·ñÔò
CLR PUL=¡®0¡¯
带括号的信号为端口信号 32λ´ý²âƵÂʼÆÊýÆ÷ SEL µ±Q2=¡®1¡¯£¬Q3=¡®1¡¯
ÔòEEND=¡®1¡¯£¬·ñÔò
3
£¨SEL£©
EEND=¡®0¡¯
KX
康芯科技
引脚功能如下:
clk :时钟信号输入。
Analog In :模拟信号输入。
D1~D8 :转换数据输出。
Reft 、 Refb 、 Refts 、 Refbs :参考电
压基准输入。
OE :输出使能,低电平有效。
DGND 、 VDDD :数字地、数字电源
端。
AGND 、 VDDA :模拟地、模拟电源
端。
图 12-7 TLC5510 采
样控制器模块图
KX
康芯科技
RR、、GG、
、BB:
: HS
HS:
: VS
VS:
:
三基色信号
三基色信号 行同步信号
行同步信号 场同步信号
场同步信号
VGA 工业标准要求的频率:
时钟频率(Clock
时钟频率( Clockfrequency
frequency)
)::
25.175MHz
25.175 MHz (像素输出的频率)
(像素输出的频率)
Line frequency
行频(Line
行频( frequency):
):
31469Hz
31469 Hz
Fieldfrequency
场频(Field
场频( frequency )
)
59.94Hz
:59.94
: Hz (每秒图像刷新频
(每秒图像刷新频
率)
率)
KX
康芯科技
VGA 工业标准显示模式要求:
行同步、场同步都为负极性,即同步头脉冲要求是负脉冲。
行同步、场同步都为负极性,即同步头脉冲要求是负脉冲。
KX
康芯科技
VGAROM
DATA8 R
ADDR G
OE B
CE
HS
CLK VS
MODE
图 12-11 FPGA 模块实体
KX
康芯科技
颜色编码如下:
颜色 黑 蓝 红 品 绿 青 黄 白
R 0 0 0 0 1 1 1 1
G 0 0 1 1 0 0 1 1
B 0 1 0 1 0 1 0 1
KX
康芯科技
正弦信号发生器,它的输出可以用下式来描述:
与 12-6 式联立,可得:
信号发生器的输出可描述为:
2
Sout A sin( k 1 ) A sin N B k 1 B
Af sin B k 1 B 12-8
2
k 1 N
B k 1 2 12-9
2
KX
康芯科技
图 12-12 基本 DDS 结构
KX
康芯科技
【例 12-4 】
-- DDSC : DDS 主模块
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_UNSIGNED.all;
use ieee.std_logic_arith.all;
library lpm; -- Altera LPM
use lpm.lpm_components.all;
entity ddsc is -- DDS 主模块
generic( freq_width : integer := 32; -- 输入频率字位宽
phase_width : integer := 12; -- 输入相位字位宽
LPM_ROMZ1
[11:0] [11:0] [11:0] 0
phasein[11:0] D[11:0] Q[11:0] INCLOCK
OUTCLOCK [9:0] [9:0]
1 Q[9:0] ddsout[9:0]
[11:0] MEMENAB
[31:20]
+ [1:12][1:10]
ADDRESS[9:0]
clk
[31:0] [31:0] [31:0] [31:0]
freqin[31:0] D[31:0] Q[31:0]
[31:0]
+ [1:32] [1:32]
D[31:0] Q[31:0] [31:0]
基本 DDS 结构的常用参量计算
BB
(1) DDS 的输出频率 fout 。 ffout
N
ffclkclk 12-10
out
22 N
ffclk
(2) DDS 的频率分辨率 f ffout
clk 12-11
N
。
out
22 N
ffout
BB 22 out
NN
注意 B 要取整,有时会有误
ffclkclk 差。
KX
康芯科技
【例 12-5 】
-- 简易频率合成器
-- DDS(32bit 频率字 ,1024 points 10bit out)
-- For GW48-CK
-- Mode: No.1
library ieee;
use ieee.std_logic_1164.all;
entity ddsall is
port( sysclk : in std_logic; -- 系统时钟
ddsout : out std_logic_vector(9 downto 0);-- DDS 输出
-- GW48 接口
sel : in std_logic; -- 输入频率字高低 16 位选
择
selok : in std_logic; -- 选择好信号
pfsel : in std_logic; -- 输入频率、相位选择
-- 频率 / 相位字输入(与 sel 、 selok 配合使用)
fpin : in std_logic_vector(15 downto 0));
end ddsall;
architecture behave of ddsall is
component ddsc is -- DDS 主模块
接下页
KX
康芯科技
generic(
freq_width : integer := 32; -- 输入频率字位宽
phase_width : integer := 12; -- 输入相位字位宽
adder_width : integer := 32; -- 累加器位宽
romad_width : integer := 10; -- 正弦 ROM 表地址位
宽
rom_d_width : integer := 10 -- 正弦 ROM 表数据位
宽
);
port( clk : in std_logic; -- DDS 合成时钟
freqin : in std_logic_vector (freq_width-1 downto 0);-- 频率字输
入
phasein :in std_logic_vector(phase_width-1 downto 0);-- 相位字输
入
ddsout :out std_logic_vector(rom_d_width-1 downto 0));-- DDS 输
出
end component ddsc;
signal clkcnt : integer range 4 downto 0; -- 分频器
signal clk : std_logic;
signal freqind : std_logic_vector(31 downto 0); -- 频率字
signal phaseind: std_logic_vector(11 downto 0); -- 相位字
begin
KX
康芯科技
x(n) z 1 z 1 z 1 z 1 z 1
h(N-2)
h(N-1)
h(n)
h(1)
h(2)
h(3)
y(n)
N 1
x(n)
x(n) x(n-1) x(n-2) x(n-N+2) x(n-N+1)
延迟环节
延迟环节 × h(0) × h(1) × h(N-2) × h(N-1)
乘法器
乘法器
+
加法器
加法器
y(n)
TXD RXD
其他
PC机
机 RXD TXD
UART设备
设备
GND GND
在信号线上共有两种状态,可分别用逻辑 1 和逻辑 0 来区
分。
起始位(Start
起始位( StartBi
Bi
tt)
) 数据位(Data
数据位( DataBit
Bit
ss)
)
校验位(parity
校验位( parityBi
Bi
tt)
) 停止位
停止位
位时间
位时间
帧
帧
波特率
波特率
KX
康芯科技
图 12-27 基本 UART 帧时
序
KX
康芯科技
1. 波特率发生器
【例 12-6 】
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
ENTITY baud IS
GENERIC(XTAL_CLK : integer := 12000000;
BAUD : integer := 9600; -- CW >= log2(CLK_DIV)
cw : integer:= 11);
PORT( clk : IN STD_LOGIC;
resetL : IN STD_LOGIC;
bclk : OUT STD_LOGIC);
END baud;
ARCHITECTURE behv OF baud IS
constant CLK_DIV_coef : integer := XTAL_CLK / (BAUD * 1
6 * 2);
SIGNAL clk_div : STD_LOGIC_VECTOR(cw-1 downto 0);
signal bclk_t : std_logic;
BEGIN
process(clk,resetL)
KX
康芯科技
begin
if(resetL = '0') then
clk_div <= (others => '0'); bclk_t <= '0';
elsif(clk'event and clk = '1') then
if(clk_div = clk_div_coef) then
clk_div <= (others => '0'); bclk_t <= not bclk_t;
else clk_div <= clk_div + 1;
end if;
end if;
end process;
bclk <= bclk_t;
end behv;
KX
康芯科技
2. UART 接收器
r_Start
rxd_sync = '0'
rxd_sync = '1'
r_Center
r_Stop
图 12-28
UART 接
收状态机
r_Sample r_Wait
rcnt16 = "1110" and
rbitcnt /= FrameLen
KX
康芯科技
3. UART 发送器
x_Idle
x_Start
x_Stop
图 12-29 U
ART 发送
状态机 x_Wait
xcnt16 = "01110" and
x_Shift xbitcnt /= FrameLen
KX
康芯科技
4. UART 设计总模
块
baud u_rec
resetL
clk clk rec_ready rec_ready
bclk bclk
resetL resetL [7:0] [7:0]
rxd rbuf[7:0] rbuf[7:0]
bclk
rxd
u_xmit
clk
bclk
resetL txd txd
xmit_cmd xmit_cmd xmit_done xmit_done
[7:0] [7:0]
xbuf[7:0] xbuf[7:0]
下对 UART 总模块中涉及的外部端口作简要说明:
时钟信号clk
时钟信号 clk(输入)
(输入) 复位信号resetL
复位信号 resetL(输入)
(输入)
16× 时钟bclk
16×时钟 bclk(输出) UART
(输出) 发送txd
UART发送 txd(输出)
(输出)
发送缓冲xbuf
发送缓冲 xbuf(输入)
(输入) 发送命令xmit_cmd
发送命令 xmit_cmd(输入)
(输入)
发送完成xmit_done
发送完成 xmit_done(输出)
(输出) UART 接收rxd
UART接收 rxd(输入)
(输入)
接收缓冲rbuf
接收缓冲 rbuf(输出)
(输出)
KX
康芯科技
实 验
电子设计综合实验
根据以上给出的66个项目的设计原理和示例,分别或综合
根据以上给出的 个项目的设计原理和示例,分别或综合
进行针对某一课程要求的设计实验,如作为毕业设计课题、电
进行针对某一课程要求的设计实验,如作为毕业设计课题、电
子设计竞赛实验练习题,或课外科技活动的练习。
子设计竞赛实验练习题,或课外科技活动的练习。
在这些设计项目中除了需要熟悉VHDL
在这些设计项目中除了需要熟悉 VHDL、
、EDA
EDA软件应用和
软件应用和FPGA
FPGA
开发外,还需了解许多其它的电路设计知识、开发技术和在EE
开发外,还需了解许多其它的电路设计知识、开发技术和在
DA实验系统上的硬件实现方法,例如:
DA 实验系统上的硬件实现方法,例如:
KX
康芯科技
实 验
电子设计综合实验
对于“等精度频率计设计”,还必须熟悉单片机汇编语言,
对于“等精度频率计设计”,还必须熟悉单片机汇编语言,
各种算法程序的编写方法、了解FPGA
各种算法程序的编写方法、了解 FPGA和单片机的接口以及
和单片机的接口以及
用于待测信号输入的高速整形器件的应用。
用于待测信号输入的高速整形器件的应用。
对于“高速
对于“高速A/DA/D采样控制设计”,还必须熟悉高速
采样控制设计”,还必须熟悉高速A/D A/D
TLC5510的使用方法,
器件TLC5510
器件 FPGA与
的使用方法,FPGA RAM的接口或
与RAM FPGA
的接口或FPGA
中 EAB的使用方法等。
中EAB 的使用方法等。
VGA图象显示控制器设计”,则要详细了解
对于“VGA
对于“ 图象显示控制器设计”,则要详细了解VV
GA显示器的工作原理和输入端口的功能。如果希望用
GA FPGA
显示器的工作原理和输入端口的功能。如果希望用FPGA
和单片机控制液晶VGA
和单片机控制液晶 VGA显示器,以便完成各种形式的动态显
显示器,以便完成各种形式的动态显
示,则需了解更多的知识。
示,则需了解更多的知识。
KX
康芯科技
实 验
电子设计综合实验
对于“直接数字合成器(DDS
对于“直接数字合成器( DDS)设计”,十分重要的是
)设计”,十分重要的是
DDS的实现原理和高速
了解DDS
了解 D/A器件的使用方法及与
的实现原理和高速D/A FPGA
器件的使用方法及与FPGA
的接口。
的接口。
对于“使用 IPCore
对于“使用IP Core设计 FIR滤波器”,要了解
设计FIR 滤波器”,要了解FIR
FIR的
的
实现原理及高速 A/D和
实现原理及高速A/D D/A器件的使用方法,以及
和D/A 器件的使用方法,以及IPIP核的获
核的获
得及其使用方法。
得及其使用方法。
对于“通用异步收发器( UART)设计”,要了解
对于“通用异步收发器(UART )设计”,要了解PC
PC机
机
的串行接口技术和上位机与FPGA
的串行接口技术和上位机与 FPGA通信程序的设计方法,以及
通信程序的设计方法,以及
RS232接口电路的设计方法。
RS232 接口电路的设计方法。