通信与电子系统综合实验 - Tufts...

13
中国科学技术大学电子工程与信息科学系 通信与电子系统综合实验 课程报告 曹梦霏 2010-1-8 电子设计自动化实验室

Transcript of 通信与电子系统综合实验 - Tufts...

Page 1: 通信与电子系统综合实验 - Tufts Universitymcao01/past/web/index.files/EDAreport.pdf通信与电子系统综合实验课程报告 3 变换再在arm 上显示。这里只关注了dsp

中国科学技术大学电子工程与信息科学系

通信与电子系统综合实验 课程报告

曹梦霏

2010-1-8

电子设计自动化实验室

Page 2: 通信与电子系统综合实验 - Tufts Universitymcao01/past/web/index.files/EDAreport.pdf通信与电子系统综合实验课程报告 3 变换再在arm 上显示。这里只关注了dsp

通信与电子系统综合实验课程报告

1

摘 要

本报告主要总结了一个月以来在电子设计自动化实验室里的所学。依据课程指导,

学习分为两大部分:第一部分是硬件实验台和软件编程环境的熟悉实验,其中包括 FPGA

部分和 DSP 部分,分别根据实验手册进行实践,报告中将简要提到学习到的知识;第二

部分是自选实验,本报告选择的是 FPGA 通过 CPLD 对外设的控制设计实验、FPGA 对

AD/DA 模块的控制实验和 FPGA 与 DSP 之间的通信实验三个实验进行总结报告,报告内

容将包括硬件分析、设计要求分析、编程分析和硬件实现。

目 录

一、学习实验总结 ....................................................................................................................2

(一)FPGA 小实验 ............................................................................................................. 2

(二)DSP 小实验 ................................................................................................................ 2

二、完成实验 ............................................................................................................................3

(一)FPGA 通过 CPLD 对外设的控制 ............................................................................... 3

(二)FPGA 对 AD/DA 模块的控制实验 ............................................................................ 6

(三)FPGA 与 DSP 之间的通信实验 ................................................................................. 9

感谢与总结: ......................................................................................................................... 12

Page 3: 通信与电子系统综合实验 - Tufts Universitymcao01/past/web/index.files/EDAreport.pdf通信与电子系统综合实验课程报告 3 变换再在arm 上显示。这里只关注了dsp

通信与电子系统综合实验课程报告

2

一、学习实验总结

(一)FPGA 小实验

简单组合逻辑实验,加法乘法器:

通过这些实验熟悉利用 ISE 设计软件对WTDP 实验箱中 FPGA 硬件部分编程

和仿真。同时完成一些简单的组合逻辑电路实现,在加法乘法器的实验中了解

较多的与外设接口配置。其中实现与运算的实验除利用拨码开关硬件实现外,

还有使用行为仿真(Simulate Behaviroal Mode)的仿真实验,下图是两比特的

与运算仿真结果:

图一 与逻辑运算仿真

数码管控制实验:

由拨码开关作为数据输入,用七段数码管显示的实验。因此需要有从外设

的输入输出,并且将输入数据进行七段译码,得到对应的十六进制显示。其中

数据的七段译码通过 16 路选择实现。

计数器电路:

编写计数器,在数码管上显示。因此,学习到了分频,这也是第一个时

序电路设计。是后面实验中分频、扫描的基础。

(二)DSP 小实验

汇编编程跟踪,及与 C 语言的混合编程实验:

了解 CCS 软件编程环境,通过实例熟悉 CCS 开发环境下的 C 语言、汇编语

言和汇编与 C 混合编程。通过 CCS 下的查看工具查看寄存器情况跟踪程序运行。

DSP 数据存取、定时器、外中断实验等:

了解 DSP 对内部设备的控制信号收发以及与外设之间的通信都是通过地址

映射实现的。从定时器的实验中了解 DSP 内设工作时通过对状态寄存器读写完

成对其工作状态控制的机制。

FFT 范例程序阅读:

该程序利用 FPGA、DSP、ARM 三个模块实现外部数据输入进行快速傅立叶

Page 4: 通信与电子系统综合实验 - Tufts Universitymcao01/past/web/index.files/EDAreport.pdf通信与电子系统综合实验课程报告 3 变换再在arm 上显示。这里只关注了dsp

通信与电子系统综合实验课程报告

3

变换再在 ARM 上显示。这里只关注了 DSP 部分的实现,了解 DSP 通过 EMIF 接

