VHDL的串行同步通信SPI设计

上传人:m**** 文档编号:558050869 上传时间:2023-05-02 格式:DOCX 页数:16 大小:126.08KB
返回 下载 相关 举报
VHDL的串行同步通信SPI设计_第1页
第1页 / 共16页
VHDL的串行同步通信SPI设计_第2页
第2页 / 共16页
VHDL的串行同步通信SPI设计_第3页
第3页 / 共16页
VHDL的串行同步通信SPI设计_第4页
第4页 / 共16页
VHDL的串行同步通信SPI设计_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《VHDL的串行同步通信SPI设计》由会员分享,可在线阅读,更多相关《VHDL的串行同步通信SPI设计(16页珍藏版)》请在金锄头文库上搜索。

1、课程设计课程名称电子技术综合设计与实训题目名称 基于VHDL的串行同步通信SPI设计学生学院自动化专业班级电子信息科学与技术学号 _3107001554学生姓名_陈振添指导教师_蔡述庭2009 年 12 月 21 日广东工业大学课程设计任务书题目名称基于VHDL的串行同步通信SPI设计学生学院自动化专业班级电子信息科学与技术姓名陈振添学号3107001554一、课程设计的内容设计一个同步串行通讯 SPI二、课程设计的要求与数据设计要求包括:1. 深入了解串行通信的方案内容和协议,思考设计方法2设计串行通信方案,并写好传输程序VHDL。3下载到DE2板调试,检测其可行性。三、课程设计应完成的工作

2、1. 利用VHDL语言编程实现SPI;2. 利用 DE2 板对所设计的思想进行验证;3. 总结VHDL设计结果,撰写课程设计报告。四、课程设计进程安排序号设计各阶段内容地点起止日期1任务的确定-spi实验2号楼21412.142查找资料实验2号楼30712.153编写SPI的各个模块VHDL程序实验2号楼21612.164仿真,分配管脚实验2号楼21412.175验证修改验收实验2号楼21412.186整理说明书,报告实验楼12.19五、应收集的资料及主要参考文献1 PIC单片机原理及应用(第3版)北京航天航空大学出版社2 黄智伟,王彦 FPGA系统设计与实践M 北京:电子工业出版社,2005

3、发出任务书日期:年月日指导教师签名:计划完成日期:年月日基层教学单位责任人签章主管院长签章:摘要本设计是用 Quartus 作为开发环境,以 DE2 板为硬件平台实现的 SPI 同步串行通讯。设 计过程方便。根据接收和发送两个主要部分实现了 SPI 的基本功能。此外,该设计还实 现了波特率发生器,数码管显示的功能。用 DE2 板实现具有电路简洁,开发周期短的优 点。充分利用了 EDA设计的优点。开发过程用了 VHDL硬件描述语言进行描述,从底层设 计,分模块进行,充分提高了设计者的数字逻辑设计的概念。关键词:SPI,同步串行通讯,Quartus, DE2板,VHDL硬件描述语言。目录1 引言

4、62 SPI 简介 62.1 SPI 协议和工作原理 62.2 波特率 73 模块设计 73.1顶层模块RTL综合73.2 波特率发生器模块 93.3SDO 数据发送模块 103.4SDI 数据接收模块113.5 数码管显示模块124 实验验证 134.1 实验验证方案选择 134.2 实验现象 135 结论与问题讨论 135.1 完成设计要求的程度 135.2 遇到的问题及解决方法 145.3 存在的不足及改进思路 145.4 心得体会 14参考文献 151引言串行扩展通信接口是器件间进行数据交换的平台和重要渠道。主控同步串 行通信模块主要应用于系统内部近距离的串行通讯,如SPI,C等。SP

5、I是 英文Serial Peripheral Interface的缩写,中文意思是串行外围设备接口, SPI是Motorola公司推出的一种同步串行通讯方式,是一种三线同步总线, 因其硬件功能很强,与 SPI 有关的软件就相当简单,使 CPU 有更多的时间处 理其他事务。2 SPI 简介21 SPI协议和工作原理顾名思义,串行接口的数据传输方式是串行的,即数据是一位一位地进行传输 虽然串行接 口的传输方式导致其传输速度会比较慢,但是它却具有较强的抗干扰能力,并能有较长的传 输距离,RS232 口的最大传输距离为15m。SPI接口主要应用在EEPROM, FLASH,实时时钟,AD转换器,还有数

6、字信号处理器和 数字信号解码器之间。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚 上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出 于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议,比如AT91RM9200. SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设 备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共有的, 它们是SDI (数据输入),SDO (数据输出),SCK (时钟),CS (片选)。(1)SDO - 主设备数据输出,从设备数据输入(2)SDI - 主设备数据

7、输入,从设备数据输出(3)SCLK - 时钟信号,由主设备产生( 4) CS - 从设备使能信号,由主设备控制其中CS是控制芯片是否被选中的,也就是说只有片选信号为预先规定的使能信号时(高 电位或低电位),对此芯片的操作才有效。这就允许在同一总线上连接多个SPI设备成为可 能。接下来就负责通讯的3根线了。通讯是通过数据交换完成的,这里先要知道SPI是串行 通讯协议,也就是说数据是一位一位的传输的。这就是SCK时钟线存在的原因,由SCK提 供时钟脉冲,SDI,SDO则基于此脉冲完成数据传输。数据输出通过SDO线,数据在时钟 上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取。完成一位数据传输,

