You are on page 1of 60

EDA 技术实用教

第 12 章( A )
电子系统设计实践
KX
康芯科技

12.1 等精度频率计设计

在此完成的设计项目可达到的指标为:

( 1 )频率测试功能:测频范围 0.1Hz ~ 100MHz 。测频精度:


测频全域相对误差恒为百万分之一。

( 2 )脉宽测试功能:测试范围 0.1μs ~ 1s ,测试精度 0.01μs 。

( 3 )占空比测试功能:测试精度 1 %~ 99 %。
KX
康芯科技

12.1 等精度频率计设计
12.1.1 主系统组成

图 12-1 频率计主系统电路组成
KX
康芯科技

12.1 等精度频率计设计
12.1.2 测频原理

图 12-2 等精度频率计主控结构
KX
康芯科技

设在一次预置门时间 Tpr 中对被测信号计数值为 Nx ,对


标准频率信号的计数值为 Ns ,则下式成立:

Fx / Nx  Fs / Ns 12-1

不难得到测得的频率为:
Fx  ( Fs / Ns )  Nx 12-2

图 12-3 频率计测控时序
KX
康芯科技

12.1.3 FPGA/CPLD 开发的 VHDL 设计

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
康芯科技

12.2 高速 A/D 采样控制设计

引脚功能如下:
clk :时钟信号输入。
Analog In :模拟信号输入。
D1~D8 :转换数据输出。
Reft 、 Refb 、 Refts 、 Refbs :参考电
压基准输入。
OE :输出使能,低电平有效。
DGND 、 VDDD :数字地、数字电源
端。
AGND 、 VDDA :模拟地、模拟电源
端。

图 12-4 TLC5510 引脚图


KX
康芯科技

12.2 高速 A/D 采样控制设计

图 12-5 TLC5510 采样时序图


KX
康芯科技

12.2 高速 A/D 采样控制设计

Adck :提供 A/D 采样时钟。


Adoe : TLC5510 的输出使能,
St0 St1 一直有效。
Data :采样数据输出。
ADck<='1'; ADck<='0'; Dclk :用来同步 Data 的输出,
lock<='1'; lock<='0';
dclk<='0'; dclk<='1'; 可以作为下一级的 Data 锁存信
号。
图 12-6 TLC5510 采样控制状态

图 12-7 TLC5510 采
样控制器模块图
KX
康芯科技

【例 12-2 】 -- TLC5510 采样控制。


library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity ad5510 is
port( rst : in std_logic; -- 复位
clk : in std_logic; -- 采样控制 Clock 输入
d : in std_logic_vector(7 downto 0); -- 8 位 A/D 数

ADck : out std_logic; -- TLC5510 的 CLK
ADoe : out std_logic; -- TLC5510 的 OE
data : out std_logic_vector(7 downto 0); -- 8 位数据
dclk : out std_logic ); -- 数据输出锁存信号
end ad5510;
architecture ADCTRL of ad5510 is
type adsstates is (sta0,sta1);
signal ads_state,next_ads_state : adsstates;
signal lock : std_logic;
begin
ads : PROCESS( ads_state) -- A/D 采样控制状态机
BEGIN
CASE ads_state IS
WHEN sta0 => ADck<='1'; lock<='1'; dclk<='0';
next_ads_state <= sta1;
WHEN sta1 => ADck<=‘0’; lock<=‘0’; dclk<=‘1’; 接下页
KX
康芯科技

next_ads_state <= sta0;


