第 7 章 电子系统设计实践
DESCRIPTION
第 7 章 电子系统设计实践. 7.1 等精度频率计设计. 在此完成的设计项目可达到的指标为:. ( 1 )频率测试功能:测频范围 0.1Hz ~ 100MHz 。测频精度:测频全域相对误差恒为百万分之一。. ( 2 )脉宽测试功能:测试范围 0.1μs ~ 1s ,测试精度 0.01μs 。. ( 3 )占空比测试功能:测试精度 1 %~ 99 %。. 7.1 等精度频率计设计. 7.1.1 主系统组成. 图 7-1 频率计主系统电路组成. 7.1 等精度频率计设计. 7.1.2 测频原理. 图 7-2 等精度频率计主控结构. - PowerPoint PPT PresentationTRANSCRIPT
第第 77 章章
电子系统设计实践电子系统设计实践
7.1 等精度频率计设计
在此完成的设计项目可达到的指标为:
( 1 )频率测试功能:测频范围 0.1Hz ~ 100MHz 。测频精度:测频全域相对误差恒为百万分之一。
( 2 )脉宽测试功能:测试范围 0.1μs ~ 1s ,测试精度 0.01μs 。
( 3 )占空比测试功能:测试精度 1 %~ 99 %。
7.1 等精度频率计设计7.1.1 主系统组成
图 7-1 频率计主系统电路组成
7.1 等精度频率计设计7.1.2 测频原理
图 7-2 等精度频率计主控结构
设在一次预置门时间 Tpr中对被测信号计数值为 Nx ,对标准频率信号的计数值为 Ns,则下式成立:
NsFsNxFx // 7-1
不难得到测得的频率为:NxNsFsFx )/( 7-2
图 7-3 频率计测控时序
7.1.3 FPGA/CPLD 开发的 VHDL 设计
占空比 = 7-3%10021
1
NN
N
【例 7-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; 接下页
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; 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)-- 计数控制使能, 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; 接下页
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;
在使用单片机统调前,应该直接对下载了例 7-1 程序的 FPGA 进行测试,如果使用附录的 EDA 系统,建议用实验电路 NO.5 ,六个键分别控制 SPUL 、CL 、 CLR 和 SEL ; BCLK 输入 50MHz 频率, TCLK 接 CLOCK1 ( 5或 9等);用两个数码管显示 8位输出 DATA[7..0] 。
在使用单片机统调前,应该直接对下载了例 7-1 程序的 FPGA 进行测试,如果使用附录的 EDA 系统,建议用实验电路 NO.5 ,六个键分别控制 SPUL 、CL 、 CLR 和 SEL ; BCLK 输入 50MHz 频率, TCLK 接 CLOCK1 ( 5或 9等);用两个数码管显示 8位输出 DATA[7..0] 。
C
D Q
C
D Q
C
D Q
C
D Q
£¨DATA£©
£¨START£©
SPUL
EEND=¡®0¡¯
ÔòEEND=¡®1¡¯£¬·ñÔò
µ±Q2=¡®1¡¯£¬Q3=¡®1¡¯
PUL=¡®0¡¯
ÔòPUL=¡®1¡¯£¬·ñÔò
µ±Q2=¡®1¡¯£¬Q3=¡®0¡¯
SS1µÄÂß¼¹¦ÄÜΪ£º
2Ñ¡1¶à·ѡÔñÆ÷
FPGA
¡®1¡¯
£¨SPUL£©
ENA
BENA¡®0¡¯
MUX21
¡®1¡¯
£¨EEND£©
PL
END
SS1
Q3
Q2
£¨SEL£©
£¨CLR£©
£¨TCLK£©
£¨CL£©
£¨BCLK£©
8DATA
SEL
3
32
3264-8¶à·ѡÔñÆ÷
TSQ
32λ´ý²âƵÂʼÆÊýÆ÷
ENA
TCLKTF
CLR
BENA
BCLKBZH
BZQ
32λ±ê׼ƵÂʼÆÊýÆ÷
CLR
例 7-1 的原理图
带括号的信号为端口信号
等精度测频率专用芯片
7.2 高速 A/D 采样控制设计
图 7-4 TLC5510 引脚图
引脚功能如下:clk :时钟信号输入。Analog In :模拟信号输入。D1~D8 :转换数据输出。Reft 、 Refb 、 Refts 、 Refbs :参考电压基准输入。OE :输出使能,低电平有效。DGND 、 VDDD :数字地、数字电源端。AGND 、 VDDA :模拟地、模拟电源端。
7.2 高速 A/D 采样控制设计
图 7-5 TLC5510 采样时序图
7.2 高速 A/D 采样控制设计
图 7-6 TLC5510 采样控制状态图
St1St0
ADck<=' 1' ;l ock<=' 1' ;dcl k<=' 0' ;
ADck<=' 0' ;l ock<=' 0' ;dcl k<=' 1' ;
Adck :提供 A/D 采样时钟。Adoe : TLC5510 的输出使能,一直有效。Data :采样数据输出。Dclk :用来同步 Data 的输出,可以作为下一级的 Data 锁存信号。
图 7-7 TLC5510 采样控制器模块图
【例 7-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;beginads : 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’; 接下页
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;
7.2 高速 A/D 采样控制设计
图 7-8 A/D 转换仿真波形
【例 7-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;beginlock <= 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';end logi;
7.3 VGA 图像显示控制器设计
对于普通的 VGA 显示器,其引出线共含 5 个信号:
R 、 G 、 B :三基色信号
R 、 G 、 B :三基色信号
HS :行同步信号
HS :行同步信号
VS :场同步信号
VS :场同步信号
对这 5 个信号的时序驱动,对于 VGA 显示器要严格遵循“ VGA 工业标准”,即 640×480×60Hz 模式,否则会损害 VGA 显示器。
7.3 VGA 图像显示控制器设计
图 7-9 VGA 行扫描、场扫描时序示意图
7.3 VGA 图像显示控制器设计
VGA 工业标准要求的频率:
时钟频率( Clock frequency ) :25.175 MHz (像素输出的频率)时钟频率( Clock frequency ) :25.175 MHz (像素输出的频率)
行频( Line frequency ):31469 Hz
行频( Line frequency ):31469 Hz
场频( Field frequency ) :59.94 Hz (每秒图像刷新频率)
场频( Field frequency ) :59.94 Hz (每秒图像刷新频率)
7.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 工业标准显示模式要求:
行同步、场同步都为负极性,即同步头脉冲要求是负脉冲。行同步、场同步都为负极性,即同步头脉冲要求是负脉冲。
7.3 VGA 图像显示控制器设计
图 7-10 VGA 图像控制器框图
7.3 VGA 图像显示控制器设计
图 7-11 FPGA 模块实体
RGB
HSVS
DATA8ADDR
OECE
CLK
MODE
VGAROM
7.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
7.4 直接数字合成器( DDS )设计
正弦信号发生器,它的输出可以用下式来描述:
).2sin(sin tfAtAS outout 7-4
用基准时钟 clk 进行抽样,令正弦信号的相位:
tfout 2 7-5
在一个 clk 周期 Tclk ,相位的变化量为:
clk
outclkout f
fTf
22 7-6
7.4 直接数字合成器( DDS )设计
为了对进行数字量化,把切割成 2N 份,由此每个 clk 周期的相位增量用量化值来表述:
NB 22
且 为整数B
与 7-6 式联立,可得:
clk
outN f
fB
2
clk
outN
f
fB 2 7-7
7.4 直接数字合成器( DDS )设计
信号发生器的输出可描述为:
BBAfBBAAS
kkNkout 11 sin1 2
2sin)sin( 7-8
其中 指前一个 clk 周期的相位值,同样得出1k
Nkk
B 22
11
7-9
7.4 直接数字合成器( DDS )设计
图 7-12 基本 DDS 结构
【例 7-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 LPMuse 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); -- 相位字输入 ddsout : out std_logic_vector(rom_d_width-1 downto 0)); -- DDS 输出end entity ddsc; 接下页
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 调用 接下页
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;
[31:0]Q[31:0][1:32] D[31:0]+[31:0]
[1:32]
[31:0]
+[11:0]
[1:12]
[31:20]
[31:0]Q[31:0][31:0] D[31:0]
[11:0]Q[11:0][11:0] D[11:0]LPM_ROMZ1
0 INCLOCKOUTCLOCK
1 MEMENAB[1:10] ADDRESS[9:0]
[9:0]Q[9:0] ddsout[9:0][9:0]
phasein[11:0] [11:0]
freqin[31:0] [31:0]clk
图 7-13 DDS 主模块 RTL综合结果
基本 DDS 结构的常用参量计算
(1) DDS 的输出频率 fout 。clkNout f
Bf
2
clkNout fB
f
2
7-10
(2) DDS 的频率分辨率 。fNclk
out
ff
2 N
clkout
ff
2 7-11
(3) DDS 的频率输入字 计算。B
clk
outN
f
fB 2
clk
outN
f
fB 2 注意 要取整,有时会有误差。B
【例 7-5 】-- 简易频率合成器-- DDS(32bit 频率字 ,1024 points 10bit out) -- For GW48-CK -- Mode: No.1library 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 主模块 接下页
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 i_ddsc : ddsc -- 例化 DDSC port map(clk => clk, ddsout => ddsout, phasein => phaseind, freqin => freqind); clk <= sysclk; 接下页
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;
7.5 使用 IP Core 设计 FIR 滤波器N 阶 FIR 滤波器系统的传递函数:
1
0
N
n
nznhzH 7-12
x(n)
h(n)
h(1)
h(2)
h(3)
h(N-
2)
h(N-
1)
y(n)
1z 1z 1z 1z 1z
图 7-14 直接型 FIR滤波器结构
N 阶的 FIR 系统差分方程表示为:
1
0
)()()(N
m
mnxmhnY 7-13
x(n)x(n)
x(n-1) x(n-2) x(n-N+2) x(n-N+1)
× × × ×
+
y(n)
h(0) h(1) h(N-2) h(N-1)延迟环节
乘法器
加法器
乘法器
加法器
延迟环节
图 7-15 直接型 FIR 实现结构
图 7-16 FIR滤波器设计示意
图 7-17 FIR Compiler安装
图 7-18 设置 User Libraries
图 7-19 在 MegaWizard管理器中选择 IP Core
图 7-20 FIR滤波器系数确定
图 7-21 FIR 系数修正
图 7-22 FIR 模块 Symbol
图 7-23 firm 模块仿真结果
图 7-24 FIR滤波器总体连接图
7.6 通用异步收发器( UART )设计
PC机 其他 UART设备
TXD
RXD
GND
RXD
TXD
GND
机设备
图 7-25 UART 三线连接通信示意
图 7-26 和图 7-27 中涉及的 UART概念
在信号线上共有两种状态,可分别用逻辑 1 和逻辑 0 来区分。
起始位( Start Bit )起始位( Start Bit ) 数据位( Data Bit
s )数据位( Data Bits )
校验位( parity Bit )校验位( parity Bit ) 停止位停止位
位时间位时间
帧 帧
波特率波特率
图 7-26 基本 UART帧格式
图 7-27 基本 UART帧时序
1. 波特率发生器【例 7-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;BEGINprocess(clk,resetL)
接下页
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;
2. UART 接收器
r_Start
r_Center
r_Wai tr_Sampl e
r_Stop
rxd_sync = ' 0'
rxd_sync = ' 1'
rcnt16 = "0100" andrxd_sync = ' 0'
rcnt16 = "1110" andrbi tcnt / = FrameLen
rcnt16 = "1110" andrbi tcnt = FrameLen
图 7-28 UART 接收状态机
3. UART 发送器
x_I dl e
x_Start
x_Wai t
x_Shi f t
x_Stop
xmi t_cmd_p = ' 1'
xcnt16 = "01111"
xcnt16 = "01110" andxbi tcnt / = FrameLen
xcnt16 = "01110" andxbi tcnt = FrameLen
xcnt16 = "01111" andxmi t_cmd_p = ' 0'
图 7-29 UART 发送状态机
4. UART 设计总模块
baudclkresetL bclk
u_recresetLbclkrxd
rec_ready[7:0]rbuf[7:0]
u_xmitclkbclkresetLxmit_cmd
[7:0] xbuf[7:0]
txdxmit_done
rec_ready
rbuf[7:0][7:0]
rxd
xmit_donexmit_cmd
xbuf[7:0] [7:0]
txd
bclk
resetLclk
图 7-30 UART总模块 RTL 图
下对 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 (输出)
实 验
根据以上给出的 6 个项目的设计原理和示例,分别或综合进行针对某一课程要求的设计实验,如作为毕业设计课题、电子设计竞赛实验练习题,或课外科技活动的练习。在这些设计项目中除了需要熟悉 VHDL 、 EDA 软件应用和 FPGA开发外,还需了解许多其它的电路设计知识、开发技术和在 EDA 实验系统上的硬件实现方法,例如:
根据以上给出的 6 个项目的设计原理和示例,分别或综合进行针对某一课程要求的设计实验,如作为毕业设计课题、电子设计竞赛实验练习题,或课外科技活动的练习。在这些设计项目中除了需要熟悉 VHDL 、 EDA 软件应用和 FPGA开发外,还需了解许多其它的电路设计知识、开发技术和在 EDA 实验系统上的硬件实现方法,例如:
电子设计综合实验
实 验
对于“等精度频率计设计”,还必须熟悉单片机汇编语言,各种算法程序的编写方法、了解 FPGA 和单片机的接口以及用于待测信号输入的高速整形器件的应用。 对于“高速 A/D 采样控制设计”,还必须熟悉高速 A/D 器件 TLC5510 的使用方法, FPGA与 RAM 的接口或 FPGA 中EAB 的使用方法等。 对于“ VGA 图象显示控制器设计”,则要详细了解 VGA显示器的工作原理和输入端口的功能。如果希望用 FPGA 和单片机控制液晶 VGA 显示器,以便完成各种形式的动态显示,则需了解更多的知识。
对于“等精度频率计设计”,还必须熟悉单片机汇编语言,各种算法程序的编写方法、了解 FPGA 和单片机的接口以及用于待测信号输入的高速整形器件的应用。 对于“高速 A/D 采样控制设计”,还必须熟悉高速 A/D 器件 TLC5510 的使用方法, FPGA与 RAM 的接口或 FPGA 中EAB 的使用方法等。 对于“ VGA 图象显示控制器设计”,则要详细了解 VGA显示器的工作原理和输入端口的功能。如果希望用 FPGA 和单片机控制液晶 VGA 显示器,以便完成各种形式的动态显示,则需了解更多的知识。
电子设计综合实验
实 验
对于“直接数字合成器( DDS )设计”,十分重要的是了解 DDS 的实现原理和高速 D/A 器件的使用方法及与 FPGA 的接口。
对于“使用 IP Core 设计 FIR滤波器”,要了解 FIR的实现原理及高速 A/D 和 D/A 器件的使用方法,以及 IP核的获得及其使用方法。
对于“通用异步收发器( UART )设计”,要了解PC机的串行接口技术和上位机与 FPGA通信程序的设计方法,以及RS232接口电路的设计方法。
对于“直接数字合成器( DDS )设计”,十分重要的是了解 DDS 的实现原理和高速 D/A 器件的使用方法及与 FPGA 的接口。
对于“使用 IP Core 设计 FIR滤波器”,要了解 FIR的实现原理及高速 A/D 和 D/A 器件的使用方法,以及 IP核的获得及其使用方法。
对于“通用异步收发器( UART )设计”,要了解PC机的串行接口技术和上位机与 FPGA通信程序的设计方法,以及RS232接口电路的设计方法。
电子设计综合实验