实验四串口接收模块电路设计

合集下载

实验报告_串口收发器设计

实验报告_串口收发器设计

数字逻辑与处理器基础实验串口收发器设计实验报告姓名:学号:2012011250班级:无21组号:S2目录实验十:串口收发器设计 (3)一、实验目的 (3)二、实验内容 (3)(一) 设计方案 (3)1. 串口基本原理 (3)2. 实验设计原理 (3)3. 模块介绍 (4)(二) 关键代码 (4)(三) 仿真波形 (8)(四) 综合结果 (8)1. 综合电路图 (8)2. 综合情况 (9)3. 硬件调试情况 (11)三、实验总结 (11)实验十:串口收发器设计一、实验目的了解和掌握UART的工作原理二、实验内容(一)设计方案1.串口基本原理图1串口时序示意图图1表明在异步传送中串行发送一个数据字节的位定时关系(图中没有包括奇偶校验位)。

发送一个完整的字节信息,首先是一个作为起始位的逻辑“0”位,接着是8个数据位,然后是1个、1+1/2个或2个停止位逻辑“1”位,数据线空闲时呈现为高或“1”状态。

在字符的8位数据部分,先发送数据的最低位,最后发送最高位。

每位持续的时间是固定的,由发送器本地时钟控制,每秒发送的数据位个数,即为“波特率”。

起始位和停止位起着很重要的作用。

显然,他们标志每个字符的开始和结束,但更重要的是他们使接收器能把局部时钟与每个新开始接收的字符再同步。

异步通信没有可参照的时钟信号,发送器随时都可能发送数据,需要从任何边沿的出现时刻开始正确地采样紧接着的 10~11位(包括开始位、数据位和停止位)。

接收器的时钟与发送器的时钟不是同一个,因此,接收器采样点的间隔跟由发送器时钟所确定的位间隔时间不同,接收器设计不好会导致采样错误。

2.实验设计原理协议提取接收到的数据并发送给控制器。

每当串口接收器收到一个完整的数据,在RX_STATUS 上输出一个高电平指示脉冲,并同时在RX_DATA 上输出接收到的有效数据,RX_DATA 上的接收数据一致有效到下一个RX_STATUS 脉冲位置。

由于串行数据帧与接收时钟是异步的,所以接收器功能实现中的关键是接收器时钟与每个接收字符的同步。

串口实验实验报告

串口实验实验报告

串口实验实验报告串口实验报告一、引言串口是一种常见的数据传输接口,广泛应用于电子设备之间的数据通信。

本次实验旨在通过串口通信实验,深入了解串口的工作原理和使用方法,并实现简单的数据传输。

二、实验目的1. 理解串口通信的基本原理;2. 掌握串口通信的硬件连接方式;3. 学会使用串口通信协议进行数据传输;4. 实现简单的串口通信程序。

三、实验器材1. 一台个人电脑;2. 一块开发板;3. 一条串口数据线。

四、实验步骤1. 将开发板与个人电脑通过串口数据线连接起来;2. 打开串口通信软件,并进行相应的设置;3. 在开发板上编写程序,实现数据的发送和接收;4. 在个人电脑上编写程序,实现数据的接收和显示;5. 进行数据传输实验,观察数据是否能正常传输。

五、实验结果与分析经过实验,我们成功地实现了串口通信,并能够正常地进行数据传输。

通过观察数据接收端的显示,我们可以清晰地看到发送端发送的数据被准确地接收并显示出来。

这说明我们的串口通信实验是成功的。

六、实验总结通过本次实验,我们深入了解了串口通信的原理和使用方法,并成功地实现了串口通信的数据传输。

串口通信在电子设备之间的数据传输中有着广泛的应用,掌握串口通信技术对于我们的学习和工作都具有重要的意义。

七、参考文献[1] XXXX. 串口通信原理与应用[M]. 电子工业出版社, 2010.八、致谢感谢实验中给予我们帮助和指导的老师和同学们,没有你们的支持,我们无法顺利完成本次实验。