WHEN OTHERS => ADck<='0'; lock<='0'; dclk<='1';
next_ads_state <= sta0;
END CASE ;
END PROCESS;
PROCESS (CLK,rst)
BEGIN
IF RST ='0' THEN
ads_state <= sta0;
ELSIF ( CLK'EVENT AND CLK='1') THEN
ads_state <= next_ads_state; -- 在时钟上升沿,转换至下
一状态
END IF;
END PROCESS;
PROCESS (lock,rst) -- 此进程中,在 lock 的上升沿,将转换好的数据锁入
BEGIN
IF RST ='0' THEN data <= (others => '0');
ELSIF lock'EVENT AND lock='1' THEN data <= D ;
END IF;
END PROCESS ;
ADoe <= '0';
end ADCTRL;
KX
康芯科技

12.2 高速 A/D 采样控制设计

图 12-8 A/D 转换仿真波形


KX
康芯科技
【例 12-3 】 -- TLC5510 采样控制。
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity adctrl is
port( rst : in std_logic; -- 复位
clk : in std_logic; -- 采样控制 Clock 输入;
d : in std_logic_vector(7 downto 0);-- 8 位 A/D 数

ADck : out std_logic; -- TLC5510 的 CLK
ADoe : out std_logic; -- TLC5510 的 OE
data : out std_logic_vector(7 downto 0);-- 8 位数据
dclk : out std_logic);
end adctrl;
architecture logi of adctrl is
signal lock : std_logic;
begin
lock <= clk; ADck <= clk; dclk <= not lock;
PROCESS (lock,rst) -- 此进程中,在 lock 的上升沿,将转换好的数据锁入
BEGIN
if rst <= '0' then data <= (others => '0');
ELSIF lock'EVENT AND lock='1' THEN data <= D ;
END IF;
END PROCESS ;
ADoe <= '0';
KX
康芯科技

12.3 VGA 图像显示控制器设计

对于普通的 VGA 显示器,其引出线共含 5 个信号:

RR、、GG、
、BB:
: HS
HS:
: VS
VS:

三基色信号
三基色信号 行同步信号
行同步信号 场同步信号
场同步信号

对这 5 个信号的时序驱动,对于 VGA 显示器要严


格遵循“ VGA 工业标准”,即 640×480×60Hz 模式,
否则会损害 VGA 显示器。
KX
康芯科技

12.3 VGA 图像显示控制器设计

图 12-9 VGA 行扫描、场扫描时序示意图


KX
康芯科技

12.3 VGA 图像显示控制器设计

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
康芯科技

12.3 VGA 图像显示控制器设计

行扫描时序要求:(单位:像素,即输出一个像素 Pixel 的时间间隔)


行同步头 行图像 行周期
对应位置 Tf Ta Tb Tc Td Te Tg
时间(Pixels) 8 96 40 8 640 8 800
场扫描时序要求:(单元:行,即输出一行 Line 的时间间隔)
行同步头 行图像 行周期
对应位置 Tf Ta Tb Tc Td Te Tg
时间(Lines) 2 2 25 8 480 8 525

VGA 工业标准显示模式要求:

行同步、场同步都为负极性,即同步头脉冲要求是负脉冲。
行同步、场同步都为负极性,即同步头脉冲要求是负脉冲。
KX
康芯科技

12.3 VGA 图像显示控制器设计

图 12-10 VGA 图像控制器框图


KX
康芯科技

12.3 VGA 图像显示控制器设计

VGAROM
DATA8 R
ADDR G
OE B
CE
HS
CLK VS

MODE
图 12-11 FPGA 模块实体
KX
康芯科技

12.3 VGA 图像显示控制器设计

颜色编码如下:

颜色 黑 蓝 红 品 绿 青 黄 白
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.4 直接数字合成器( DDS )设计

正弦信号发生器,它的输出可以用下式来描述:

S out  A sin t  A sin(2f out t ). 12-4

用基准时钟 clk 进行抽样,令正弦信号的相位:

  2f out t 12-5

在一个 clk 周期 Tclk ,相位的变化量为:


2f out
  2f outTclk  12-6
f clk
KX
康芯科技

12.4 直接数字合成器( DDS )设计

为了对进行数字量化,把切割成 2N 份,由此每个 clk 周期


的相位增量用量化值来表述:
 N
B  2 且 B 为整数
2

与 12-6 式联立,可得:

B f out f out


N
 B 2 
N
12-7
2 f clk f clk
KX
康芯科技

12.4 直接数字合成器( DDS )设计

信号发生器的输出可描述为:

 2

Sout  A sin( k 1   )  A sin  N  B k 1  B 

 
  Af sin B k 1  B 12-8
2

其中  k 1 指前一个 clk 周期的相位值,同样得出

 k 1 N
B k 1  2 12-9
2
KX
康芯科技

12.4 直接数字合成器( DDS )设计

图 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; -- 输入相位字位宽

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);
-- 相位字输入
KX
康芯科技

architecture behave of ddsc is