口对 FPGA 内部寄存器的访问是通过存储器映射寄存器实现,可以读写,并且

读写信号在读写指令运行时自动从外设或 FPGA 接收、自动发送给 FPGA。

二、完成实验

(一)FPGA 通过 CPLD 对外设的控制

硬件分析:

本实验涉及的硬件包括:

4 个脉冲出发开关;

8 个拨码开关;

8 个七段数码管;

32 个 LED 发光二极管;

以及如图二连接的 CPLD 图二 硬件连接图示

和 FPGA;

设计要求分析:

要实现 FPGA 对 CPLD 外设的全部利用,但是考虑到可用信号连接

只有 26 条,而内部实际信号(12 月 25 日前)为 24 条;因此必

须通过信号的译码压缩才能达到 FPGA 直接对外设控制的目的。

图三 通信端口分配示意图

由图中分析可以看到如果用 12 位信号传输外设输入的 12bit 信号、用 5 位信号传输

控制 32 个发光二极管的输出信号、用 3 位信号控制 8 个数码管的输出片选信号和

用 4 位信号控制数码管数据的输出信号,则总和恰好是 24;因此通过 24 个通信端

口就可以实现对所有外设的控制了。图四给出了 FPGA、CPLD 和外设的输入输出端

口示意图(其中时钟输入可用于在分频后动态扫描得到数码管全显示):

Xilinx FPGA

U46

XC2V2000

Xilinx CPLD

U50

XC95144XL

发 光 二 极 管

FD0~FD31

输出数码管 (动态 8

位)

输入 0/1 控制开关(8

位)

脉冲触发开关(4 位)

Page 5: 通信与电子系统综合实验 - Tufts Universitymcao01/past/web/index.files/EDAreport.pdf通信与电子系统综合实验课程报告 3 变换再在arm 上显示。这里只关注了dsp

通信与电子系统综合实验课程报告

4

图四 FPGA 通过 CPLD 控制外设的结构示意图(其中大的空心箭头代表数据流)

编程分析和实现:

CPLD 部分程序:

通过 32 路选择器实现 5 位来自 FPGA 的对发光二极管的控制信号对外

设的发光二极管译码控制,其中 0 为灭,1 为亮;每次亮 5 位二进制

数据对应序号的一个发光二极管。

with FPGALED select

LEDout<="00000000000000000000000000000001" when "00000",

"00000000000000000000000000000010" when "00001",

… …

"00000000000000000000000000000000" when others; --

其中 FPGALED 是来自 FPGA 的对发光二极管的控制信号,LEDout 是

输出给外设的控制信号。

通过 8 路选择器实现 3 位来自 FPGA 的对数码管的片选信号对外设的

数码管进行控制(如果采用动态扫描,则控制锁存器赋值);通过 16

路选择器实现 4 位来自 FPGA 的对数码管的数据信号对外设的数码管

数据进行译码显示。

CASE FPGANumber IS

WHEN "0000" => Seg7_abcdefgp <= "11111100";

WHEN "0001" => Seg7_abcdefgp <= "01100001";

… …

WHEN OTHERS => Seg7_abcdefgp <= "00000000";

END CASE;--其中 FPGANumber 是 FPGA 对数码管的数据信号,输出译

码后的十六进制显示 Seg7_abcedfgp 给外设。

CASE FPGAselect IS

Page 6: 通信与电子系统综合实验 - Tufts Universitymcao01/past/web/index.files/EDAreport.pdf通信与电子系统综合实验课程报告 3 变换再在arm 上显示。这里只关注了dsp

通信与电子系统综合实验课程报告

5

WHEN "000" => digout <= "11111110";

WHEN "001" => digout <= "11111101";

… …

WHEN OTHERS =>digout <= "11111111";

END CASE;--其中 FPGAselect 是 FPGA 对数码管的片选信号,输出共阴

极控制电平 digout 给数码管。

初始实验中,所有时钟周期输出一个锁存片选值,因此视觉上根据片

选的输入,每次只能显示一个数码管的值。提出的改进想法是(同 EDA

实验中动态扫描)在CPLD中创建8个锁存器,利用片选信号选择赋值,

再利用时钟输入对外设的 8 个数码管进行动态扫描获得视觉残留效应

下的各个数码管不同存储值的实现。

CASE FPGAselect IS

WHEN "000" => Data0 <= FPGAnumber;

