通信与电子系统综合实验 - Tufts...
Transcript of 通信与电子系统综合实验 - Tufts...
中国科学技术大学电子工程与信息科学系
通信与电子系统综合实验 课程报告
曹梦霏
2010-1-8
电子设计自动化实验室
通信与电子系统综合实验课程报告
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
通信与电子系统综合实验课程报告
2
一、学习实验总结
(一)FPGA 小实验
简单组合逻辑实验,加法乘法器:
通过这些实验熟悉利用 ISE 设计软件对WTDP 实验箱中 FPGA 硬件部分编程
和仿真。同时完成一些简单的组合逻辑电路实现,在加法乘法器的实验中了解
较多的与外设接口配置。其中实现与运算的实验除利用拨码开关硬件实现外,
还有使用行为仿真(Simulate Behaviroal Mode)的仿真实验,下图是两比特的
与运算仿真结果:
图一 与逻辑运算仿真
数码管控制实验:
由拨码开关作为数据输入,用七段数码管显示的实验。因此需要有从外设
的输入输出,并且将输入数据进行七段译码,得到对应的十六进制显示。其中
数据的七段译码通过 16 路选择实现。
计数器电路:
编写计数器,在数码管上显示。因此,学习到了分频,这也是第一个时
序电路设计。是后面实验中分频、扫描的基础。
(二)DSP 小实验
汇编编程跟踪,及与 C 语言的混合编程实验:
了解 CCS 软件编程环境,通过实例熟悉 CCS 开发环境下的 C 语言、汇编语
言和汇编与 C 混合编程。通过 CCS 下的查看工具查看寄存器情况跟踪程序运行。
DSP 数据存取、定时器、外中断实验等:
了解 DSP 对内部设备的控制信号收发以及与外设之间的通信都是通过地址
映射实现的。从定时器的实验中了解 DSP 内设工作时通过对状态寄存器读写完
成对其工作状态控制的机制。
FFT 范例程序阅读:
该程序利用 FPGA、DSP、ARM 三个模块实现外部数据输入进行快速傅立叶
通信与电子系统综合实验课程报告
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 位)
通信与电子系统综合实验课程报告
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
通信与电子系统综合实验课程报告
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 位作为
通信与电子系统综合实验课程报告
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
通信与电子系统综合实验课程报告
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)
通信与电子系统综合实验课程报告
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 扩展接口与
通信与电子系统综合实验课程报告
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 中不同锁存器对数据有不同处理
通信与电子系统综合实验课程报告
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#中的第一个数据地址,对其进行读写操作。实验中数
据描述如下:
通信与电子系统综合实验课程报告
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#地址空间中的一个地址。改进方法是利用多根地址
通信与电子系统综合实验课程报告
12
线与 FPGA 连接,由 FPGA 进行译码取址,可利用更多的 DSP 存储空间,另外
由地址线对 FPGA 中存储器进行片选,可以让读写数据更为灵活。
感谢与总结:
通过这一门实验课的学习,主要对 FPGA 有了更多更自主地接触,同时也了解了一
些 DSP 设计的实例。总的来说,知识上不仅获得了对硬件芯片如 CPLD、AD/DA 等的了
解,也获得了通过对 C 语言,汇编,VHDL 等编程语言的实践学习到的经验。实验室的
氛围很自由,可以让我们自主安排和选择;同学之间也可以很好地互相沟通交流;最重
要的是梁老师和李老师耐心而严谨的指导。这些让我们不仅能够培养独立解决问题的能
力,还能有和同学交流的机会,以及两位老师最专业地教授知识和经验的机会。
衷心感谢各位同学和学长的交流与帮助,感谢梁老师和李老师的专业指导、鼓励和
包容。