signal acc : std_logic_vector(adder_width-1 downto 0);
signal phaseadd: std_logic_vector(phase_width-1 downto 0);
signal romaddr : std_logic_vector(romad_width-1 downto 0);
signal freqw : std_logic_vector(freq_width-1 downto 0);
signal phasew : std_logic_vector(phase_width-1 downto 0);
begin
process (clk)
begin
if(clk'event and clk = '1') then
freqw <= freqin; -- 频率字输入同步
phasew <= phasein; -- 相位字输入同步
acc <= acc + freqw; -- 相位累加器
end if;
end process;
phaseadd <= acc(adder_width-1 downto adder_width-phase_width) +
phasew;
romaddr <= phaseadd(phase_width-1 downto phase_width-romad_w
idth);
-- sinrom
i_rom : lpm_rom -- LPM_rom 调用
接下页
KX
康芯科技
GENERIC MAP ( LPM_WIDTH => rom_d_width,
LPM_WIDTHAD => romad_width,
LPM_ADDRESS_CONTROL => "UNREGISTERED",
LPM_OUTDATA => "REGISTERED",
LPM_FILE => "sin_rom.mif" )-- 指向 rom 文件
PORT MAP ( outclock => clk,address => romaddr,q => ddsout
);

end architecture behave;

下面是产生 SIN ROM 数据值的 C 程序:


#include <stdio.h>
#include "math.h"
main()
{int i;float s;
for(i=0;i<1024;i++)
{ s = sin(atan(1)*8*i/1024);
printf("%d : %d;\n",i,(int)
((s+1)*1023/2));
}
}

把上述 C 程序编译成程序后,在 DOS 命令行下执行:


romgen > sin_rom.mif;
KX
康芯科技

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]

图 12-13 DDS 主模块 RTL 综合结果


KX
康芯科技

基本 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

(3) DDS 的频率输入字 B 计算。

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
康芯科技

process(sysclk) begin -- GW48-CK 模式 1 ;频率字的输入


if(sysclk'event and sysclk = '1') then
if(selok = '1' and pfsel = '0') then
if(sel = '1') then
freqind(31 downto 16) <= fpin; else
freqind(15 downto 0) <= fpin;
end if;
elsif(selok = '1' and pfsel = '1') then
phaseind <= fpin(11 downto 0);
end if;
end if;
end process;
end behave;
KX
康芯科技

12.5 使用 IP Core 设计 FIR 滤波



N 1
N 阶 FIR 滤波器系统的传递函数:H z    hn z  n 12-12
n 0

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)

图 12-14 直接型 FIR 滤波器结构

N 1

N 阶的 FIR 系统差分方程表示为: Y (n)   h(m) x(n  m) 12-13


m 0
KX
康芯科技

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)

图 12-15 直接型 FIR 实现结构


KX
康芯科技

图 12-16 FIR 滤波器设计示意


KX
康芯科技

图 12-17 FIR Compiler 安装


KX
康芯科技

图 12-18 设置 User Libraries


KX
康芯科技

图 12-19 在 MegaWizard 管理器中选择 IP Core


KX
康芯科技

图 12-20 FIR 滤波器系数确定


KX
康芯科技

图 12-21 FIR 系数修


KX
康芯科技

图 12-22 FIR 模块 Symbol


KX
康芯科技

图 12-23 firm 模块仿真结果


KX
康芯科技

图 12-24 FIR 滤波器总体连接图


KX
康芯科技

12.6 通用异步收发器( UART )设计

TXD RXD
其他
PC机
机 RXD TXD
UART设备
设备
GND GND

图 12-25 UART 三线连接通信示意


KX
康芯科技

图 12-26 和图 12-27 中涉及的 UART


概念

在信号线上共有两种状态,可分别用逻辑 1 和逻辑 0 来区
分。

起始位(Start
起始位( StartBi
Bi
tt)
) 数据位(Data
数据位( DataBit
Bit
ss)

校验位(parity
校验位( parityBi
Bi
tt)
) 停止位
停止位
位时间
位时间


波特率
波特率
KX
康芯科技

图 12-26 基本 UART 帧格式


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

rcnt16 = "1110" and rcnt16 = "0100" and


rbitcnt = FrameLen rxd_sync = '0'

图 12-28
UART 接
收状态机
r_Sample r_Wait
rcnt16 = "1110" and
rbitcnt /= FrameLen
KX
康芯科技

3. UART 发送器

x_Idle

xcnt16 = "01111" and xmit_cmd_p = '1'


xmit_cmd_p = '0'

x_Start
x_Stop

xcnt16 = "01110" and xcnt16 = "01111"


xbitcnt = FrameLen

图 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]

图 12-30 UART 总模块 RTL 图


KX
康芯科技

下对 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 接口电路的设计方法。

You might also like