九、附录实验中使用的程序代码如下:发送端代码:```c#include <stdio.h>#include <stdlib.h>#include <string.h>#include <Windows.h>int main(){HANDLE hSerial;DCB dcbSerialParams = { 0 };COMMTIMEOUTS timeouts = { 0 };// 打开串口hSerial = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);if (hSerial == INVALID_HANDLE_VALUE){printf("无法打开串口\n");return 1;}// 配置串口参数dcbSerialParams.DCBlength = sizeof(dcbSerialParams);if (!GetCommState(hSerial, &dcbSerialParams)) {printf("无法获取串口参数\n");return 1;}dcbSerialParams.BaudRate = CBR_9600;dcbSerialParams.ByteSize = 8;dcbSerialParams.StopBits = ONESTOPBIT;dcbSerialParams.Parity = NOPARITY;if (!SetCommState(hSerial, &dcbSerialParams)) {printf("无法设置串口参数\n");return 1;}// 设置串口超时时间timeouts.ReadIntervalTimeout = 50;timeouts.ReadTotalTimeoutConstant = 50;timeouts.ReadTotalTimeoutMultiplier = 10;timeouts.WriteTotalTimeoutConstant = 50;timeouts.WriteTotalTimeoutMultiplier = 10;if (!SetCommTimeouts(hSerial, &timeouts)){printf("无法设置串口超时时间\n");return 1;}// 发送数据char data[] = "Hello, Serial!";DWORD bytesWritten;if (!WriteFile(hSerial, data, strlen(data), &bytesWritten, NULL)){printf("无法发送数据\n");return 1;}// 关闭串口CloseHandle(hSerial);return 0;}```接收端代码:```c#include <stdio.h>#include <stdlib.h>#include <string.h>#include <Windows.h>int main(){HANDLE hSerial;DCB dcbSerialParams = { 0 };COMMTIMEOUTS timeouts = { 0 };// 打开串口hSerial = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);if (hSerial == INVALID_HANDLE_VALUE){printf("无法打开串口\n");return 1;}// 配置串口参数dcbSerialParams.DCBlength = sizeof(dcbSerialParams);if (!GetCommState(hSerial, &dcbSerialParams)){printf("无法获取串口参数\n");return 1;}dcbSerialParams.BaudRate = CBR_9600;dcbSerialParams.ByteSize = 8;dcbSerialParams.StopBits = ONESTOPBIT;dcbSerialParams.Parity = NOPARITY;if (!SetCommState(hSerial, &dcbSerialParams)) {printf("无法设置串口参数\n");return 1;}// 设置串口超时时间timeouts.ReadIntervalTimeout = 50;timeouts.ReadTotalTimeoutConstant = 50;timeouts.ReadTotalTimeoutMultiplier = 10;timeouts.WriteTotalTimeoutConstant = 50;timeouts.WriteTotalTimeoutMultiplier = 10;if (!SetCommTimeouts(hSerial, &timeouts)){printf("无法设置串口超时时间\n");return 1;}// 接收数据char data[100];DWORD bytesRead;if (!ReadFile(hSerial, data, sizeof(data), &bytesRead, NULL)){printf("无法接收数据\n");return 1;}// 显示接收到的数据printf("接收到的数据:%s\n", data);// 关闭串口CloseHandle(hSerial);return 0;}```十、联系方式作者:XXXEmail:XXX。

串口通信电路设计

串口通信电路设计
和课题验收两部分构成, 其中: 平时成绩(研讨、作业、实验)占30% 课题验收(作品、报告)占70% 2)平时成绩是指同学们实验课的表现,实验子课题的 完成程度,表现出的理解、思维、表达、创造性等方面的 能力等各方面的情况。 3)课题验收评分标准如下: 课题完成程度(包括功能和指标)(40%) 课题在软件构思、功能、指标等方面的创造性(15%) 课题验收时回答问题的正确性、准确性和发挥(15%) 课题设计总结报告(30%)
2、PCF8563:
case 2: hou = (read_byte_8563() ) & 0x3F;break;//获取小时 case 3: day = (read_byte_8563() ) & 0x3F;break;//获取日 case 4: week = (read_byte_8563() ) & 0x07; if(week==0)week=7;break;//获取星期 case 5: mon = (read_byte_8563() ) & 0x9F;break;//获取月 case 6: year = (read_byte_8563() ) & 0xFF;break;//获取年 default:break;
somenop;
} sda_8563 = 1; 字节后释放总线 scl_8563 = 0; 个脉冲,接收应答位 return (a); } //读完一个 //加上第九
其他相关程序编写模块:
1、键盘扫描应用程序 2、数码管或者液晶应用程序 3、STC89C52单片机定时器中断应用 程序
4、系统模块间的整合与测试
具体制作过程,同学们自行落实,可以是 创新基地、可以是机房、可以是宿舍等。
硬件调试部分:——主要熟悉和掌握各模块的原理图 软件调试部分:

串口通信课程设计(微机原理课程设计)

串口通信课程设计(微机原理课程设计)
//异步读取 private void AsyReceiveData(object serialPortobj) {
SerialPort serialPort = (SerialPort)serialPortobj; System.Threading.Thre源自d.Sleep(500); try {
三、实验步骤
1、打开 Visual Studio 2008,新建C# Windows窗体应用程序项目 2、设计界面,添加界面元素 3、为各个控件设置事件响应代码 4、调试并完成程序
四、设计的控制界面及其操作
设计的控制界面如下所示: 通过“串口设置”可以选择串口、设置帧格式、打开及关闭串口等 通过“状态”可以查看串口状态、发送的数据帧数和接受的数据帧数 在“发送数据”窗口中输入内容,点击“发送”,即把数据发送给对方 在“数据显示”窗口中会显示接受的数据
//开启接收数据线程 ReceiveData(serialPort1); }
private void SendStringData(SerialPort serialPort1) {
serialPort1.Write(txtSend.Text); //发送数据帧加1 lbSendNum.Text = (int.Parse(lbSendNum.Text.Trim()) + 1).ToString(); }
串行通信控制
理学院
一、实验目的
1、掌握串行通信的原理和控制方法。 2、采用三线连接方法,编程控制,实现两台微机异步串行通信。
二、实验原理
1、串口通信连接 本次实验使用了 RS-232C 接口,其标准规定有25根连线,在一般的 微机通信中,只有9个信号经常使用,它们的引脚定义如下表和图所 示:

嵌入式串口接受数据实验课题研究目的和内容

嵌入式串口接受数据实验课题研究目的和内容

嵌入式串口接受数据实验课题研究目的和内容
嵌入式串口接收数据实验课题的研究目的是探索嵌入式系统中串口通信的原理和应用,培养学生对嵌入式系统的开发能力和问题解决能力。

具体的研究内容可以包括以下方面:
1. 串口通信原理:学习串口通信的工作原理、通信协议等基础知识。

2. 嵌入式串口编程:学习使用合适的编程语言和开发工具,实现嵌入式系统的串口接收功能。

3. 数据接收与解析:学习如何接收串口发送的数据,并对数据进行解析和处理,包括数据格式转换、数据校验等。

4. 数据存储与显示:学习将接收到的数据进行存储和显示,可以使用内部存储器、外部存储卡或者其他存储设备。

5. 串口参数配置:学习如何配置串口的波特率、数据位数、校验位、停止位等参数,以满足不同应用的需求。

6. 错误处理与调试:学习如何处理串口通信中可能出现的错误,同时熟悉使用调试工具和技巧进行故障排查。

串行通讯的实验报告

串行通讯的实验报告

一、实验目的1. 理解串行通讯的基本原理和通信方式。

2. 掌握串行通讯的硬件设备和软件实现方法。

3. 学会使用串行通讯进行数据传输。

4. 通过实验,提高动手能力和分析问题、解决问题的能力。

二、实验原理串行通讯是指用一条数据传输线将数据一位一位地按顺序传送的通信方式。

与并行通讯相比,串行通讯具有线路简单、成本低等优点。

串行通讯的基本原理如下:1. 异步串行通讯:每个字符独立发送,字符间有时间间隔,不需要同步信号。

每个字符由起始位、数据位、奇偶校验位和停止位组成。

2. 同步串行通讯:数据块作为一个整体发送,需要同步信号。

同步串行通讯分为两种方式:面向字符方式和面向比特方式。

三、实验设备1. 计算机:一台2. 串行通讯设备:串行数据线、串行接口卡、串口调试助手等3. 单片机实验平台:一台4. 数码管显示模块:一个四、实验内容1. 异步串行通讯实验(1)硬件连接:将计算机的串口与单片机实验平台的串行接口连接。

(2)软件设计:编写程序,实现单片机向计算机发送数据,计算机接收数据并显示在屏幕上。

(3)实验步骤:a. 设置串行通信参数:波特率、数据位、停止位、奇偶校验位等。

b. 编写发送程序,实现单片机向计算机发送数据。

c. 编写接收程序,实现计算机接收数据并显示在屏幕上。

2. 同步串行通讯实验(1)硬件连接:与异步串行通讯实验相同。

(2)软件设计:编写程序,实现单片机向计算机发送数据块,计算机接收数据块并显示在屏幕上。

(3)实验步骤:a. 设置串行通信参数:波特率、数据位、停止位、奇偶校验位等。

b. 编写发送程序,实现单片机向计算机发送数据块。

c. 编写接收程序,实现计算机接收数据块并显示在屏幕上。

3. 双机通讯实验(1)硬件连接:将两台单片机实验平台通过串行数据线连接。

(2)软件设计:编写程序,实现两台单片机之间相互发送和接收数据。

(3)实验步骤:a. 设置串行通信参数:波特率、数据位、停止位、奇偶校验位等。

串口接收模块的verilog设计

目录串口接收模块的verilog设计 (1)1现场可编程门阵列FPGA (2)2 Verilog HDL简介 (3)3串行通信系统 (3)3.1串行通信概念 (4)3.3 RS-232总线 (5)3.3.1 RS-232接口特性 (5)3.3串行通信接口组成 (6)3.4 通信协议 (7)3.5系统整体结构 (8)4 UART简介 (9)4.1 接收模块功能设计描述 (11)4.2波特率模块 (16)4.3验证 (17)5总结体会 (18)参考文献 (19)串口接收模块的verilog设计摘要:UART(即Universal Asynchronous Receiver Transmitter)是数据通信及控制中广泛使用的一种全双工串行数据传输协议。

本设计基于 FPGA器件实现对UART的波特率产生器、UART发送器和接收器及其整合电路的模块化设计,采用Verilog HDL语言对三个功能模块进行硬件描述。

通过串口调试助手进行验证,其结果完全符合UART协议的要求和预期的结果。

关键词:UART FPGA Verilog HDL 验证1现场可编程门阵列FPGA20世纪80年代中期,FPGA刚出现时,大部分用来实现粘合逻辑、中等复杂度的状态机和相对有限的数据处理任务。

在20世纪90年代早期,FPGA的规模和复杂度开始增加,那时它们的主要场所在通信和网络领域。

到了20世纪90年代末,FPGA在消费、汽车和工业领域的应用经历了爆炸式增长。

21世纪早期,已经可以买到数百万容量的高性能FPGA。

今天FPGA几乎可以用来实现任何东西,包括通信设备和软件定义无线电,雷达、影像和其它数字信号处理的应用,直至包含硬件和软件的片上系统。

FPGA(field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。

它是作为专用集成电路(ASIC)领域中的一种半定制电路出现的,既解决了制定电路的不足,又克服了原有可编程器件门电路数有限的缺点。

关于串口的实验报告

关于串口的实验报告1. 实验目的本实验的目的是通过学习并实践串口通信的基本原理和方法,加深对串口通信的理解,掌握串口通信的使用技巧和开发工具。

同时,了解串口通信在实际应用中的重要性和应用场景。

2. 实验原理串口是一种用于计算机与外部设备之间进行数据通信的接口标准。

在计算机中,串口通常通过RS-232或RS-485等标准来实现。

串口通信采用的是异步通信方式,即接收方和发送方的时钟不同步,通过发送和接收的数据包中的控制信息来实现数据的传输。

串口通信的基本原理如下:- 串口通信通过一个物理接口连接计算机和外部设备。

- 通信数据被分为一个个字节进行传输,每个字节由一定的控制信息和实际数据组成。

- 发送方通过发送字节的方式将数据发送给接收方。

- 接收方通过接收字节的方式将数据接收并进行处理。

3. 实验步骤步骤一:准备实验环境为了进行串口通信的实验,我们需要准备以下工具和设备:- 一台计算机- 一个串口转USB转换器- 一个外部设备(如Arduino、传感器等)步骤二:安装串口驱动程序在开始实验之前,我们需要安装串口转USB转换器所需的驱动程序。

驱动程序的安装方式因不同的设备而有所差异,一般可以通过官方网站下载并按照说明进行安装。

步骤三:编写串口通信程序根据所使用的编程语言和开发工具,编写一个简单的串口通信程序。

该程序应包括以下功能:- 打开指定的串口端口- 配置串口的波特率、数据位、停止位等参数- 循环读取串口接收缓冲区中的数据,并进行处理- 将需要发送的数据写入串口发送缓冲区步骤四:测试串口通信将串口转USB转换器插入计算机,并将外部设备连接至串口转USB转换器。

运行编写好的串口通信程序,并观察实验结果。

测试串口通信的方法可以有很多,可以通过发送和接收数据包来验证通信是否正常。

步骤五:总结与分析根据实验结果,总结并分析串口通信的性能和应用场景。

可以考虑以下问题:- 串口通信在哪些领域得到了广泛应用?- 串口通信有哪些特点和优势?- 在实际应用中,串口通信可能遇到哪些常见问题,如何解决?4. 实验结论通过本实验,我们了解了串口通信的基本原理和实际应用方法。

串口通讯电路pcb课程设计

串口通讯电路pcb课程设计一、课程目标知识目标:1. 学生理解串口通讯的基本原理,掌握相关的电子元件及其功能。

2. 学生能够描述PCB(印刷电路板)设计的基本流程,并运用相关知识设计串口通讯电路。

3. 学生掌握串口通讯协议,了解数据传输的方式及其特点。

技能目标:1. 学生能够运用所学知识,设计并绘制串口通讯电路的PCB图。

2. 学生通过实际操作,提高动手能力,培养问题解决和团队协作能力。

3. 学生学会使用相关软件(如Altium Designer等)进行PCB设计,并完成电路板制作。

情感态度价值观目标:1. 学生培养对电子技术领域的兴趣,提高对科技创新的热情。

2. 学生认识到团队合作的重要性,增强团队协作精神。

3. 学生树立正确的价值观,认识到学习科学技术对国家和社会发展的意义。

课程性质:本课程为实践性较强的课程,结合理论知识,注重培养学生的实际操作能力和创新能力。

学生特点:学生处于高年级阶段,具备一定的电子技术基础和动手能力,对新鲜事物充满好奇心。

教学要求:教师需引导学生将理论知识与实际操作相结合,注重培养学生的创新思维和团队协作能力,提高学生的实践操作水平。

通过课程学习,使学生能够独立完成串口通讯电路的PCB设计。

二、教学内容1. 理论知识:- 串口通讯原理及其协议介绍,包括数据格式、波特率、校验等。

- 电子元件基本知识,如电阻、电容、二极管、晶体管等。

- PCB设计基础,包括设计流程、布线原则、层叠结构等。

2. 实践操作:- 使用相关软件(如Altium Designer)进行串口通讯电路的原理图绘制。

- 根据原理图进行PCB布局、布线设计,并生成制造文件。

- 电路板制作过程演示,如打印、腐蚀、钻孔等。

3. 教学大纲:- 第一周:串口通讯原理学习,电子元件知识回顾。

- 第二周:PCB设计基础知识学习,设计流程介绍。

- 第三周:原理图绘制实践,团队协作完成电路设计。

- 第四周:PCB布局、布线设计,并进行审查修改。

串行通信实验报告

串行通信实验报告实验报告:串行通信实验一、实验目的本实验旨在通过搭建串行通信系统,了解串行通信的基本原理和工作方式,掌握串行通信的相关知识和技术。

二、实验仪器和材料1. Arduino开发板B数据线3.跳线若干4.电脑三、实验原理串行通信是一种通过连续的、位的形式传输数据的通信方式。

在串行通信中,数据通过一个数据线一位一位地传输,与并行通信相比,串行通信的线路数量较少,适用于数据传输距离较远的场景。

在本实验中,我们使用Arduino开发板作为串行通信的发送和接收端,通过USB数据线连接电脑与Arduino开发板进行数据交互。

四、实验步骤1. 连接电路:将Arduino开发板通过USB数据线连接至电脑,确保连接稳定。

2. 编写Arduino代码:使用Arduino IDE软件编写Arduino代码,实现数据发送和接收的功能。

代码示例://发送端void setuSerial.begin(9600); //设置串行通信波特率为9600void looString message = "Hello World!"; //待发送的消息Serial.println(message); //通过串行通信发送消息delay(2000); //延迟2秒//接收端void setuSerial.begin(9600); //设置串行通信波特率为9600void looif (Serial.available() { //如果串行通信接收到数据String message = Serial.readString(; //读取接收到的数据Serial.println("Received: " + message); //打印接收到的数据}3. 上传代码:将编写好的代码上传至Arduino开发板,使其开始工作。

4. 打开串行监视器:在Arduino IDE中点击“工具”菜单并选择“串行监视器”(或使用快捷键Ctrl+Shift+M)打开串行监视器。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验四串口接收模块电路设计一、实验目的:1、熟练使用ISE设计工具。

2、理解串口传输协议。

理解采用“自顶向下”设计思路,分解模块的方法。

3、在ISE使用Verilog HDL设计串口接收模块,完成仿真、下载。

二、原理分析(一)串口传输协议概述设计完成异步串口通信通用异步收发是一种典型的异步串口通信,简称UART。

串口通信时序如图1所示。

图1 通用异步收发时序图由图1可以看出,在没有数据传送时,通信线会一直处于高电平,即逻辑1状态;当有数据传送时,数据帧以起始位开始,以停止位结束。

起始位为低电平,即逻辑0状态;停止位为高电平,即逻辑1状态,其持续时间可选为1位、1.5位或2位(本次设计选择持续时间1位)。

接收端在接收到停止位后,知道一帧数据已经传完,转为等待数据接收状态;只要再接收到0状态,即为新一帧数据的起始状态。

数据帧的数据位低位(LSB)在前,高位(MSB)在后,根据不同的编码规则,数据位可能为5位、6位、7位或者8位(本次设计数据位定位8位)。

校验位也可根据需要选择奇校验、偶校验或者不要校验(本次设计不要校验位)。

(二)串口时序分析串口通讯常用“波特率”表述串口传输速率,常用的参数有9600 bps 和115200 bps等。

在硬件传输角度看,波特率表征了传输一位数据所需要的时间。

例如:波特率是9600 bps,传输一位数据的时间是1/9600= 0.000104166666666667秒。

如果FPGA系统时钟是20MHZ,则一位数据传输时间相当于(1/9600)/(1/20M)=2083个20MHZ时钟周期。

设一帧数据位数=1(开始位)+8(数据位)+1(校验位)+1(结束位)=11位,所以传输一帧数据的时间是11*1/9600=0.00114583333333333333333333333333秒。

为了稳定采集串口数据帧的数据,需要在每位数据的“中间时刻”采样,由此,需要在每位数据开始时刻对时钟进行计数,若系统时钟是20MHZ,则在计数至2083/2=1042时采样此时刻的数值。

三、系统分析:为实现串口接收电路,FPGA应该完成:1、及时发现数据传输的开始,并判断每一位的开始。

2、按照“在数据位中间采样”的要求,确认采样时刻。

3、将采样得到串行数据转换为并行数据。

4、将并行数据显示在下载板上。

本次实验参数:串口传输数据率9600bps,每帧数据11位。

按照“自顶向下”设计思想,系统分为以下五个子模块:1、帧开始监测模块(detect_module)输入端口:串行输入数据RX_Pin_In,系统时钟CLK,复位信号RSTn,其中当RSTn=0时系统复位。

输出端口:H2L_Sig参考代码:module detect_module( CLK, RSTn,RX_Pin_In, H2L_Sig);input CLK;input RSTn;input RX_Pin_In;output H2L_Sig;reg H2L_F1;reg H2L_F2;always @ ( posedge CLK or negedge RSTn )if( !RSTn )beginH2L_F1 <= 1'b1;H2L_F2 <= 1'b1;endelsebeginH2L_F1 <= RX_Pin_In;H2L_F2 <= H2L_F1; endassign H2L_Sig = H2L_F2 & !H2L_F1;endmodule2、数据位中心定位模块(rx_bps_module)输入端口:系统时钟CLK;复位信号 RSTn,当RSTn=0,系统复位;数据位有效信号 Count_Sig,当Count_Sig=1,表示有效位传输。

输出端口:BPS_CLK,当计数至每一位的中间位置,BPS_CLK=1,提示信号采集时间到,否则不进行信号采集。

设系统时钟20MHZ,则参考代码如下:module rx_bps_module(CLK, RSTn,Count_Sig,BPS_CLK );input CLK;input RSTn;input Count_Sig;output BPS_CLK;reg [11:0]Count_BPS;always @ ( posedge CLK or negedge RSTn )if( !RSTn )Count_BPS <= 12'd0;else if( Count_BPS == 12'd2082 )Count_BPS <= 12'd0;else if( Count_Sig )Count_BPS <= Count_BPS + 1'b1;elseCount_BPS <= 12'd0;assign BPS_CLK = ( Count_BPS == 12'd1041 ) ? 1'b1 : 1'b0;endmodule3、数据装载模块(rx_control_module)输入端口:系统时钟CLK,复位信号 RSTn,当RSTn=0时,系统复位帧开始信号H2L_Sig,当H2L_Sig=1,表示一帧信号开始;串口数据输入信号: RX_Pin_In,位中心定位信号:BPS_CLK,串口接收使能信号 RX_En_Sig,当RX_En_Sig=1,系统正常工作。

反正不接收数据。

输出端口:串口数据帧开始确认信号:Count_Sig,当 Count_Sig=1,表示串口输入帧开始时刻,持续一个系统时钟周期。

装载好的串口数据:RX_Data,位宽为8bits串口数据接收结束信号: RX_Done_Sig,当RX_Done_Sig=1,表示一帧串口数据接收完毕。

参考代码:module rx_control_module(CLK, RSTn, H2L_Sig, RX_Pin_In, BPS_CLK, RX_En_Sig, Count_Sig, RX_Data, RX_Done_Sig);input CLK;input RSTn;input H2L_Sig;input RX_En_Sig;input RX_Pin_In;input BPS_CLK;output Count_Sig;output [7:0]RX_Data;output RX_Done_Sig;reg [3:0]i;reg [7:0]rData;reg isCount;reg isDone;always @ ( posedge CLK or negedge RSTn )if( !RSTn )begini <= 4'd0;rData <= 8'd0;isCount <= 1'b0;isDone <= 1'b0;endelse if(RX_En_Sig )case ( i )4'd0 :if( H2L_Sig ) begin i <= i + 1'b1; isCount <= 1'b1; end4'd1 :if( BPS_CLK ) begin i <= i + 1'b1; end4'd2, 4'd3, 4'd4, 4'd5, 4'd6, 4'd7, 4'd8, 4'd9 :if( BPS_CLK ) begin i <= i + 1'b1; rData[ i - 2 ] <= RX_Pin_In; end4'd10 :if( BPS_CLK ) begin i <= i + 1'b1; end4'd11 :if( BPS_CLK ) begin i <= i + 1'b1; end4'd12 :begin i <= i + 1'b1; isDone <= 1'b1; isCount <= 1'b0; end4'd13 :begin i <= 1'b0; isDone <= 1'b0; endendcaseassign Count_Sig = isCount;assign RX_Data = rData;assign RX_Done_Sig = isDone;endmodule这一代码采用有限状态机方式,在监测到串口数据帧开始时刻,如果系统接收使能信号有效,展开对串口输入的几个阶段:帧开始,有效帧数据接收,接收帧校验位,接收帧结束位,一帧接收结束,转回帧开始状态。

4、显示模块(display)输入端口:sum,从串口接收到的8bits的一帧数据输出端口:自定义本模块根据下载板的资源,将接收到的8bits数据显示出来,可以采用数码管,发光二极管等。

5、顶层模块(top)将以上4个模块合理组合,构成一个系统。

四、实验内容:1.在理解串口协议2.采用VerilogHDL,设计分频模块,将下载板上40MHz时钟转换为所需要的20MHZ 时钟。

3. 分析帧开始监测模块(detect_module),数据位中心定位模块(rx_bps_module),数据装载模块(rx_control_module)的功能,完成:帧开始监测模块(detect_module),数据装载模块(rx_control_module)两个模块的功能仿真。

4. 根据下载板资源,设计数据显示方案,并设计display.v模块并仿真。

5. 在理解各个参考代码基础上,画出系统模块连接图,完成顶层模块top.v的设计。

6、根据下载板资源,锁定引脚,编译适配以上文件,最后进行下载和硬件测试。

四、思考题:1、简述帧开始监测模块(detect_module),数据位中心定位模块(rx_bps_module),数据装载模块(rx_control_module)的功能各是什么?这三个模块是如何配合实现了串口数据的接收?2、如果串口比特率改为115200 bps,代码应该做怎样的修改?3、如果要设计串口数据发送模块,该如何设计,简要写出设计系统任务书(包括设计目标,功能模块划分,子模块功能描述等)五、实验报告:要求按照系统实现要求,分析串口通讯协议,描述按“自顶向下”设计方法分解系统,实现各子模块的思路,实验报告附功能仿真波形及其分析。

阐述下载测试电路,包括引脚锁定,下载调试效果。

回答本实验的思考题。

相关文档
最新文档