第 7 章 电子系统设计实践

60
7 7 第第第 第第第第 第第第 第第第第

Upload: lisbet

Post on 01-Feb-2016

99 views

Category:

Documents


0 download

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 Presentation

TRANSCRIPT

Page 1: 第 7 章 电子系统设计实践

第第 77 章章

电子系统设计实践电子系统设计实践

Page 2: 第 7 章 电子系统设计实践

7.1 等精度频率计设计

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

( 1 )频率测试功能:测频范围 0.1Hz ~ 100MHz 。测频精度:测频全域相对误差恒为百万分之一。

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

( 3 )占空比测试功能:测试精度 1 %~ 99 %。

Page 3: 第 7 章 电子系统设计实践

7.1 等精度频率计设计7.1.1 主系统组成

图 7-1 频率计主系统电路组成

Page 4: 第 7 章 电子系统设计实践

7.1 等精度频率计设计7.1.2 测频原理

图 7-2 等精度频率计主控结构

Page 5: 第 7 章 电子系统设计实践

设在一次预置门时间 Tpr中对被测信号计数值为 Nx ,对标准频率信号的计数值为 Ns,则下式成立:

NsFsNxFx // 7-1

不难得到测得的频率为:NxNsFsFx )/( 7-2

图 7-3 频率计测控时序

Page 6: 第 7 章 电子系统设计实践

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; 接下页

Page 7: 第 7 章 电子系统设计实践

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) -- 待测频率计数器,测频计数器 接下页

Page 8: 第 7 章 电子系统设计实践

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; 接下页

Page 9: 第 7 章 电子系统设计实践

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

Page 10: 第 7 章 电子系统设计实践

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 的原理图

带括号的信号为端口信号

等精度测频率专用芯片

Page 11: 第 7 章 电子系统设计实践

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

图 7-4 TLC5510 引脚图

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

Page 12: 第 7 章 电子系统设计实践

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

图 7-5 TLC5510 采样时序图

Page 13: 第 7 章 电子系统设计实践

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 采样控制器模块图

Page 14: 第 7 章 电子系统设计实践

【例 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’; 接下页

Page 15: 第 7 章 电子系统设计实践

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;

Page 16: 第 7 章 电子系统设计实践

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

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

Page 17: 第 7 章 电子系统设计实践

【例 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;

Page 18: 第 7 章 电子系统设计实践

7.3 VGA 图像显示控制器设计

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

R 、 G 、 B :三基色信号

R 、 G 、 B :三基色信号

HS :行同步信号

HS :行同步信号

VS :场同步信号

VS :场同步信号

对这 5 个信号的时序驱动,对于 VGA 显示器要严格遵循“ VGA 工业标准”,即 640×480×60Hz 模式,否则会损害 VGA 显示器。

Page 19: 第 7 章 电子系统设计实践

7.3 VGA 图像显示控制器设计

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

Page 20: 第 7 章 电子系统设计实践

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 (每秒图像刷新频率)

Page 21: 第 7 章 电子系统设计实践

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 工业标准显示模式要求:

行同步、场同步都为负极性,即同步头脉冲要求是负脉冲。行同步、场同步都为负极性,即同步头脉冲要求是负脉冲。

Page 22: 第 7 章 电子系统设计实践

7.3 VGA 图像显示控制器设计

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

Page 23: 第 7 章 电子系统设计实践

7.3 VGA 图像显示控制器设计

图 7-11 FPGA 模块实体

RGB

HSVS

DATA8ADDR

OECE

CLK

MODE

VGAROM

Page 24: 第 7 章 电子系统设计实践

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

