VHDL的串行同步通信SPI设计.doc
- 文档编号:2579934
- 上传时间:2022-11-02
- 格式:DOC
- 页数:15
- 大小:310.50KB
VHDL的串行同步通信SPI设计.doc
《VHDL的串行同步通信SPI设计.doc》由会员分享,可在线阅读,更多相关《VHDL的串行同步通信SPI设计.doc(15页珍藏版)》请在冰豆网上搜索。
课程设计
课程名称_电子技术综合设计与实训
题目名称基于VHDL的串行同步通信SPI设计
学生学院_自动化____________
专业班级_电子信息科学与技术____
学号__3107001554__________
学生姓名____陈振添_____________
指导教师____蔡述庭__________
2009年12月21日
广东工业大学课程设计任务书
题目名称
基于VHDL的串行同步通信SPI设计
学生学院
自动化
专业班级
电子信息科学与技术
姓名
陈振添
学号
3107001554
一、课程设计的内容
设计一个同步串行通讯SPI
二、课程设计的要求与数据
设计要求包括:
1.深入了解串行通信的方案内容和协议,思考设计方法。
2.设计串行通信方案,并写好传输程序VHDL。
3.下载到DE2板调试,检测其可行性。
三、课程设计应完成的工作
1.利用VHDL语言编程实现SPI;
2.利用DE2板对所设计的思想进行验证;
3.总结VHDL设计结果,撰写课程设计报告。
四、课程设计进程安排
序号
设计各阶段内容
地点
起止日期
1
任务的确定-spi
实验2号楼214
12.14
2
查找资料
实验2号楼307
12.15
3
编写SPI的各个模块VHDL程序
实验2号楼216
12.16
4
仿真,分配管脚
实验2号楼214
12.17
5
验证修改验收
实验2号楼214
12.18
6
整理说明书,报告
实验楼
12.19
五、应收集的资料及主要参考文献
[1] PIC单片机原理及应用(第3版)北京航天航空大学出版社
[2] 黄智伟,王彦·FPGA系统设计与实践[M]·北京:
电子工业出版社,2005
发出任务书日期:
年月日指导教师签名:
计划完成日期:
年月日基层教学单位责任人签章:
主管院长签章:
摘要
本设计是用Quartus作为开发环境,以DE2板为硬件平台实现的SPI同步串行通讯。
设计过程方便。
根据接收和发送两个主要部分实现了SPI的基本功能。
此外,该设计还实现了波特率发生器,数码管显示的功能。
用DE2板实现具有电路简洁,开发周期短的优点。
充分利用了EDA设计的优点。
开发过程用了VHDL硬件描述语言进行描述,从底层设计,分模块进行,充分提高了设计者的数字逻辑设计的概念。
关键词:
SPI,同步串行通讯,Quartus,DE2板,VHDL硬件描述语言。
目录
1引言 6
2SPI简介 6
2.1SPI协议和工作原理 6
2.2波特率 7
3模块设计 7
3.1顶层模块RTL综合 7
3.2波特率发生器模块 8
3.3SDO数据发送模块 9
3.4SDI数据接收模块 10
3.5数码管显示模块 11
4 实验验证 12
4.1实验验证方案选择 12
4.2实验现象 12
5结论与问题讨论 12
5.1完成设计要求的程度 12
5.2遇到的问题及解决方法 13
5.3存在的不足及改进思路 13
5.4心得体会 13
参考文献 14
1引言
串行扩展通信接口是器件间进行数据交换的平台和重要渠道。
主控同步串行通信模块主要应用于系统内部近距离的串行通讯,如SPI,I^C等。
SPI是英文SerialPeripheralInterface的缩写,中文意思是串行外围设备接口,SPI是Motorola公司推出的一种同步串行通讯方式,是一种三线同步总线,因其硬件功能很强,与SPI有关的软件就相当简单,使CPU有更多的时间处理其他事务。
2SPI简介
2.1SPI协议和工作原理
顾名思义,串行接口的数据传输方式是串行的,即数据是一位一位地进行传输虽然串行接口的传输方式导致其传输速度会比较慢,但是它却具有较强的抗干扰能力,并能有较长的传输距离,RS232口的最大传输距离为15m。
SPI接口主要应用在EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。
SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议,比如AT91RM9200.
SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。
也是所有基于SPI的设备共有的,它们是SDI(数据输入),SDO(数据输出),SCK(时钟),CS(片选)。
(1)SDO-主设备数据输出,从设备数据输入
(2)SDI-主设备数据输入,从设备数据输出
(3)SCLK-时钟信号,由主设备产生
(4)CS-从设备使能信号,由主设备控制
其中CS是控制芯片是否被选中的,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),对此芯片的操作才有效。
这就允许在同一总线上连接多个SPI设备成为可能。
接下来就负责通讯的3根线了。
通讯是通过数据交换完成的,这里先要知道SPI是串行通讯协议,也就是说数据是一位一位的传输的。
这就是SCK时钟线存在的原因,由SCK提供时钟脉冲,SDI,SDO则基于此脉冲完成数据传输。
数据输出通过SDO线,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取。
完成一位数据传输,输入也使用同样原理。
这样,在至少8次时钟信号的改变(上沿和下沿为一次),就可以完成8位数据的传输。
SPI是一个环形总线结构,由ss(cs)、sck、sdi、sdo构成,其时序其实很简单,主要是在sck的控制下,两个双向移位寄存器进行数据交换。
假设下面的8位寄存器装的是待发送的数据10101010,上升沿发送、下降沿接收、高位先发送。
那么第一个上升沿来的时候数据将会是sdo=1;寄存器中的10101010左移一位,后面补入送来的一位未知数x,成了0101010x。
下降沿到来的时候,sdi上的电平将锁存到寄存器中去,那么这时寄存器=0101010sdi,这样在8个时钟脉冲以后,两个寄存器的内容互相交换一次。
这样就完成里一个spi时序。
2.2波特率
这是一个衡量通信速度的参数。
它表示每秒钟传送的bit的个数。
例如300波特表示每秒钟发送300个bit。
当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么时钟是4800Hz。
这意味着串口通信在数据线上的采样率为4800Hz。
通常电话线的波特率为14400,28800和36600。
波特率可以远远大于这些值,但是波特率和距离成反比。
串行口每秒发送或接收数据的码元数为传码,单位为波特,也叫波特率。
若发送或接收一位数据所需时间为T,则波特率为1/T,相应的发送或接收时钟为1/THz。
发送和接收设备的波特率应一致。
位同步是实现收发双方的码元同步,由数据传输系统的同步控制电路实现。
发送端由发送时钟的定时脉冲对数据序列取样再生,接收端由接收时
钟的定时脉冲对接收数据序列取样判断,恢复原来的数据序列。
因此,接收时钟和发送时钟必须同频同相,这是由接收端的定时提取和锁相环电路实现的。
传码率与位同步必须同时满足。
否则,接收设备接收不到有效信息。
3模块设计
3.1顶层模块RTL综合
顶层文件设计,将波特率发生模块,数据发送模块,数据接收模块,和数码显示模块通过例化语句组合成总的顶层模块。
其中数据发送模块为并行输入串行输出模块,在时钟的上升沿发送一位数据,共需要8个时钟脉冲即可发送完一字节数据。
数据接收模块为串行输入并行输出模块,串行输入的数据来自数据发送模块,在时钟的上升沿接收数据,即由“自己发送的数据自己同步接收”来模拟主从器件间数据的全双工传输。
数码管显示模块则是循环显示0~8数字,每循环一次代表传输完一字节。
以下是顶层模块VHDL源程序:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityspiis
port(clk,stop,load:
instd_logic;
data_in:
std_logic_vector(7downto0);
deng_out:
outstd_logic_vector(7downto0);
shuma_out:
outstd_logic_vector(6downto0));
endspi;
architectureoneofspiis
componentsdi
port(clk_sdi:
instd_logic;
sdi_in:
instd_logic;
load:
instd_logic;
shuma:
outintegerrange0to8;
sdi_out:
outstd_logic_vector(7downto0));
endcomponent;
componentsdo
port(clk_sdo,load:
instd_logic;
sdo_in:
instd_logic_vector(7downto0);
sdo_out:
outstd_logic);
endcomponent;
componentSHUMG
port
(
num:
inINTEGERRANGE0TO8;
dout:
outstd_logic_vector(6downto0)
);
endcomponent;
componentfenpin
port(clk,stop:
instd_logic;
clok:
outstd_logic);
endcomponent;
signalA,B:
std_logic;
signalC:
INTEGERrange0to8;
begin
u1:
sdiportmap(sdi_out=>deng_out,clk_sdi=>A,sdi_in=>B,shuma=>C,load=>load);
u2:
sdoportmap(sdo_out=>B,sdo_in=>data_in,load=>load,clk_sdo=>A);
u3:
SHUMGportmap(dout=>shuma_out,num=>C);
u4:
fenpinportmap(clk=>clk,stop=>stop,clok=>A);
endone;
综合后为:
3.2波特率发生器模块
由于SPI同步串行通讯的缺点是波特率不高,通常常用的SPI波特率有2400,4800,9600,19200等比较低的波特率,晶振的频率一般都比较高,需要分频后才能供给SPI使用。
假设采用6MHZ的晶振作为外部时钟,那么要产生9600波特率的时钟信号,则需要对6MHZ的时钟进
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VHDL 串行 同步 通信 SPI 设计