WHEN "001" => Data1 <= FPGAnumber;

… …

WHEN OTHERS =>DATA0 <= "11111111";--实现 8 个锁存器,得到数据。

IF(saomiao="000")THEN

Seg7_abcdefgp <=Data0;

digout<="11111110";

ELSIF(saomiao="001")THEN

Seg7_abcdefgp <=Data1

digout <="11111101";

ELSIF(saomiao="010")THEN

… …

END IF;--saomiao 信号是时钟分频后以八为循环周期的扫描信号,对于

每单个时隙,输出一个锁存器值并显示在对应的数码管上。

FPGA 部分程序:

在 fpga_ctl.vhd 程序中需要完成对于外设输入信号的处理,例如 8 位拨

码开关输入之间的运算等等,然后将结果送给 CPLD;本实验中直接将

输入的 8 位拨码开关中的 5 位作为发光二极管的控制输出、3 位作为

Page 7: 通信与电子系统综合实验 - Tufts Universitymcao01/past/web/index.files/EDAreport.pdf通信与电子系统综合实验课程报告 3 变换再在arm 上显示。这里只关注了dsp

通信与电子系统综合实验课程报告

6

数码管的片选输出,4 位脉冲开关输入作为数码管的数据输出。然后

在 fpga_ctl.ucf 中完成各引脚的配置,依据《硬件连接关系

_20081117.doc》中 XC2V2000-FG676 FPGA 与 XC95144XL-10TQ144

CPLD 间的连接。

结果:

32 个发光二极管从左至右编号为 0~31,对于 5 位拨码开关的二进制

输入,对应序号的发光二极管亮灯响应。下图是实验仿真:

图五 32 个发光二极管控制仿真

通过 3 位拨码开关对 8 个数码管片选;选中的数码管将响应 4 位脉冲

开关的输入(其中一位值总为 1)得到十六进制显示。

其中,CPLD 和 FPGA 之间的引脚对应关系自行分配,并没有约束(端

口功能都为 I/O);只要保证在设计外设的时候对应关系一致即可。

(二)FPGA 对 AD/DA 模块的控制实验

硬件分析:

AD9021 支持最高采样率 20MSPS 的 10bit 双通道(I/Q)输入

CMOS 模数转换器,输出在二路复用的数字缓存总线上。

AD9761 是一个完全的双通道输出 10 比特 CMOS 数模转换

器,将输入进

行最高 40MSPS

地采样得到两路 图六 AD/DA 模块与 FPGA 硬件连接

Xilinx FPGA

U46

XC2V2000

扩展子

板接口

AD9021

AD9761

Page 8: 通信与电子系统综合实验 - Tufts Universitymcao01/past/web/index.files/EDAreport.pdf通信与电子系统综合实验课程报告 3 变换再在arm 上显示。这里只关注了dsp

通信与电子系统综合实验课程报告

7

20MSPS 再进行插值得到 40MSPS 的数据。因此,在最高采样时钟工作条件

下,AD 采样时钟 20MHZ,得到的两路数据量之和为 40M*10bit;而 DA 转换

始终为 40MHZ,将 AD 输入的数据总线上数据全部读取并分别送到 I/Q 两

路,得到各 20M 的数据量再通过 DA 内部的插值电路把每路数据量增加到

40M。

FPGA 处需要对 AD/DA 模块进行时钟产生、控制信号输入,频率是最为重

要的控制参数。如果频率匹配不当,可能导致时延不稳定,DA 对 AD 采样

的两路信号混淆读取,无法正常恢复出原 AD 采样的两路信号;此处固定

时延的问题需要考虑,但是基于 AD/DA 芯片内部的采样保持电路和插值处

理,固定时延不会产生太大的问题,实验中也并未做特殊处理。

设计要求分析:

设计目标是 AD 读取函数发生器送来的波形,采样量化成数字信号将数据送给

DA,然后 DA 将数字信号进行滤波恢复成模拟信号输出。

首先从 AD 模数转换分析如何达到正确控制:

图七 AD 信号时序分析

地方图中 I、Q 为两路模拟信号输入,下三行分别为时钟、通道选择信号和

数据输出信号。在每个时钟的上升沿同时对两路通道采样,例如在第一个

时钟周期内得到 I1,Q1 两个信号量化后存入缓存器,第二个时钟周期内得

