欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    EDA基于VHDL的串口设计Word格式.docx

    • 资源ID:8329432       资源大小:283.74KB        全文页数:18页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    EDA基于VHDL的串口设计Word格式.docx

    1、 5、3 特率发生器和采样时钟的设计的VHDL仿真 5、4 接受模块的描述的VHDL仿真 5、5 综合仿真6、 结果与分析 6.1实现功能说明 6.2器件资源分析 6.3故障和问题分析7、总结体会8、参考文献9、附录基于VHDL的串口设计任务书摘要:实验设计了基于VHDL描述的RS232串口通信控制器,通过串口调试工具实现CPLD向单片机的数据发送和单片机的数据接收。完成的功能为实现收发一帧10个bit、波特率为4800的串口通信控制器。实验的重心放在了RS232串口通信控制器发送模块和接收模块的设计,采用了自顶向下的思路进行设计。报告中给出了完整的设计思路和过程,并将系统分模块进行了详细的设

    2、计,给出了VHDL语言描述。完成了核心模块以及系统整体的仿真验证。最终下载到实验板上测试通过。1、1课题要求(1)用RS232实现与单片机之间的数据通信,单片机上用串口工具接收;(2)CPLD每1秒钟发送1个字节的数据到单片机;(3)所发送的数据用实验箱上的8个开关输入;(4)设置发送允许控制;(5)数据格式:1位起始位、8位数据位、1位停止位;(6)数据传输速率:4800波特。1、2设计目标 根据课题要求,实验中将目标进行了细化,叙述如下:设定数据帧格式为10bit,其中第一位为起始位,定位低电平,8位数据位,1位结无数据传输时为高电平;2、1层次模块划分系统划分为二层,自顶向下分别是顶层模

    3、块、控制器子模块。顶层描述了整个系统的功能和运行;控制器子模块实现系统中各个独立而完整的功能部分。每个层次可用一个或多个具体模块加以实现。顶层模块:作用为集成子模块功能,控制子模块的连接和耦合信号。由各子模块定义成的库元件组成。中层模块:具体实现顶层模块的描述,包括的功能主要是串行发送电路的波特率发生器,发送模块和接收模块地区、接受模块的分频部分和验收。 发送电路的波特率发生器,将16KHz的时钟分频为4800Hz的时钟。输入:16KHz晶振信号。输出:送往发送模块的4800Hz的信号。发送模块。向PC机发送信号。4800Hz时钟信号、发送数据。输入数据的串行输出。接收电路的波特率发生器和采样

    4、时钟的设计,提高接收的准确性,减少误码率 输入: 输出:送往接受模块的信号和检验模块。接收模块,检测接收端,若检测到低电平则开始接收数据CPLD发送的数据。接收到的数据。以上模块分别生成符号文件,最后在顶层模块中进行连接。2、2 分频模块的设计 由于UART是异步传输,没有传输同步时钟。为了能保证数据传输的正确性,UART采用16倍数据波特率的时钟进行采样。每个数据有16个时钟采样,取中间的采样值,以保证采样不会滑码或误码。一般UART一帧的数据位数为8,这样即使每个数据有一个时钟的误差,接收端也能正确地采样到数据。这里采用常用的数据波特率为9600bps,则所需时钟的频率为16*9600。系

    5、统时钟为50MHz,则分频系数为50000000/(16*9600) =325.52,取整为325。分频器实现相对简单,这里对其设计流程图不做详细介绍。只是将设计过程和结果简述如下:首先用VHDL语言进行设计输入,并生成模块文件如图2-1所示,其中clk为50M系统时钟输入,clkout为325分频后时钟输出。图2-1 分频模块 然后建立波形文件,对以上模块进行时序仿真,仿真结果如图2-2所示,方正结果说明,分频输出实现了对输入的325分频,分频模块设计正确。图2-2 分频模块仿真结果2、3 发送电路的波特率发生器的设计 要产生4800 波特率,要有一个不低于4800Hz的时钟才可以。为产生高

    6、精度的时钟, 我选了16KHz的晶振来提供外部时钟。当然,你也可以选其它频率的时钟来产生4800Hz的时钟。对于16KHz 时钟,需要设计一个13 进制的分频器来产生4800 波特率的时钟信号。 发送过程:空闲状态,线路处于高电平;当受到发送数据指令后,拉低线路一个数据位的时间T,接着数据按地位到高位依次发送,数据发送完毕后,接着发送停止位(停止位为高电平),一帧数据发送结束。(1)模块流程图根据以上发送过程,发送模块算法示意图设计如图2-3所示。图2-3 UART发送数据算法示意图(2)生成模块文件 新建一原理图文件,将VHDL源文件生成对应的模块文件如图2-4所示,其中clk为时钟输入,d

    7、atain为需要发送的数据输入,wrsig为发送命令输入,idle为忙闲信号输出,tx为串行数据输出端。 图2-4 UART发送模块图2-5 UART发送模块仿真原理图2、4 接受模块的设计根据采用的帧格式,需要发送的数据为10 位(1位开始位、8 位数据位、1 位停止位) ,在发送完这10位后,就应该停止发送,并使发送端电平处于逻辑1 ,然后等候下次的发送.接收电路比发送电路要复杂的多,接收电路要时实检测起始位的到来,一旦检测到起始位到,就要将这一帧数据接收下来。串行接收电路首先要能判断接收数据的到来,即每一帧的开始,然后对数据进行3 次采样,最后判决输出。为简化设计,帧格式仍然采用:1 位

    8、开始位+ 8 位数据位+ 1 位停止位。 UART接收模块的功能:时时检测线路,当线路产生下降沿时,即认为线路有数据传输,启动接收数据进程进行接收,按从低位到高位接收数据。 根据以上描述的接收模块的功能,可将接收模块算法示意图设计如图2-6所示。图2-6 接收模块算法示意图 新建一原理图文件,将VHDL源文件生成对应的模块文件如图4.10所示,其中clk为时钟输入,rx为需要串行数据输入,dataout为并行输出,rdsig为忙闲信号输出。图2-7 UART接收模块(3)波形仿真 新建一个原理图文件,加入各功能模块,并添加输入输出端口,各个模块的连接如图2-8所示。图2-8 UART接收模块仿

    9、真原理图 保存原理图为uartrxts.bdf。编译工程文件,编译无误后新建波形仿真文件,加入输入输出信号,设置系统时钟clk为50MHz,保存为uartrxts.vwf,进行UART数据接收的波形仿真,波形仿真报告如图2-9所示图2-9 UART接收模块仿真结果 对上图分析看出,UART接收模块接收到的数据与UART发送模块发送的数据相一至,每接收到一个数据都有一个读取数据指示rdisg,UART接收模块得到正确验证2、5接收电路的波特率发生器和采样时钟的设计为提高接收的准确性,减少误码率,每一位数据都用3 倍频的波特率对数据进行采样 ,然后对3 次采样结果进行判决:如果3 次采样中至少有2

    10、 次为高电平,则接收这一位数据被判决为高电平,否者,为低电平。为完成3 次采样,除了频率为9600Hz 的接收时钟外,还要有一个3 倍频的采样时钟3 VHDL描述思路第二部分“系统设计”中对系统的功能和逻辑结构、以及模块划分都有了详细的叙述,模块间的耦合和信号的传递关系已经清晰。可以使用VHDL语言描述硬件电路了。发送模块和接收模块的VHDL语言描述按照事先的设计进行编写可以使电路思想明晰化,避免编程过程中用软件的思维去描述硬件的电路系统,也可有效避免错误。由于进行了细致的模块划分,模块的间的耦合程度降到了很低,这就使得电路设计的可靠性大为增强,只要模块的输出满足了功能定义,整个系统就能正常工

    11、作,即便个别模块出现问题,也不会过多影响到其他模块。实际测试过程中也印证了这一点。4 总体电路的描述 顶层符号文件描述如下:5 系统仿真验证系统仿真分为两个步骤进行,首先是关键模块的仿真,验证子系统功能的正确性,然后是综合仿真,验证整个系统的功能。5、1 发送电路的波特率发生器的VHDL的仿真5、2发送模块VHDL的仿真5、3 特率发生器和采样时钟的设计的VHDL仿真5、4 接受模块的描述的VHDL仿真5、5 综合仿真6、结果与分析本实验完成的RS232串口通信控制器,完成了课题要求的所有功能。由于顶层设计采用了子系统分模块描述的方法,使得控制器具有很好的扩展性。可以在不改变系统框架和模块间电

    12、路连接关系,增加其他模块,实现其他功能。本课题中并没有在数据帧中加入校验位,仅仅实现了1位起始位,1位停止位和8位数据位的传输。初步实现了单片机和CPLD之间的通信。数字系统的设计,真正的重点在于把系统层面的设计做好,系统架构清晰,层次明确,稳定性好,可扩展和可移植性好,这样的系统给到用户,只要添加用户模块或者稍作修改即可完成非特定的功能。6.2器件资源分析在设计阶段,对系统描述采用过多种方式,尝试了多种描述,代码的长度在增加,模块在增多,但系统稳定性和可扩展性也在增强,层次结构和模块设计也更加完善。设计之初对资源使用没有多少概念,时常以软件的思想描述硬件,在描述中使用乘法等资源耗费严重的操作

    13、,也曾使用过嵌套多层的IF-ELSE语句,产生很长的选择器,降低了模块的可靠性,增加处理延时。随着设计的深入,加上反复求精的过程磨练,逐步对硬件描述综合出的实际电路形式有了更多的理解,对延时和资源占用有了初步概念。一个显见的结论是描述代码的长度和综合后的电路形式与资源占用无必然联系。需要关注编译器在综合时如何将VHDL行为级描述转化为结构化的门级电路,才能分析清楚资源占用率和电路结构。行为级描述可能与实际综合的电路产生不一致,需要谨慎对待。6.3故障和问题分析实验中由于详细划分了子模块、各模块的实现都仔细进行了描述,故没有出现太多的故障。但是在最后将个子模块进行综合的时候出现了仿真结果不正确的

    14、现象,后经过多次修改终于得到正确的结果。由于对VHDL语言的学习与理解还停留在低层次上,故在编译时出现了很多错误,在查阅了诸多相关资料后对VHDL的语法基本熟悉,逐渐深入,从最初的模块初步成型到最后全模块化,自顶向下设计系统,完成VHDL描述。最深的感受在于,开始时一心专注于代码的编写和语法的使用,忽视了系统设计,导致设计结果不令人满意,后来逐步采用自顶向下的设计思路,先从逻辑上把系统的功能和子系统的划分描述清楚,然后设计各个模块的接口和定义,最后分别去描述底层各个模块的功能和实现,清晰明了,一气呵成。这也是系统没有多少故障的主要原因。对这次设计的题目起初不是很了解,后来通过同学、老师的解答和

    15、上网搜寻对设计有了一定的了解,对课题的设计业采用了很多方法,有复杂的也有简单的,最终决定采用这个方案,当然,在使用这个方案设计程序的时候也遇到了许多问题,有VHDL语言的语法问题也有硬件下载和仿真问题,后来都在同学和老师的帮助下解决了,解决问题的主要方法还是要加强对VHDL语言的学习和对硬件操作的学习,要注意只是与应用相结合。1 EDA技术实验开发系统实验指导书,启东计算机厂有限公司。2 CPLD/FPGA可编程逻辑器件实用教程,马彧,王丹利,王丽英,机械工业出版社,2010,7。3 .微机原理与接口技术(第二版),田辉,高等教育出版社.20114.EDA技术实用教程VHDL版(第四版),科学

    16、出版社附录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 IS SIGNAL count : STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL clk_temp :

    17、STD_LOGIC;BEGIN PROCESS(clk) IF (clkevent AND clk=1) THEN IF(count=00001101count 0);clk_temp =NOT clk_temp;ELSE count = count +1;END IF ;END PROCESS;clk_div13= clk_temp;END rtl;附录2 发送模块的VHDLlibrary ieee;use ieee.std_logic_1164.all;entity com is port(clk,en:in std_logic;Send_data:in std_logic_vector(

    18、9 downto 0);serial:out std_logic);end com;architecture com_arc of com is begin process(clk) variable count:integer range 0 to 9 :=0;if en= then count:serial=;elsif rising_edge(clk) then if count=9 then =Send_data(9);else =Send_data(count);=count+1;end if;end process;end com_arc;附录3 接收电路的波特率发生器和采样时钟设

    19、计的VHDLentity count13 is Clock1,Clock3:end count13;architecture count13_arc of count13 is process(clk,en) integer range 0 to 13 :NUll;elsif (rising_edge(clk) then if count=13 then Clock1 count:if (count=3 or count=6 or count=9 ) then Clock3end count13_arc;附录 4 接受模块的VHDLentity com_receive10 is port(co

    20、m,clr,clk1,clk3: Q:out std_logic_vector(0 to 9); Valid:end com_receive10;architecture com_receive10_arc of com_receive10 is Signal Enable:std_logic :Signal Hold:Signal N:std_logic_vector(0 to 2) :=000Valid=Enable and Hold;process(clk1,clr) variable Num:if clr=Enable ; Num: Q0000000000elsif (rising_edge(clk1) then Q(Num)=(N(0) and N(1) or (N(1) and N(2) or (N(0) and N(2);if Num=9 then Num:=Num+1;process(clk3,clr) variable m:integer range 0 to 2 :m:elsif(rising_edge(clk3) then N(m)=com;if m=2 then =m+1;process(clr,com) Holdelsif falling_edge(com) then end com_receive10_arc;


    注意事项

    本文(EDA基于VHDL的串口设计Word格式.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开