基于vhdl语言串口控制器课程设计说明书.docx_第1页
基于vhdl语言串口控制器课程设计说明书.docx_第2页
基于vhdl语言串口控制器课程设计说明书.docx_第3页
基于vhdl语言串口控制器课程设计说明书.docx_第4页
基于vhdl语言串口控制器课程设计说明书.docx_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

EDA课程设计题目:串口控制器设计 班级: 姓名: 学号: 一:串口简介串口是可以在使用一根线发送数据的同时用另一根线接收数据。串口通信协议也可以用于获取远程采集设备的数据。通过RS232以实现计算机之间、计算机与设备之间相互通信,目前仍是通讯领域广泛使用的方法之一。几乎每台计算机都有一两个串行接口,用来与调制解调器、实验室设备、工控设备、POS终端等进行数据传输。RS-232以其方便、经济的实现特点,一直深受工程界的青睐。不论是在电力、工控还是电信、金融交通等诸多行业都有广泛的应用。系统主芯片采用RS-232串口通信控制器,由基本时钟发生电路模块,复位电路模块,波特率选择模块,数据帧格式选择模块,串并转换模块组成。经编译和仿真所设计的程序,在可编程逻辑器件上下载验证,结合FPGA技术高度灵活性与模块化的特点,实现基本RS-232总线通信的功能,以实现串口数据帧结构选择,串并转换,波特率选择等功能。通过软件仿真,得到功能的验证,并进行功能逻辑模块的整合,从而验证设计的可行性与可靠性。本模块的功能是验证实现和PC机进行基本的串口通信的功能。需要在PC机上安装一个串口调试工具来验证程序的功能。程序实现了一个收发一帧10个bit(即无奇偶校验位)的串口控制器,10个bit是1位起始位,8个数据位,1个结束位。串口的波特率由程序中定义的div_par参数决定,更改该参数可以实现相应的波特率。程序当前设定的div_par 的值是0x104,对应的波特率是9600。用一个8倍波特率的时钟将发送或接受每一位bit的周期时间划分为8个时隙以使通信同步.程序的工作过程是:串口处于全双工工作状态,按动SW0,FPGA向PC发送“welcome字符串(串口调试工具设成按ASCII码接受方式);PC可随时向FPGA发送0-F的十六进制数据,FPGA接受后显示在7段数码管上。二:设计方案。1:接收模块设计串口接收模块针对于接收串行数据进行协议包的解析,实现串行数据输入,并行数据输出的功能,从接收判断的角度,实现了对于串口协议的解析功能。2: 发送模块设计串口发送模块针对于接收并行数据进行协议的组包设计,实现并行数据输入,串行数据输出的功能,从发送的角度,实现了对于串口协议的组合功能。发送模块设计与接收模块类似,依然针对波特率,数据位,校验位,停止位进行控制,实现全双向的串口通信控制功能。三:电路原理图四:软件流程五:实验源程序library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY UART IS PORT ( clk : IN std_logic; rst : IN std_logic; rxd : IN std_logic; txd : OUT std_logic; en : OUT std_logic_vector(7 downto 0); seg_data : OUT std_logic_vector(7 DOWNTO 0); key_input : IN std_logic ); END UART;ARCHITECTURE arch OF UART IS - /inner reg/ SIGNAL div_reg : std_logic_vector(15 DOWNTO 0); SIGNAL div8_tras_reg : std_logic_vector(2 DOWNTO 0); SIGNAL div8_rec_reg : std_logic_vector(2 DOWNTO 0); SIGNAL state_tras : std_logic_vector(3 DOWNTO 0); SIGNAL state_rec : std_logic_vector(3 DOWNTO 0); SIGNAL clkbaud_tras : std_logic; SIGNAL clkbaud_rec : std_logic; SIGNAL clkbaud8x : std_logic; SIGNAL recstart : std_logic; SIGNAL recstart_tmp : std_logic; SIGNAL trasstart : std_logic; SIGNAL rxd_reg1 : std_logic; SIGNAL rxd_reg2 : std_logic; SIGNAL txd_reg : std_logic; SIGNAL rxd_buf : std_logic_vector(7 DOWNTO 0); SIGNAL txd_buf : std_logic_vector(7 DOWNTO 0); SIGNAL send_state : std_logic_vector(2 DOWNTO 0);- SIGNAL cnt_delay : std_logic_vector(19 DOWNTO 0);- SIGNAL start_delaycnt : std_logic; SIGNAL key_entry1 : std_logic; SIGNAL key_entry2 : std_logic; -/ CONSTANT div_par : std_logic_vector(15 DOWNTO 0) := 0000000100000100; SIGNAL txd_xhdl3 : std_logic; BEGIN en =01010101 ;- txd = txd_xhdl3; txd_xhdl3 = txd_reg ; PROCESS(clk,rst) BEGIN IF (NOT rst = 1) THEN cnt_delay = 00000000000000000000; start_delaycnt = 0; ELSIF(clkEVENT AND clk=1)THEN IF (start_delaycnt = 1) THEN IF (cnt_delay /= 11000011010100000000) THEN cnt_delay = cnt_delay + 00000000000000000001; ELSE cnt_delay = 00000000000000000000; start_delaycnt = 0; END IF; ELSE IF (NOT key_input=1) AND (cnt_delay = 00000000000000000000) THEN start_delaycnt = 1; END IF; END IF; END IF; END PROCESS; PROCESS(clk,rst) BEGIN IF (NOT rst = 1) THEN key_entry1 = 0; ELSIF(clkEVENT AND clk=1)THEN IF (key_entry2 = 1) THEN key_entry1 = 0; ELSE IF (cnt_delay = 11000011010100000000) THEN IF (NOT key_input = 1) THEN key_entry1 = 1; END IF; END IF; END IF; END IF; END PROCESS; PROCESS(clk,rst) BEGIN IF (NOT rst = 1) THEN div_reg = 0000000000000000; ELSIF(clkEVENT AND clk=1)THEN IF (div_reg = div_par - 0000000000000001) THEN div_reg = 0000000000000000; ELSE div_reg = div_reg + 0000000000000001; END IF; END IF; END PROCESS; PROCESS(clk,rst) BEGIN IF (NOT rst = 1) THEN clkbaud8x = 0; ELSIF(clkEVENT AND clk=1)THEN IF (div_reg = div_par - 0000000000000001) THEN clkbaud8x = NOT clkbaud8x; END IF; END IF; END PROCESS; PROCESS(clkbaud8x,rst) BEGIN IF (NOT rst = 1) THEN div8_rec_reg = 000; ELSE IF(clkbaud8xEVENT AND clkbaud8x = 1) THEN IF (recstart = 1) THEN div8_rec_reg = div8_rec_reg + 001; END IF; END IF; END IF; END PROCESS; PROCESS(clkbaud8x,rst) BEGIN IF (NOT rst = 1) THEN div8_tras_reg = 000; ELSE IF(clkbaud8xEVENT AND clkbaud8x = 1) THEN IF (trasstart = 1) THEN div8_tras_reg = div8_tras_reg + 001;- END IF; END IF; END IF; END PROCESS; PROCESS(div8_rec_reg) BEGIN IF (div8_rec_reg = 111) THEN clkbaud_rec = 1; ELSE clkbaud_rec = 0; END IF; END PROCESS; PROCESS(div8_tras_reg) BEGIN IF (div8_tras_reg = 111) THEN clkbaud_tras = 1; ELSE clkbaud_tras = 0; END IF; END PROCESS; PROCESS(clkbaud8x,rst) BEGIN IF (NOT rst = 1) THEN txd_reg = 1; trasstart = 0; txd_buf = 00000000; state_tras = 0000; send_state = 000; key_entry2 = 0; ELSE IF(clkbaud8xEVENT AND clkbaud8x = 1) THEN IF (NOT key_entry2 = 1) THEN IF (key_entry1 = 1) THEN key_entry2 = 1; txd_buf IF (NOT trasstart=1) AND (send_state 111) ) THEN trasstart = 1; ELSE IF (send_state 111) THEN IF (clkbaud_tras = 1) THEN txd_reg = 0; state_tras = state_tras + 0001; END IF; ELSE key_entry2 = 0; state_tras - IF (clkbaud_tras = 1) THEN txd_reg = txd_buf(0); txd_buf(6 DOWNTO 0) = txd_buf(7 DOWNTO 1); state_tras IF (clkbaud_tras = 1) THEN txd_reg = txd_buf(0); txd_buf(6 DOWNTO 0) = txd_buf(7 DOWNTO 1); state_tras IF (clkbaud_tras = 1) THEN txd_reg = txd_buf(0); txd_buf(6 DOWNTO 0) = txd_buf(7 DOWNTO 1); state_tras IF (clkbaud_tras = 1) THEN txd_reg = txd_buf(0); txd_buf(6 DOWNTO 0) = txd_buf(7 DOWNTO 1); state_tras IF (clkbaud_tras = 1) THEN txd_reg = txd_buf(0); txd_buf(6 DOWNTO 0) = txd_buf(7 DOWNTO 1); state_tras IF (clkbaud_tras = 1) THEN txd_reg = txd_buf(0); txd_buf(6 DOWNTO 0) = txd_buf(7 DOWNTO 1); state_tras IF (clkbaud_tras = 1) THEN txd_reg = txd_buf(0); txd_buf(6 DOWNTO 0) = txd_buf(7 DOWNTO 1); state_tras IF (clkbaud_tras = 1) THEN txd_reg = txd_buf(0); txd_buf(6 DOWNTO 0) = txd_buf(7 DOWNTO 1); state_tras IF (clkbaud_tras = 1) THEN txd_reg = 1; txd_buf = 01010101; state_tras IF (clkbaud_tras = 1) THEN state_tras = state_tras + 0001; send_state = send_state + 001; trasstart txd_buf txd_buf txd_buf txd_buf txd_buf txd_buf txd_buf IF (clkbaud_tras = 1) THEN state_tras = state_tras + 0001; trasstart = 1; END IF; END CASE; END IF; END IF; END IF; END PROCESS; PROCESS(clkbaud8x,rst) BEGIN IF (NOT rst = 1) THEN rxd_reg1 = 0; rxd_reg2 = 0; rxd_buf = 00000000; state_rec = 0000; recstart = 0; recstart_tmp = 0; ELSE IF(clkbaud8xEVENT AND clkbaud8x = 1) THEN rxd_reg1 = rxd; rxd_reg2 = rxd_reg1; IF (state_rec = 0000) THEN IF (recstart_tmp = 1) THEN recstart = 1; recstart_tmp = 0; state_rec = state_rec + 0001; ELSE IF (NOT rxd_reg1 AND rxd_reg2) = 1) THEN recstart_tmp = 0001 AND state_rec=1000) THEN IF (clkbaud_rec = 1) THEN rxd_buf(7) = rxd_reg2; rxd_buf(6 DOWNTO 0) = rxd_buf(7 DOWNTO 1); state_rec = state_rec + 0001; END IF; ELSE IF (state_rec = 1001) THEN IF (clkbaud_rec = 1) THEN state_rec = 0000; recstart seg_data seg_data seg_data seg_data seg_data seg_data seg_data seg_data seg_data seg_data seg_data seg_data seg_data seg_data seg_data seg_data seg_data = 11111111; END CASE; END PROCESS;END arch;六:总结在此次的RS-232串口通信控制器设计过程中,更进一步地熟悉有关数字电路的知识和具体应用。学会了利QuarterII软件进行原理图的绘制,硬件描述语言VHDL的编写,程序的仿真等工作。并能根据仿真结果分析设计的存在的问题和缺陷,从而进行程序的调试和完善。在设计电路中,往往是先仿真后连接实物图,但有时候仿真和电路连接并不是完全一致的,例如在对具体模块的仿真的过程中,往往没有考虑到整体设计的层面以及与上下模块接口的设计。再加上器件对信号的延时等问题,实际下载到实验箱上后会出现一系列的问题,因此仿真图和电路连接图还是有一定区别的。此次的数字钟设计重在于按键的控制和各个模块代码的编写,虽然能把键盘接口和各个模块的代码编写出来,并能正常显示,但对于各个模块的优化设计还有一定的缺陷和不足。总的来说,通过这次的设计实验更进一步地增强了实验的动手能力,对数字钟的工作原理也有了更加透彻的理解。七:参考文献1 刘君,常明,秦娟,基于硬件描述语言(VHDL)的数字时钟设计,天津理工大学学报,2007,第23卷 第4期,40-412 廖日坤,CPLD/FPGA嵌入式应用开发技术白金手册,中国电力出版社,2003,212-218。3 王开军,姜宇柏,面向CPLD/FPGA的VHDL设计,机械工业出版社,2006,28-65。4 谭会生,张昌凡,EDA技术及应用,西安电子科技大学出版社,2002。 5 高吉祥,电子技术基础实验与课程设计,电子工业出版社,2002。 7 谢自美,电子线路设计、实验、测试,华中理工大学出版社,2003。8 赵志杰,集成电路应用识图方法,机械工业出版社,2003,35-40。 40大学本科生毕业设计(论文)撰写规范本科生毕业设计(论文)是学生在毕业前提交的一份具有一定研究价值和实用价值的学术资料。它既是本科学生开始从事工程设计、科学实验和科学研究的初步尝试,也是学生在教师的指导下,对所进行研究的适当表述,还是学生毕业及学位资格认定的重要依据。毕业论文撰写是本科生培养过程中的基本训练环节之一,应符合国家及各专业部门制定的有关标准,符合汉语语法规范。指导教师应加强指导,严格把关。1、论文结构及要求论文包括题目、中文摘要、外文摘要、目录、正文、参考文献、致谢和附录等几部分。1.1 题目论文题目应恰当、准确地反映论文的主要研究内容。不应超过25字,原则上不得使用标点符号,不设副标题。1.2 摘要与关键词1.2.1 摘要本科生毕业设计(论文)的摘要均要求用中、英两种文字给出,中文在前。摘要应扼要叙述论文的研究目的、研究方法、研究内容和主要结果或结论,文字要精炼,具有一定的独立性和完整性,摘要一般应在300字左右。摘要中不宜使用公式、图表,不标注引用文献编号,避免将摘要写成目录式的内容介绍。1.2.2 关键词关键词是供检索用的主题词条,应采用能覆盖论文主要内容的通用技术词条(参照相应的技术术语标准),一般列35个,按词条的外延层次从大到小排列,应在摘要中出现。1.3 目录目录应独立成页,包括论文中全部章、节的标题及页码。1.4 论文正文论文正文包括绪论、论文主体及结论等部分。1.4.1 绪论绪论一般作为论文的首篇。绪论应说明选题的背景、目的和意义,国内外文献综述以及论文所要研究的主要内容。文管类论文的绪论是毕业论文的开头部分,一般包括说明论文写作的目的与意义,对所研究问题的认识以及提出问题。绪论只是文章的开头,不必写章号。毕业设计(论文)绪论部分字数不多于全部论文字数的1/4。1.4.2 论文主体论文主体是论文的主要部分,要求结构合理,层次清楚,重点突出,文字简练、通顺。论文主体的内容要求参照大学本科生毕业设计(论文)的规定第五章。论文主体各章后应有一节“本章小结”。1.4.3 结论结论作为单独一章排列,但不加章号。结论是对整个论文主要成果的归纳,要突出设计(论文)的创新点,以简练的文字对论文的主要工作进行评价,一般为4001 000字。1.5 参考文献参考文献是论文不可缺少的组成部分,它反映了论文的取材来源和广博程度。论文中要注重引用近期发表的与论文工作直接有关的学术期刊类文献。对理工类论文,参考文献数量一般应在15篇以上,其中学术期刊类文献不少于8篇,外文文献不少于3篇;对文科类、管理类论文,参考文献数量一般为1020篇,其中学术期刊类文献不少于8篇,外文文献不少于3篇。在论文正文中必须有参考文献的编号,参考文献的序号应按在正文中出现的顺序排列。产品说明书、各类标准、各种报纸上刊登的文章及未公开发表的研究报告(著名的内部报告如PB、AD报告及著名大公司的企业技术报告等除外)不宜做为参考文献引用。但对于工程设计类论文,各种标准、规范和手册可作为参考文献。引用网上参考文献时,应注明该文献的准确网页地址,网上参考文献不包含在上述规定的文献数量之内。1.6 致谢对导师和给予指导或协助完成论文工作的组织和个人表示感谢。内容应简洁明了、实事求是,避免俗套。1.7 附录如开题报告、文献综述、外文译文及外文文献复印件、公式的推导、程序流程图、图纸、数据表格等有些不宜放在正文中,但有参考价值的内容可编入论文的附录中。2、论文书写规定2.1 论文正文字数理工类 论文正文字数不少于20 000字。文管类 论文正文字数12 00020 000字。其中汉语言文学专业不少于7 000字。外语类 论文正文字数8 00010 000个外文单词。艺术类 论文正文字数3 0005 000字。2.2 论文书写本科生毕业论文用B5纸计算机排版、编辑与双面打印输出。论文版面设置为:毕业论文B5纸、纵向、为横排、不分栏,上下页边距分别为2.5cm和2cm,左右页边距分别为2.4cm和2cm,对称页边距、左侧装订并装订线为0cm、奇偶页不同、无网格。论文正文满页为29行,每行33个字,字号为小四号宋体,每页版面字数为957个,行间距为固定值20磅。页眉。页眉应居中置于页面上部。单数页眉的文字为“章及标题”;双数页眉的文字为“大学本科生毕业设计(论文)”。页眉的文字用五号宋体,页眉文字下面为2条横线(两条横线的长度与版芯尺寸相同,线粗0.5磅)。页眉、页脚边距分别为1.8cm和1.7cm。页码。页码用小五号字,居中标于页面底部。摘要、目录等文前部分的页码用罗马数字单独编排,正文以后的页码用阿拉伯数字编排。2.3 摘要中文摘要一般为300字左右,外文摘要应与中文摘要内容相同,在语法、用词和书写上应正确无误,摘要页勿需写出论文题目。中、外文摘要应各占一页,编排装订时放置正文前,并且中文在前,外文在后。2.4 目录目录应包括论文中全部章节的标题及页码,含中、外文摘要;正文章、节题目;参考文献;致谢;附录。正文章、节题目(理工类要求编写到第3级标题,即.。文科、管理类可视论文需要进行,编写到23级标题。)2.5 论文正文2.5.1 章节及各章标题论文正文分章、节撰写,每章应另起一页。各章标题要突出重点、简明扼要。字数一般在15字以内,不得使用标点符号。标题中尽量不用英文缩写词,对必须采用者,应使用本行业的通用缩写词。2.5.2 层次层次以少为宜,根据实际需要选择。层次代号格式见表1和表2。表1 理工类论文层次代号及说明层次名称示 例说 明章第1章 章序及章名居中排,章序用阿拉伯数字节1.1 题序顶格书写,与标题间空1字,下面阐述内容另起一段条1.1.1 款1.1.1.1 题序顶格书写,与标题间空1字,下面阐述内容在标题后空1字接排项 (1) 题序空2字书写,以下内容接排,有标题者,阐述内容在标题后空1字 版心左边线 版心右边线表2 文管类论文层次代号及说明章节条款项一、 (一) 1. (1)居中书写空2字书写空2字书写空2字书写空2字书写 版心左边线 版心右边线各层次题序及标题不得置于页面的最后一行(孤行)。2.6 参考文献正文中引用文献标示应置于所引内容最末句的右上角,用小五号字体。所引文献编号用阿拉伯数字置于方括号“ ”中,如“二次铣削1”。当提及的参考文献为文中直接说明时,其序号应该与正文排齐,如“由文献8,1014可知”。经济、管理类论文引用文献,若引用的是原话,要加引号,一般写在段中;若引的不是原文只是原意,文前只需用冒号或逗号,而不用引号。在参考文献之外,若有注释的话,建议采用夹注,即紧接文句,用圆括号标明。不得将

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论