Page 25: 第 7 章 电子系统设计实践

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

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

).2sin(sin tfAtAS outout 7-4

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

tfout 2 7-5

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

clk

outclkout f

fTf

22 7-6

Page 26: 第 7 章 电子系统设计实践

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

为了对进行数字量化,把切割成 2N 份,由此每个 clk 周期的相位增量用量化值来表述:

NB 22

且 为整数B

与 7-6 式联立,可得:

clk

outN f

fB

2

clk

outN

f

fB 2 7-7

Page 27: 第 7 章 电子系统设计实践

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

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

BBAfBBAAS

kkNkout 11 sin1 2

2sin)sin( 7-8

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

Nkk

B 22

11

7-9

Page 28: 第 7 章 电子系统设计实践

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

图 7-12 基本 DDS 结构

Page 29: 第 7 章 电子系统设计实践

【例 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; 接下页

Page 30: 第 7 章 电子系统设计实践

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 调用 接下页

Page 31: 第 7 章 电子系统设计实践

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;

Page 32: 第 7 章 电子系统设计实践

[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综合结果

Page 33: 第 7 章 电子系统设计实践

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

Page 34: 第 7 章 电子系统设计实践

【例 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 主模块 接下页

Page 35: 第 7 章 电子系统设计实践

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; 接下页

Page 36: 第 7 章 电子系统设计实践

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;

Page 37: 第 7 章 电子系统设计实践

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

Page 38: 第 7 章 电子系统设计实践

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 实现结构

Page 39: 第 7 章 电子系统设计实践

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

Page 40: 第 7 章 电子系统设计实践

图 7-17 FIR Compiler安装

Page 41: 第 7 章 电子系统设计实践

图 7-18 设置 User Libraries

Page 42: 第 7 章 电子系统设计实践

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

Page 43: 第 7 章 电子系统设计实践

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

Page 44: 第 7 章 电子系统设计实践

图 7-21 FIR 系数修正

Page 45: 第 7 章 电子系统设计实践

图 7-22 FIR 模块 Symbol

Page 46: 第 7 章 电子系统设计实践

图 7-23 firm 模块仿真结果

Page 47: 第 7 章 电子系统设计实践

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

Page 48: 第 7 章 电子系统设计实践

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

PC机 其他 UART设备

TXD

RXD

GND

RXD

TXD

GND

机设备

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

Page 49: 第 7 章 电子系统设计实践

图 7-26 和图 7-27 中涉及的 UART概念

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

起始位( Start Bit )起始位( Start Bit ) 数据位( Data Bit

s )数据位( Data Bits )

校验位( parity Bit )校验位( parity Bit ) 停止位停止位

位时间位时间

帧 帧

波特率波特率

Page 50: 第 7 章 电子系统设计实践

图 7-26 基本 UART帧格式

Page 51: 第 7 章 电子系统设计实践

图 7-27 基本 UART帧时序

Page 52: 第 7 章 电子系统设计实践

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)

接下页

Page 53: 第 7 章 电子系统设计实践

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;

Page 54: 第 7 章 电子系统设计实践

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 接收状态机

Page 55: 第 7 章 电子系统设计实践

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 发送状态机

Page 56: 第 7 章 电子系统设计实践

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 图

Page 57: 第 7 章 电子系统设计实践

下对 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 (输出)

Page 58: 第 7 章 电子系统设计实践

实 验

根据以上给出的 6 个项目的设计原理和示例,分别或综合进行针对某一课程要求的设计实验,如作为毕业设计课题、电子设计竞赛实验练习题,或课外科技活动的练习。在这些设计项目中除了需要熟悉 VHDL 、 EDA 软件应用和 FPGA开发外,还需了解许多其它的电路设计知识、开发技术和在 EDA 实验系统上的硬件实现方法,例如:

根据以上给出的 6 个项目的设计原理和示例,分别或综合进行针对某一课程要求的设计实验,如作为毕业设计课题、电子设计竞赛实验练习题,或课外科技活动的练习。在这些设计项目中除了需要熟悉 VHDL 、 EDA 软件应用和 FPGA开发外,还需了解许多其它的电路设计知识、开发技术和在 EDA 实验系统上的硬件实现方法,例如:

电子设计综合实验

Page 59: 第 7 章 电子系统设计实践

实 验

对于“等精度频率计设计”,还必须熟悉单片机汇编语言,各种算法程序的编写方法、了解 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 显示器,以便完成各种形式的动态显示,则需了解更多的知识。

电子设计综合实验

Page 60: 第 7 章 电子系统设计实践

实 验

对于“直接数字合成器( 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接口电路的设计方法。

电子设计综合实验