到 I2,Q2 量化后存入缓存器……,而输出由 select 异步控制,在 select 的上

升沿时将 I 路数据送入输出数据线,在 select 的下降沿时将 Q 路数据送入

输出数据线;因此得到 I、Q 两路的串行输出。但是,从图中可以看出(1)

Page 9: 通信与电子系统综合实验 - Tufts Universitymcao01/past/web/index.files/EDAreport.pdf通信与电子系统综合实验课程报告 3 变换再在arm 上显示。这里只关注了dsp

通信与电子系统综合实验课程报告

8

由于时延的存在,使得在 select 的持续期内采样信号可能跳变,但是由于

是异步数据输出保证了采样保持;(2)由于 clock 和 select 的频率不同,时

延逐渐变换,最后甚至会漏传数据,例如图中的 I5。

因此,为实现正常工作,AD 的 select 信号和 clock 信号需要严格相同,保

证时延匹配。

DA 数模转换的时序要求分析:

图八 DA 信号时序分析

在每个 clock 的上升沿,DA 对输入的数字信号进行采样读取,保存在缓存

其中;select 信号决定缓存数据对输出通道的选择,上升沿保存在 I 通道,

下降沿保存在 Q 通道。如果是接续 AD 的输出,那么 clock 的采样频应与数

据速率相同,而 select 信号则保持是数据速率的一半,即与 AD 的时钟相

同。

编程分析和硬件实现

由上分析,可以设计这样的信号关系:

图九 AD/DA 模块与 FPGA 的信号连接关系

依据《硬件连接关系_20081117.doc》中 XC2V2000-FG676 FPGA 扩展接口与

Page 10: 通信与电子系统综合实验 - Tufts Universitymcao01/past/web/index.files/EDAreport.pdf通信与电子系统综合实验课程报告 3 变换再在arm 上显示。这里只关注了dsp

通信与电子系统综合实验课程报告

9

AD/DA 扩展板的连接,将 AD9201 的十位数据信号输入、sleep 信号、cs 信

号、select 信号以及时钟分配信号引脚;将 AD9761 的十位数据信号输出、

select 信号、write 信号以及时钟分配信号引脚。然后,将 sleep 和 cs 赋定

值保持一直工作,将时钟分频,令 AD 的 select 和 clock 为 1MHZ,DA 的 select

为 1MHZ、clock 与 write 为 2MHZ。数据直接将 AD 的输出赋给 DA 的输入。

实验结果:将函数发生器设为约 1khz 正弦输出,先用示波器观察原始信号。

然后将正弦输出探头分别放到 ADC 的 I 和 Q 输入通道,同时将示波器探头

放到 DAC 的 I 和 Q 输出通道。观察得到的波形与原始信号,幅度有差别,

频率和波形一致。表明 AD/DA 模块采集数据进行了两次相反操作后输出得

到了一致的频率信息。FPGA 对其控制成功。

(三)FPGA 与 DSP 之间的通信实验

硬件分析:

硬件连接关系图如图六:

FPGA 通过内部各端口引脚

分配得到与 DSP 的信号响

应,因此需要依据《硬件

连接关系_20081117.doc》中 图六 DSP 与 FPGA 硬件连接

DSP DM642-FC548与 FPGA XC2V2000-FG676的连接布置其与DSP的数据线、

地址线以及控制信号。

DSP 是通过存储器映射地址实现对其内外端口进行读写的,而作为处理器,

在进行数据读取和发送时,相应的读写信号自动发送接收。因此需要了解

数据信号的映射地址,本实验通过 EMIF接口对CE2#的数据空间进行处理。

设计要求分析:

实验要求实现 FPGA 和 DSP 之间的数据通信,从最简单的思想出发,FPGA

将数据传送给 DSP 然后经 DSP 特殊处理后,写回 FPGA;最后只需查看 FPGA

中返回的数据是否有 DSP 处理的痕迹即可判别数据通信是否成功。

基于上述分析,在 FPGA 中设计 16 路选择 8 位锁存器,映射到 DSP 的 CE2#

的第一个地址 0xA0000000。利用该地址的末八位数据传送数据,紧随四位

进行对 FPGA 中锁存器的片选,并且 FPGA 中不同锁存器对数据有不同处理

Page 11: 通信与电子系统综合实验 - Tufts Universitymcao01/past/web/index.files/EDAreport.pdf通信与电子系统综合实验课程报告 3 变换再在arm 上显示。这里只关注了dsp

