




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 . EDA课程设计题目:基于VHDL的串口设计院系:机电学院班级:电气103 :明军 学号:日期:2012.12.102012.12.17目录 1、任务要求1、1课题要求1、2设计目标2、系统设计2、1层次模块划分 2、2 分频模块的设计 2、3发送电路的波特率发生器的设计 2、4 接受模块的设计 2、5 接收电路的波特率发生器和采样时钟的设计3、 VHDL的描述思路4、 总体电路的描述5、 系统仿真验证 5、1 发送电路的波特率发生器的VHDL的仿真 5、2发送模块VHDL的仿真 5、3 特率发生器和采样时钟的设计的VHDL仿真 5、4接受模块的描述的VHDL仿真 5、5 综合仿真6、 结
2、果与分析 6.1实现功能说明 6.2器件资源分析 6.3故障和问题分析7、总结体会8、参考文献9、附录15 / 17基于VHDL的串口设计任务书摘要:实验设计了基于VHDL描述的RS232串口通信控制器,通过串口调试工具实现CPLD向单片机的数据发送和单片机的数据接收。完成的功能为实现收发一帧10个bit、波特率为4800的串口通信控制器。实验的重心放在了RS232串口通信控制器发送模块和接收模块的设计,采用了自顶向下的思路进行设计。报告中给出了完整的设计思路和过程,并将系统分模块进行了详细的设计,给出了VHDL语言描述。完成了核心模块以与系统整体的仿真验证。最终下载到实验板上测试通过。1、
3、任务要求1、1课题要求(1)用RS232实现与单片机之间的数据通信,单片机上用串口工具接收;(2)CPLD每1秒钟发送1个字节的数据到单片机;(3)所发送的数据用实验箱上的8个开关输入;(4)设置发送允许控制;(5)数据格式:1位起始位、8位数据位、1位停止位;(6)数据传输速率:4800波特。1、2设计目标根据课题要求,实验中将目标进行了细化,叙述如下:设定数据帧格式为10bit,其中第一位为起始位,定位低电平,8位数据位,1位结无数据传输时为高电平;2、 系统设计2、1层次模块划分系统划分为二层,自顶向下分别是顶层模块、控制器子模块。顶层描述了整个系统的功能和运行;控制器子模块实现系统中各
4、个独立而完整的功能部分。每个层次可用一个或多个具体模块加以实现。顶层模块:作用为集成子模块功能,控制子模块的连接和耦合信号。由各子模块定义成的库元件组成。中层模块:具体实现顶层模块的描述,包括的功能主要是串行发送电路的波特率发生器,发送模块和接收模块地区、接受模块的分频部分和验收。 发送电路的波特率发生器,将16KHz的时钟分频为4800Hz的时钟。输入:16KHz晶振信号。输出:送往发送模块的4800Hz的信号。发送模块。向PC机发送信号。输入:4800Hz时钟信号、发送数据。输出:输入数据的串行输出。接收电路的波特率发生器和采样时钟的设计,提高接收的准确性,减少误码率 输入:16KHz晶振
5、信号。 输出:送往接受模块的信号和检验模块。接收模块,检测接收端,若检测到低电平则开始接收数据输入:CPLD发送的数据。输出:接收到的数据。以上模块分别生成符号文件,最后在顶层模块中进行连接。2、2 分频模块的设计由于UART是异步传输,没有传输同步时钟。为了能保证数据传输的正确性,UART采用16倍数据波特率的时钟进行采样。每个数据有16个时钟采样,取中间的采样值,以保证采样不会滑码或误码。一般UART一帧的数据位数为8,这样即使每个数据有一个时钟的误差,接收端也能正确地采样到数据。这里采用常用的数据波特率为9600bps,则所需时钟的频率为16*9600。系统时钟为50MHz,则分频系数为
6、50000000/(16*9600) =325.52,取整为325。分频器实现相对简单,这里对其设计流程图不做详细介绍。只是将设计过程和结果简述如下:首先用VHDL语言进行设计输入,并生成模块文件如图2-1所示,其中clk为50M系统时钟输入,clkout为325分频后时钟输出。图2-1 分频模块 然后建立波形文件,对以上模块进行时序仿真,仿真结果如图2-2所示,方正结果说明,分频输出实现了对输入的325分频,分频模块设计正确。图2-2 分频模块仿真结果2、3 发送电路的波特率发生器的设计 要产生4800波特率,要有一个不低于4800Hz的时钟才可以。为产生高精度的时钟, 我选了16KHz的晶
7、振来提供外部时钟。当然,你也可以选其它频率的时钟来产生4800Hz的时钟。对于16KHz 时钟,需要设计一个13进制的分频器来产生4800波特率的时钟信号。发送过程:空闲状态,线路处于高电平;当受到发送数据指令后,拉低线路一个数据位的时间T,接着数据按地位到高位依次发送,数据发送完毕后,接着发送停止位(停止位为高电平),一帧数据发送结束。(1) 模块流程图根据以上发送过程,发送模块算法示意图设计如图2-3所示。开始wrsig=1Nidle=0YN发送数据Y停止位N结束Y图2-3 UART发送数据算法示意图(2)生成模块文件 新建一原理图文件,将VHDL源文件生成对应的模块文件如图2-4所示,其
8、中clk为时钟输入,datain为需要发送的数据输入,wrsig为发送命令输入,idle为忙闲信号输出,tx为串行数据输出端。 图2-4 UART发送模块图2-5 UART发送模块仿真原理图2、4 接受模块的设计根据采用的帧格式,需要发送的数据为10 位(1位开始位、8 位数据位、1 位停止位) ,在发送完这10位后,就应该停止发送,并使发送端电平处于逻辑1 ,然后等候下次的发送.接收电路比发送电路要复杂的多,接收电路要时实检测起始位的到来,一旦检测到起始位到,就要将这一帧数据接收下来。串行接收电路首先要能判断接收数据的到来,即每一帧的开始,然后对数据进行3 次采样,最后判决输出。为简化设计,
9、帧格式仍然采用:1 位开始位+ 8 位数据位+ 1 位停止位。UART接收模块的功能:时时检测线路,当线路产生下降沿时,即认为线路有数据传输,启动接收数据进程进行接收,按从低位到高位接收数据。(1) 模块流程图 根据以上描述的接收模块的功能,可将接收模块算法示意图设计如图2-6所示。开始rx=0Nidle=0YN接收数据Y停止位N结束Y图2-6 接收模块算法示意图(2) 生成模块文件 新建一原理图文件,将VHDL源文件生成对应的模块文件如图4.10所示,其中clk为时钟输入,rx为需要串行数据输入,dataout为并行输出,rdsig为忙闲信号输出。图2-7 UART接收模块(3)波形仿真新建
10、一个原理图文件,加入各功能模块,并添加输入输出端口,各个模块的连接如图2-8所示。图2-8 UART接收模块仿真原理图 保存原理图为uartrxts.bdf。编译工程文件,编译无误后新建波形仿真文件,加入输入输出信号,设置系统时钟clk为50MHz,保存为uartrxts.vwf,进行UART数据接收的波形仿真,波形仿真报告如图2-9所示图2-9 UART接收模块仿真结果对上图分析看出,UART接收模块接收到的数据与UART发送模块发送的数据相一至,每接收到一个数据都有一个读取数据指示rdisg,UART接收模块得到正确验证2、5接收电路的波特率发生器和采样时钟的设计为提高接收的准确性,减少误
11、码率,每一位数据都用3 倍频的波特率对数据进行采样 ,然后对3 次采样结果进行判决:如果3 次采样中至少有2 次为高电平,则接收这一位数据被判决为高电平,否者,为低电平。为完成3 次采样,除了频率为9600Hz 的接收时钟外,还要有一个3 倍频的采样时钟3 VHDL描述思路第二部分“系统设计”中对系统的功能和逻辑结构、以与模块划分都有了详细的叙述,模块间的耦合和信号的传递关系已经清晰。可以使用VHDL语言描述硬件电路了。发送模块和接收模块的VHDL语言描述按照事先的设计进行编写可以使电路思想明晰化,避免编程过程中用软件的思维去描述硬件的电路系统,也可有效避免错误。由于进行了细致的模块划分,模块
12、的间的耦合程度降到了很低,这就使得电路设计的可靠性大为增强,只要模块的输出满足了功能定义,整个系统就能正常工作,即便个别模块出现问题,也不会过多影响到其他模块。实际测试过程中也印证了这一点。4 总体电路的描述 顶层符号文件描述如下:5 系统仿真验证系统仿真分为两个步骤进行,首先是关键模块的仿真,验证子系统功能的正确性,然后是综合仿真,验证整个系统的功能。5、1 发送电路的波特率发生器的VHDL的仿真5、2发送模块VHDL的仿真5、3 特率发生器和采样时钟的设计的VHDL仿真5、4接受模块的描述的VHDL仿真5、5 综合仿真6、结果与分析 6.1实现功能说明本实验完成的RS232串口通信控制器,
13、完成了课题要求的所有功能。由于顶层设计采用了子系统分模块描述的方法,使得控制器具有很好的扩展性。可以在不改变系统框架和模块间电路连接关系,增加其他模块,实现其他功能。本课题中并没有在数据帧中加入校验位,仅仅实现了1位起始位,1位停止位和8位数据位的传输。初步实现了单片机和CPLD之间的通信。数字系统的设计,真正的重点在于把系统层面的设计做好,系统架构清晰,层次明确,稳定性好,可扩展和可移植性好,这样的系统给到用户,只要添加用户模块或者稍作修改即可完成非特定的功能。6.2器件资源分析在设计阶段,对系统描述采用过多种方式,尝试了多种描述,代码的长度在增加,模块在增多,但系统稳定性和可扩展性也在增强
14、,层次结构和模块设计也更加完善。设计之初对资源使用没有多少概念,时常以软件的思想描述硬件,在描述中使用乘法等资源耗费严重的操作,也曾使用过嵌套多层的IF-ELSE语句,产生很长的选择器,降低了模块的可靠性,增加处理延时。随着设计的深入,加上反复求精的过程磨练,逐步对硬件描述综合出的实际电路形式有了更多的理解,对延时和资源占用有了初步概念。一个显见的结论是描述代码的长度和综合后的电路形式与资源占用无必然联系。需要关注编译器在综合时如何将VHDL行为级描述转化为结构化的门级电路,才能分析清楚资源占用率和电路结构。行为级描述可能与实际综合的电路产生不一致,需要谨慎对待。6.3故障和问题分析实验中由于
15、详细划分了子模块、各模块的实现都仔细进行了描述,故没有出现太多的故障。但是在最后将个子模块进行综合的时候出现了仿真结果不正确的现象,后经过多次修改终于得到正确的结果。由于对VHDL语言的学习与理解还停留在低层次上,故在编译时出现了很多错误,在查阅了诸多相关资料后对VHDL的语法基本熟悉,逐渐深入,从最初的模块初步成型到最后全模块化,自顶向下设计系统,完成VHDL描述。最深的感受在于,开始时一心专注于代码的编写和语法的使用,忽视了系统设计,导致设计结果不令人满意,后来逐步采用自顶向下的设计思路,先从逻辑上把系统的功能和子系统的划分描述清楚,然后设计各个模块的接口和定义,最后分别去描述底层各个模块
16、的功能和实现,清晰明了,一气呵成。这也是系统没有多少故障的主要原因。7、总结体会对这次设计的题目起初不是很了解,后来通过同学、老师的解答和上网搜寻对设计有了一定的了解,对课题的设计业采用了很多方法,有复杂的也有简单的,最终决定采用这个方案,当然,在使用这个方案设计程序的时候也遇到了许多问题,有VHDL语言的语法问题也有硬件下载和仿真问题,后来都在同学和老师的帮助下解决了,解决问题的主要方法还是要加强对VHDL语言的学习和对硬件操作的学习,要注意只是与应用相结合。8、参考文献1 EDA技术实验开发系统实验指导书,启东计算机厂。2 CPLD/FPGA可编程逻辑器件实用教程,马彧,王丹利,王丽英,机
17、械工业,2010,7。3 .微机原理与接口技术(第二版),田辉,高等教育.20114.EDA技术实用教程VHDL版(第四版),科学附录1发送电路的波特率发生器的VHDLLIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY clk_div IS PORT(clk : IN STD_LOGIC; clk_div13 : OUT STD_LOGIC); END clk_div; ARCHITECTURE rtl OF clk_div
18、IS SIGNAL count : STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL clk_temp : STD_LOGIC; BEGIN PROCESS(clk) BEGIN IF (clk'event AND clk='1') THEN IF(count="00001101") THEN count <= (OTHERS =>'0'); clk_temp <=NOT clk_temp; ELSE count <= count +1; END IF ; END IF ; END PR
19、OCESS; clk_div13<= clk_temp; END rtl;附录2发送模块的VHDLlibrary ieee; use ieee.std_logic_1164.all; entity is port(clk,en:in std_logic; Send_data:in std_logic_vector(9 downto 0); serial:out std_logic); end ; architecture _arc of is begin process(clk) variable count:integer range 0 to 9 :=0; begin if en=&
20、#39;0' then count:=0; serial<='1' elsif rising_edge(clk) then if count=9 then serial<=Send_data(9); else serial<=Send_data(count); count:=count+1; end if; end if; end process; end _arc;附录3 接收电路的波特率发生器和采样时钟设计的VHDLlibrary ieee; use ieee.std_logic_1164.all; entity count13 is port(c
21、lk,en:in std_logic; Clock1,Clock3:out std_logic); end count13; architecture count13_arc of count13 is begin process(clk,en) variable count:integer range 0 to 13 :=0; begin if en='0' then NUll; elsif (rising_edge(clk) then count:=count+1; if count=13 then Clock1<='1' count:=0; else
22、 Clock1<='0' end if; if (count=3 or count=6 or count=9 ) then Clock3<='1' else Clock3<='0' end if; end if; end process; end count13_arc;附录4接受模块的VHDLlibrary ieee; use ieee.std_logic_1164.all; entity _receive10 is port(,clr,clk1,clk3:in std_logic; Q:out std_logic_vector(0 to 9); Valid:out std_logic); end _receive10; architecture _receive10_arc of _receive10 is Signal Enable:std_logic :='1' Signal Hold:std_logic :='0' Signal N:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 主-肺动脉隔缺损的临床护理
- 浙江省衢州市五校联盟2024-2025学年高二下学期期中联考技术试题(含答案)
- 帛琉旅游住宿太平洋度假村风景秀丽
- 网上研修学习心得体会模版
- 建筑材料与人居环境
- 安保试用期总结转正工作总结模版
- 造口病人自我护理
- 高二英语下学期期末总结模版
- 肺炎疫苗接种后高烧护理常规
- 发力新质生产力赛道
- 社会心理学8-人际关系课件
- QC-R 596-2017高速铁路板式无砟轨道自密实混凝土高清-无水印
- 邻补角、对顶角、同位角、内错角、同旁内角经典习题-一对一专用
- 保密管理-保密教育培训签到簿
- 常见病媒生物分类鉴定
- 手术室剖宫产护理查房-课件
- 隧道工程隧道洞口临建施工方案
- DBJ∕T13-374-2021 福建省钢筋桁架叠合楼板技术标准
- 事故池管理的有关规定
- DB50∕T 867.6-2019 安全生产技术规范 第6部分:黑色金属冶炼企业
- 高中语文部编版选择性必修下册第四单元 单元学习导航 课件 (8张PPT)
评论
0/150
提交评论