8、输入也使 用同样原理。这样,在至少8次时钟信号的改变(上沿和下沿为一次),就可以完成8位数 据的传输。SPI 是一个环形总线结构,由 ss(cs)、sck、sdi、sdo 构成,其时序其实很简单,主要是 在sck的控制下,两个双向移位寄存器进行数据交换。假设下面的 8位寄存器装的是待发送的数据10101010,上升沿发送、下降沿接收、高 位先发送。那么第一个上升沿来的时候数据将会是sdo=l;寄存器中的10101010左移一位,后面 补入送来的一位未知数x,成了 0101010x。下降沿到来的时候,sdi上的电平将锁存到寄存 器中去,那么这时寄存器=0101010sdi,这样在8个时钟脉冲以后

9、,两个寄存器的内容互相 交换一次。这样就完成里一个 spi 时序。2.2 波特率这是一个衡量通信速度的参数。它表示每秒钟传送的bit的个数。例如300波特表示每 秒钟发送300个bit。当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波 特率,那么时钟是4800Hz。这意味着串口通信在数据线上的采样率为4800Hz。通常电话线 的波特率为 14400, 28800 和 36600。波特率可以远远大于这些值,但是波特率和距离成反 比。串行口每秒发送或接收数据的码元数为传码,单位为波特,也叫波特率。若发送或接 收一位数据所需时间为T,则波特率为1 / T,相应的发送或接收时钟为1 /

10、 T Hz。 发送和接收设备的波特率应 一致。位 同步是实现收发双方的码元同步,由数据传输系统的 同步控制电路实现。发送端由发送时钟 的定时脉冲对数据序列取样再生,接收端由接收时 钟的定时脉冲对接收数据序列取样判断,恢复原来 的数据序列。因此,接收时钟和发送时 钟必须同频 同相,这是由接收端的定时提取和锁相环 电路实现 的。传码率与位同步必须 同时满足 。否则,接收设备接收不到有效信息。3 模块设计31顶层模块RTL综合顶层文件设计,将波特率发生模块,数据发送模块,数据接收模块,和数码显示模块通 过例化语句组合成总的顶层模块。其中数据发送模块为并行输入串行输出模块,在时钟的上 升沿发送一位数据

11、,共需要8个时钟脉冲即可发送完一字节数据。数据接收模块为串行输入 并行输出模块,串行输入的数据来自数据发送模块,在时钟的上升沿接收数据,即由“自己 发送的数据自己同步接收”来模拟主从器件间数据的全双工传输。数码管显示模块则是循环 显示 08 数字,每循环一次代表传输完一字节。以下是顶层模块 VHDL 源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity spi isport(clk,stop,load: in std_logic;data_in: std_logic_vector(

12、7 downto 0 );deng_out : out std_logic_vector(7 downto 0 );shuma_out : out std_logic_vector(6 downto 0 );end spi;architecture one of spi iscomponent sdiport(clk_sdi : in stdogic;sdi_in : in std_logic;load : in std_logic;shuma:out integer range 0 to 8;sdi_out : out stdogic_vector(7 downto 0 );end comp

13、onent;component sdoport(clk_sdo,load : in std_logic;sdo_in : in std_logic_vector(7 downto 0);sdo_out : out stdogic);end component;component SHUMGport(num:in INTEGER RANGE 0 TO 8;dout:out stdogic_vector(6 downto 0);end component;component fenpinport(clk,stop:in std_logic;clok:out std_logic);end compo

14、nent;signal A,B : std_logic;signal C : INTEGER range 0 to 8;beginu1:sdi port map(sdi_out=deng_out,clk_sdi=A,sdi_in=B,shuma=C,load=load); u2:sdo port map(sdo_out=B,sdo_in=data_in,load=load,clk_sdo=A); u3:SHUMG port map(dout=shuma_out,num=C);u4:fenpin port map(clk=clk,stop=stop,clok=A);end one ;综合后为:3

15、2波特率发生器模块由于SPI同步串行通讯的缺点是波特率不高,通常常用的SPI波特率有2400, 4800, 9600, 19200等比较低的波特率,晶振的频率一般都比较高,需要分频后才能供给SPI使用。 假设采用6MHZ的晶振作为外部时钟,那么要产生9600波特率的时钟信号,则需要对6MHZ 的时钟进行625分频。除此之外,为了提高接收电路接收数据的准确度,采取“过采样法” 对发送来的同一个数据进行多次采样,这里对数据进行三次采样取平均值。输入6 MHz的 时钟,经过计数分频后得到9 6 0 0 Hz的接收时钟信号和脉冲出现的频率是波特率的3倍 的采样时钟信号。下面是实现该功能的VHDL程序:library ieee;use ieee.std_logic_1164.all;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号