通信与电子系统综合实验课程报告

10

后返回给 DSP;从而达到检测 DSP 中读回数据的验证目标,即是否通信。

编程分析和硬件实现:

将 FPGA 内部引脚与 DSP 的数据线、读写控制线连接,得到可以相互进行

数据通信的电路,如图七:

图七 FPGA 与 DSP 通信端口

FPGA 中锁存器使用 16 路选择译码即可:

CASE data_add IS – DSP 发送写信号

WHEN "0000" => E0<= DBUS-5; --MEM0#

WHEN "0001" => E1<= DBUS+5; --MEM1#

WHEN "0010" => E2<= DBUS+9; --MEM2#

… …

CASE data_add IS –DSP 发送读信号

WHEN "0000" => DBUS <= E0; --RAM0#

WHEN "0001" => DBUS <= E1; --RAM1#

WHEN "0010" =>DBUS <= E2; --RAM2#

… …其中 data_add 是数据的地址信号,在使能有效后,依据读写信号可以

分别进行双向赋值,在 DSP 向存储器写值时,不同存储器对数据采取不同

处理后再存储,因此可以进行跟踪识别。

DSP 中令 ptr 为 CE2#中的第一个数据地址,对其进行读写操作。实验中数

据描述如下:

Page 12: 通信与电子系统综合实验 - Tufts Universitymcao01/past/web/index.files/EDAreport.pdf通信与电子系统综合实验课程报告 3 变换再在arm 上显示。这里只关注了dsp

通信与电子系统综合实验课程报告

11

图八 FPGA 和 DSP 通信实例

程序描述:

*ptr = 0x009;

printf("ram1:%x\n ",*(unsigned int*)FPGA_ADDR);

i = *ptr;

*ptr = i | 0x100;

printf("ram2:%x\n ",*(unsigned int*)(FPGA_ADDR));

i = *ptr;

*ptr = (i | 0x200) & 0x2ff;

printf("ram3:%x\n ",*(unsigned int*)(FPGA_ADDR));

如图八和上列程序所示:(1)将片选位和数据位一起赋为 009 传给 FPGA,

FPGA 的零号寄存器响应,将数据减去 5 后存储;(2)然后 DSP 发送读信

号,将数据从零号寄存器中读出,得到 004 输出;(3)将片选数据位赋为

1,对一号寄存器进行写操作,数据线上值为 4,一号寄存器响应将 4+5=9

存储;(4)DSP 发送读信号,读取一号寄存器中值,输出 109;(5)将片

选数据位赋为 2,对二号寄存器进行写操作,数据线上值为 9,二号寄存器

将 9+9=12H 存储;(6)DSP 发送读信号,读取二号寄存器中数据,输出 212。

本实验的功能是:通过 DSP 的一位地址的 12 位数据线实现了 24=16 个地址扩

展,对其中另外 8 位可进行数据传输读写。不足之处在于:采用数据线对 FPGA

中寄存器进行片选,导致在片选的同时 DSP 读写信号必然发送,因而数据也会

改变;另外,只使用了 CE2#地址空间中的一个地址。改进方法是利用多根地址

Page 13: 通信与电子系统综合实验 - Tufts Universitymcao01/past/web/index.files/EDAreport.pdf通信与电子系统综合实验课程报告 3 变换再在arm 上显示。这里只关注了dsp

通信与电子系统综合实验课程报告

12

线与 FPGA 连接,由 FPGA 进行译码取址,可利用更多的 DSP 存储空间,另外

由地址线对 FPGA 中存储器进行片选,可以让读写数据更为灵活。

感谢与总结:

通过这一门实验课的学习,主要对 FPGA 有了更多更自主地接触,同时也了解了一

些 DSP 设计的实例。总的来说,知识上不仅获得了对硬件芯片如 CPLD、AD/DA 等的了

解,也获得了通过对 C 语言,汇编,VHDL 等编程语言的实践学习到的经验。实验室的

氛围很自由,可以让我们自主安排和选择;同学之间也可以很好地互相沟通交流;最重

要的是梁老师和李老师耐心而严谨的指导。这些让我们不仅能够培养独立解决问题的能

力,还能有和同学交流的机会,以及两位老师最专业地教授知识和经验的机会。

衷心感谢各位同学和学长的交流与帮助,感谢梁老师和李老师的专业指导、鼓励和

包容。