




免费预览已结束,剩余10页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课课 程程 设设 计计 课程名称 电子技术综合设计与实训 题目名称 基于 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 2 SPI 简介简介 6 2 1 SPI 协议和工作原理 6 2 2 波特率 7 3 模块设计模块设计 7 3 1 顶层模块 RTL 综合 7 3 2 波特率发生器模块 8 3 3 SDO 数据发送模块 9 3 4 SDI 数据接收模块 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 是英文 Serial Peripheral Interface 的缩写 中文意思是串行外围设备 接口 SPI 是 Motorola 公司推出的一种同步串行通讯方式 是一种三线同 步总线 因其硬件功能很强 与 SPI 有关的软件就相当简单 使 CPU 有更 多的时间处理其他事务 2 SPI 简介简介 2 1 SPI 协议和工作原理协议和工作原理 顾名思义 串行接口的数据传输方式是串行的 即数据是一位一位地进行传输 虽然串行接 口的传输方式导致其传输速度会比较慢 但是它却具有较强的抗干扰能力 并能有较长的 传输距离 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 成了 0101010 x 下降沿到来的时候 sdi 上的电平将锁存到寄 存器中去 那么这时寄存器 0101010sdi 这样在 8 个时钟脉冲以后 两个寄存器的内容互 相交换一次 这样就完成里一个 spi 时序 2 2 波特率波特率 这是一个衡量通信速度的参数 它表示每秒钟传送的 bit 的个数 例如 300 波特表示 每秒钟发送 300 个 bit 当我们提到时钟周期时 我们就是指波特率例如如果协议需要 4800 波特率 那么时钟是 4800Hz 这意味着串口通信在数据线上的采样率为 4800Hz 通 常电话线的波特率为 14400 28800 和 36600 波特率可以远远大于这些值 但是波特率和 距离成反比 串行 口每秒发送或接收数据的码元数为传码 单位为波特 也叫波特率 若发送或 接收一位数据所需时间为 T 则波特率为 1 T 相应的发送 或接收时钟为 1 T Hz 发送和接收设备的波特率应 一致 位 同步是实现收发双方的码元同步 由数据传 输系统的同步控制电路实现 发送端由发送时钟 的定时脉冲对数据序列取样再生 接收端 由接收时 钟的定时脉冲对接收数据序列取样判断 恢复原来 的数据序列 因此 接收时钟和发送时 钟必须同频 同相 这是由接收端的定时提取和锁相环 电路实现 的 传码率与位同步必须 同时满足 否则 接收设备接收不到有效信息 3 模块设计模块设计 3 1 顶层模块顶层模块 RTL 综合综合 顶层文件设计 将波特率发生模块 数据发送模块 数据接收模块 和数码显示模块 通过例化语句组合成总的顶层模块 其中数据发送模块为并行输入串行输出模块 在时钟 的上升沿发送一位数据 共需要 8 个时钟脉冲即可发送完一字节数据 数据接收模块为串 行输入并行输出模块 串行输入的数据来自数据发送模块 在时钟的上升沿接收数据 即 由 自己发送的数据自己同步接收 来模拟主从器件间数据的全双工传输 数码管显示模 块则是循环显示 0 8 数字 每循环一次代表传输完一字节 以下是顶层模块 VHDL 源程序 library ieee use ieee std logic 1164 all use ieee std logic unsigned all entity spi is port clk stop load in std logic data in std logic vector 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 is component sdi port clk sdi in std logic sdi in in std logic load in std logic shuma out integer range 0 to 8 sdi out out std logic vector 7 downto 0 end component component sdo port clk sdo load in std logic sdo in in std logic vector 7 downto 0 sdo out out std logic end component component SHUMG port num in INTEGER RANGE 0 TO 8 dout out std logic vector 6 downto 0 end component component fenpin port clk stop in std logic clok out std logic end component signal A B std logic signal C INTEGER range 0 to 8 begin u1 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 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 entity fenpin is port clk stop in std logic clok clk3 out std logic end fenpin architecture one of fenpin is begin process clk variable counter integer range 0 to 625 begin if stop 1 then if clk event and clk 1 then if counter 625 then counter 0 clok 1 else counter counter 1 clok 0 end if end if if counter 106 or counter 313 or counter 520 then clk3 1 else clk3 0 end if end if end process end one 其中 c l k 为 6 MHz 的时钟 c l o k 为 9 6 0 0 Hz 的接收时钟 c l k3 为脉冲出现的频 率是波特率的 3 倍的采样时钟 3 3 SDO 数据发送模块数据发送模块 发送电路是在时序脉冲的控制下 利用移位寄存器并行输入串行输出的把数据一位一位的 送出去 VHDL 源程序如下 library ieee use ieee std logic 1164 all use ieee std logic unsigned all entity sdo is port clk sdo load in std logic sdo in in std logic vector 7 downto 0 sdo out out std logic end sdo architecture one of sdo is signal buff std logic vector 7 downto 0 begin process clk sdo begin if clk sdo event and clk sdo 1 then if load 1 then buff sdo in else buff 7 downto 1 buff 6 downto 0 end if end if sdo out buff 7 end process end one 其中 sdo in in std logic vector 7 downto 0 为并行输入端 口 8 位数据 clk sdo 为输入 端口发送时钟 sdo out out std logic 为输出串行端口 当 load 1 则把待发送的数据 送入数据缓冲区 BUFF 然后根据时钟的上升沿的到来把数据一位一位的从缓冲器送给串行 输出 如图所示 第一次装载待发送数据 10101010 第二次装载待发送数据 01010101 于 缓冲区 共 2 字节数据 从仿真图上可以看到 串行输出分贝输出了 2 字节数据 10101010 和 01010101 3 4 SDI 数据接收模块数据接收模块 接收电路的功能是在时钟控制下 采样串行输 入端口上的数据 执行采样判断 检 测帧同步标志 把后续数据依次送达对应的并行输出端口上 下面 是实现上述功能的 VHDL 源程序 library ieee use ieee std logic 1164 all use ieee std logic unsigned all entity sdi is port clk sdi in std logic sdi in in std logic shuma out integer range 0 to 8 sdi out out std logic vector 7 downto 0 end sdi architecture one of sdi is signal buff std logic vector 7 downto 0 begin process clk sdi variable cout integer range 0 to 8 begin if clk sdi event and clk sdi 1 then if cout 8 then cout 0 sdi out buff else buff 7 cout sdi in cout cout 1 end if end if shuma cout end process end one 数据一位一位的接收 接收一位就把它存放于接收缓冲寄存器 等待缓冲器满后就并行输 出数据由程序读取 如仿真图所示 串行传来的两字节数据 10101010 和 01010101 数码 管循环显示从 0 8 当显示 8 时代表缓冲器满 并串行输出数据 SDI OUT 为串行输出的 数据 3 5 数码管显示模块数码管显示模块 library ieee use ieee std logic 1164 all use ieee std logic arith all use ieee std logic unsigned all entity SHUMG is port num in INTEGER RANGE 0 TO 8 dout out std logic vector 6 downto 0 end SHUMG architecture a1 of SHUMG is begin with num select dout 1111110 when 0 0110000 when 1 1101101 when 2 1111001 when 3 0110011 when 4 1011011 when 5 1011111 when 6 1110000 when 7 1111111 when 8 0000000 when others end a1 数码管显示模块用来方便表示出数据传输的过程 从 0 8 循环显示 8 代表数据传输 完毕准备传送或接收下一字节数据 4实验验证实验验证 4 1 实验验证方案选择实验验证方案选择 由于要在 DE2 板上验证 SPI 有一定难度 我们的方案一我们的方案一 就是利用串口调试助手 PC 机作为从器件 目标板做为主器件进行 SPI 通讯 我们的方案二我们的方案二 是完全在 DE2 板上模拟主从同步串行通讯 但是由于考虑到 DE2 板上可以用的验证设备 开关和 LED 灯 不够 所以我们决定在 DE2 版上对所设计的 SPI 模块进行调整 自己 发送的数据自己接收 模拟实现了主从之间通过不串行通讯 在这里我们采用的是方案 2 优点是易于实现 我们把 SDO 发送数据模块直接接到了 SDI 数据接收模块 因此我们只要验证 通过发送以自己数据 待 8 个时序脉冲后数据发送完 的同时也被接收 则说明我们的思路正确 4 2 实验现象实验现象 说明 开关 SW8 代表 LOAD 数据装载 开关 SW9 代表时钟时能 SW0 SW7 作为发送数据的数据缓冲器 即发送模块数据输入端 存待发送的数据 LED0 LED7 读取数据接收模块的数据接收状态 数码管循环显示 0 8 当我们拨动开关 准备好待发送数据时 先 LOAD 把数据送入缓冲区 然后使时钟时能 这是开始发送和接收数据同步 数码管从 0 8 显示 当数码管显示 8 时 灯的状态与开关 的状态相对应 灯亮代表数据位 1 灯灭为 0 然后我们准备第二字节数据 发送和接
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人教部编版道德与法治八年级上册:9.1 认识总体国家安全观 教学设计
- 初中英语Unit 5 Do you have a soccer ball综合与测试教案及反思
- 2024唐山人才发展集团为中国移动合作商妙音科技有限公司发布招聘笔试参考题库附带答案详解
- 云南省德宏州梁河县高中地理 第四单元 人类活动的地域联系 4.2 农业与区域可持续发展教学设计 鲁教版必修2
- 人教部编版 (五四制)二年级下册课文 516 雷雨教案
- 六年级下册北京的春节教案
- 二年级上册科学教学设计-13.我们的衣服 青岛版(六年制)
- 七年级数学上册 第3章 一次方程与方程组3.1 一元一次方程及其解法第3课时 用去括号解一元一次方程教学设计 (新版)沪科版
- 妇联主席培训述学
- 九年级历史下册 第11课 战争的扩大和转折教学设计 川教版
- dhi教学合集mike21水动力模型
- 部编版二年级道德与法治下册第9课《小水滴的诉说》优秀课件(含视频)
- 跑冒油事故应急预案
- 服装工艺(各工序)单价表
- 2022新苏教版小学科学五年级下册10《昼夜对植物的影响》课件
- 家谱宗谱WORD模板
- 水泥稳定碎石底基层配合比报告
- 民间非营利组织会计制度.ppt
- 上海市住宅修缮施工资料及表式汇编(试行版27)
- 九宫难易数独、六宫数独打印版
- 水电站防地震灾害应急预案范本
评论
0/150
提交评论