xilinx FPGA 串口设计笔记 在设计中, 需要用 FPGA 读取 GPS 内部的信息,GPS 的通信方式为串口, 所以在 FPGA 中移植了串口程序 本次移植的程序源代码是特权的串口程序, 本以为移植应该很快就能完成, 但其中还是出了一写小问题, 耽误了不少的时间, 下面将问题进行一个总结!

Similar documents
本科学生毕业论文

姓名

IC芯片自主创新设计实验

绝密★启用前

Huawei Technologies Co

a b c d e f g C2 C1 2

图 内部结构图 8251 的外部引脚如图 所示, 共 28 个引脚, 每个引脚信号的输入输出方式如图中的箭 头方向所示

第一章

PowerPoint 演示文稿

2. initial always initial always 0 always initial always fork module initial always 2 module clk_gen_demo(clock1,clock2); output clock1,clock2; reg cl

说 明 根 据 上 海 市 公 共 信 用 信 息 归 集 和 使 用 管 理 办 法 ( 沪 府 令 38 号 ) 和 上 海 市 地 方 标 准 全 过 程 信 用 管 理 要 求 第 3 部 分 : 应 用 清 单 编 制 指 南 相 关 要 求, 本 市 公 共 信 用 信 息 应 用 事

审计署关于北京市密云县2012年机构运转支出情况的审计调查结果

2014zb9

(

中華民國山岳協會所屬隊會登山途徑說明

2009年总站工作计划-2009-0102

600247物华股份_ bnbqw.PDF

【主持人】:给大家介绍一下,这次的培训是我们画刊部的第三次培训,当然今天特别有幸请来著吊的摄影家李少白老师给我们讲课


水资源管理(十七)

MSP430 串行异步通讯原理与实现 南京航空航天大学 魏小龙 本讲讲述串口功能与连接的实现 大多数 MSP430 芯片都有硬件异步通讯功能, 有一些器件有两个通讯端口, 也有少数没有 没有硬件串口的芯片可以实现软件 ( 模拟 ) 串口 下面表格为 430 系列芯片串口的情况 系列芯片 F11 系列

128K Flash EPROM 的程序?\(Bank=64K\) 切?

本实验需要用到两个特征值, 两个特征值的属性各不相同, 我们同样在 SimpleGATTProfile 中新建即可, 接下来就开始吧 新建特征值表 : 表 3.3 串口透传特征值属性 长度 属性 UUID 功能 (byte) SIMPLEPROFILE_CHA R6 15 可读可写 FFF6 服务器

图 片 展 示 : 资 源 简 介 : FPGA Altera CycloneII EP2C5T144C8 (4608 个 LE) 2 路 有 源 晶 振 (50M,25M) AS & JTAG 标 准 接 口 VGA 接 口 UART 接 口 蜂 鸣 器 8bit 并 行 DAC 8 路 按 键

姓名

PowerPoint 演示文稿

z x / +/- < >< >< >< >< > 3 b10x b10x 0~9,a~f,A~F, 0~9,a~f,A~F, x,x,z,z,?,_ x,x,z,z,?,_ h H 0~9,_ 0~9,_ d D 0~7,x,X,z,Z

untitled


untitled

PowerPoint Presentation

目录

CHCN_8-14_K.indd

ebook122-11

Microsoft Word - 目次範例-catalog doc

CC213

Quality of Life 1 TEIJIN CSR Report 2012

Microsoft Word - Delta Controller ASCII_RTU_SC

untitled

Microsoft Word - FPGA的学习流程.doc

第一章.doc

LED 显示屏驱动 IC2011V1.1 SM16125 概述 SM16125 是专为 LED 显示屏设计的驱动芯片, 内建 CMOS 位移寄存器与锁存功能, 可以将串行的输入数据转换成并行输出数据格式 SM16125 提供 16 个电流源, 可以在每个输出端口提供 3 45mA 的恒定电流, 大小

9 什 么 是 竞 争 与 冒 险 现 象? 怎 样 判 断? 如 何 消 除?( 汉 王 笔 试 ) 在 组 合 逻 辑 中, 由 于 门 的 输 入 信 号 通 路 中 经 过 了 不 同 的 延 时, 导 致 到 达 该 门 的 时 间 不 一 致 叫 竞 争 产 生 毛 刺 叫 冒 险 如

(Microsoft Word - \256g\275b\252\354\305\351\305\347.doc)

<4D F736F F D203037CEC0C9FACDB6C8EBECE9D2B3>

EC20系列PLC与WEINVIEW通讯手册

程式人雜誌

B 6 A A N A S A +V B B B +V 2

Microsoft PowerPoint - EDA-理论3 [兼容模式]

大会资料上传1.PDF

营 业, 因 业 务 往 来 关 系, 与 宜 宾 大 小 商 帮 比 较 熟 悉 曹 九 龄 熊 郁 村 便 约 我 参 加 共 同 发 起 熊 曹 二 人 与 我 又 是 世 交, 在 实 业 救 国 思 想 激 励 下, 同 时 也 为 个 人 将 来 发 展 前 途 计, 我 也 欣 然 乐

剑门关文学-2.FIT)

灵星LED视频屏控制板

技术文档

W7500EVB 开发指南 ( 库函数版 ) 第五章串口试验 前面几章介绍了 W7500 的 IO 口操作 本章教大家如何使用 W7500 的串口来发送和接收数据 本章将实现如下功能 :W7500 通过串口和上位机的对话,W7500 在收到上位机发过来的字符串后, 原原本本的返回给上位机 本章分为如

作者 : Jie Xu 日期 : E_mail: KL5121 使用说明 该说明书根据 BECKHOFF KL5121 的英语 PDF 文档翻译及修改而成, 其中将部分介绍性内容简化,

Microsoft Word - SC16C550应用实例.doc


Siga-S16 FPGA开发板

CM ZT1

USR-TCP232-XX系列模块设置协议

本科学生毕业论文

Contents 1 简介 ISC 原理示意图 ISC SFR 描述 ISC 步骤 在线更新 外部 SPI FLASH 内部集成 SPI FLASH ISC 实例 FP

XDC约束技巧-IO篇(下)1.1

USR-N510-spec.doc

第十四章 STC单片机比较器原理及实现


第卷 第 二 相關單位說明 高雄市政府環境保護局陳副局長居豐 高雄市政府警察局余股長瑞堂 台灣自來水股份有限公司第七區管理處蕭主任再興 高雄市旗山區公所民政課李課長秀蓉 行政院南部聯合服務中心工商組李組長俊輝 高雄市政府環境保護局楊視察漢宗 三 民意代表 學者專家及各界代表陳述意見及討論交流 一 林

邏輯分析儀的概念與原理-展示版

RTC

上海相关企业名单

行业

<4D F736F F D203034CAB5D1E9CBC D20B5C4494F20BDD3BFDACAB5D1E92E646F63>

穨R _report.PDF

Microsoft Word - IRFWX-A078_A_SM59R08A2_SM59R16A2_IIC APN_SC_.doc

untitled

FPGA 培训专家 FPGA 入门课程 4- 走马灯 第四节走马灯 今天的课程将引入开发板的使用, 本节课使用 ZX-2 开发板, 此开发板是至芯科技公司推出的低价位高性价比的初级开发板 本系列的视频教程也是围绕 ZX-2 开发板展开的 后续大家可以通过淘宝购买此开发板

untitled

旅游出行知识50题.jpg

FPGA 培训专家 FPGA 入门课程 3- 分频器 第三节分频器 8 分频器 ; 例 : 输入为 50Mhz 占空比为 ( 高低电平持续时间的比值 )50% 的时钟, 将其 8 分频后输出分析 : 将 50Mhz8 分频频率为 50/8=6.25Mhz 周期为 20n

关于印发《上海市建设工程夜间施工许可和备案审查管理办法》的通知

微雪电子 Open407V-D 实验手册 Open407V-D 实验手册 目录 准备工作... 2 ADC+DMA... 2 CAN1 TO CAN2-Normal... 3 DCMI_OV DCMI_OV I2C... 6 L

第 二 章 假 山 后 的 情 侣 这 么 不 明 不 白 地 过 了 几 天, 我 的 心 里 无 时 无 刻 不 在 盘 算 着 弄 清 楚 一 些 事 情 等 我 可 以 流 利 表 达 的 时 候, 一 定 要 找 那 丫 头 打 听 下 情 况 我 肯 定 是 在 受 伤 期 间 失 忆

USR-K2设置协议 V1.0

<4D F736F F D20B5DAC8FDCBC4D5C2D7F7D2B5B4F0B0B82E646F63>

行业

USR-TCP232-S2规格书-V1.0.3

概述 ST08B 触摸感应器可以用平均电容值作为基准检测感应点的电容变化 它可以通过任何非导电介质来感应电容变化 这样感应模块就可以很好的跟水和灰尘隔离 ST08B 和 ST08 相比有更强的抗干扰性和更好的一致性 这个芯片可以工作在低功耗的环境下, 当电源为 5v 时, 工作电流为 220ua,

untitled


行业

Microsoft Word - 2N-B-92£¨V1.0£©°åʽPLCʹÓÃÊÖ²á.doc

PowerPoint 演示文稿

:, : ,(4) ,32 21 :,,( ) : ,(2).--3 7

<4D F736F F F696E74202D20B5DA35D5C2CEA2B4A6C0EDC6F7B9A4D7F7D4ADC0ED2E707074>

SM16106 LED 显示屏驱动 IC IT1GIGV1.0 SM16106 概述 SM16106 是专为 LED 显示屏设计的驱动芯片, 内 建 CMOS 位移寄存器与锁存功能, 可以将串行的输入 数据转换成并行输出数据格式 SM16106 工作电压为 3.3V 5.0V, 提供 16 个电 流

微雪电子 Open103Z 实验手册 Open103Z 实验手册 目录 准备工作 BitIO-Pushbutton... 3 ADC+DMA... 4 CAN-LoopBack... 5 DAC... 6 DS18B GPIO_Key_L

目 录 每 月 聚 焦... 2 长 航 物 流 平 台 与 国 家 物 流 平 台 对 接 工 作 交 流 会 召 开... 2 浙 江 智 慧 港 航 将 为 世 界 互 联 网 大 会 保 驾 护 航... 3 杭 州 跨 贸 综 合 试 验 区 单 一 窗 口 平 台 上 线... 3 地

MAX6970 DS.C

Open103Z 示例程序 ( 基于 HAL 库 ) 说明 Open103Z 示例程序 ( 基于 HAL 库 ) 说明 程序说明 关于 STM32CubeMx 通过 STM32CubeMX 生成的基于 HAL 库的程序源代码, 相较于经典库的代码而言, 更加合理和清晰 STM32CubeMX 配置界

Transcription:

xilinx FPGA 串口设计笔记 在设计中, 需要用 FPGA 读取 GPS 内部的信息,GPS 的通信方式为串口, 所以在 FPGA 中移植了串口程序 本次移植的程序源代码是特权的串口程序, 本以为移植应该很快就能完成, 但其中还是出了一写小问题, 耽误了不少的时间, 下面将问题进行一个总结! 以下是串口的时序 : 在设计中, 耽误时间最长的问题就是数据老是出错, 为了找出问题的所在, 用示波器观察了 一下串口发送的数据! 串口发送的软件如图所示 :

通过定时发送 hex 数据 :0x55, 如图 : 其中绿色的为电脑发送的串口数据波形, 紫色为波特率发生器产生的读数据的触发脉冲, 也就是说在上升沿的时候读取串口信号的数据, 从图可以看出, 在每个数据的中间段,FPGA 对信号进行了读取, 也就是说 FPGA 的波特率设置是没有问题的 为了进一步的验证, 又发了一次 0xaa, 进行了一次对比 通过定时发送 hex 数据 :0xaa, 如图 :

通过上面的测试可知, 程序设计的波特率以及读写数据的时序是没有问题的, 但是在读数据的时候依然出现错误 在此过程中, 发了两个数据进行验证 通过定时发送 hex 数据 :0xff,0xff 如图 : 在通过发送两个数据后发现, 串口发送的一个数据的位数为 10 位, 1bit 下降沿的起始位 +8bit 的数据位 +1bit 的停止位 也就是说串口发送的数据长度不是固定的, 在没有校验位的情况下, 其长度为 10bit, 而特权的程序的, 他的串口设置的读取长度为 12bit, 这样也就造成了数据的错位, 最终导致数据的整体出错!! 在对程序进行了修改过发现, 程序运行正常

module wi125_time( input clk, // 48MHz 主时钟 input rst_n, // 低电平复位信号 input wi125_uart_rx, // RS232 接收数据信号 output wi125_data_ok, output[7:0] wi125_rx_data, output ww ); //---------------------------------- 串口波特率设置 ---------------------------------// // 功能 : 将串口的波特率设置为 38400bps //---------------------------------------------------------- reg[12:0] cnt; // 分频计数 reg clk_bps; // 波特率时钟寄存器 reg bps_start; if(!rst_n) cnt <= 13'd0; else if((cnt == 1250)!bps_start) cnt <= 13'd0; // 波特率计数清零 else cnt <= cnt+1'b1; // 波特率时钟计数启动 if(!rst_n) clk_bps <= 1'b0; else if(cnt == 625) clk_bps <= 1'b1; // clk_bps_r 高电平为接收数据位的中间采样点, 同时也作为发送数据的数据改变点 else clk_bps <= 1'b0; assign ww=clk_bps; //---------------------------------- 串口波特率设置 ---------------------------------// // 功能 : 将串口的波特率设置为 38400bps //---------------------------------------------------------- reg rs232_rx0,rs232_rx1,rs232_rx2,rs232_rx3; // 接收数据寄存器, 滤波用 wire neg_rs232_rx; // 表示数据线接收到下降沿 reg rx_int1,rx_int2; if(!rst_n) rs232_rx0 <= 1'b0; rs232_rx1 <= 1'b0; rs232_rx2 <= 1'b0; rs232_rx3 <= 1'b0; rx_int1 rx_int2 <= 1'b0; <= 1'b0;

else rs232_rx0 <= wi125_uart_rx; rs232_rx1 <= rs232_rx0; rs232_rx2 <= rs232_rx1; rs232_rx3 <= rs232_rx2; rx_int1 <= rx_int; rx_int2 <= rx_int1; // 下面的下降沿检测可以滤掉 <20ns-40ns 的毛刺 ( 包括高脉冲和低脉冲毛刺 ), // 这里就是用资源换稳定 ( 前提是我们对时间要求不是那么苛刻, 因为输入信号打了好几拍 ) //( 当然我们的有效低脉冲信号肯定是远远大于 40ns 的 ) assign neg_rs232_rx = rs232_rx3 & rs232_rx2 & ~rs232_rx1 & ~rs232_rx0; // 接收到下降沿后 neg_rs232_rx 置高一个时钟周期 assign wi125_data_ok = rx_int2&~rx_int1; //---------------------------------------------------------------- reg[3:0] num; // 移位次数 reg rx_int; // 接收数据中断信号, 接收到数据期间始终为高电平 if(!rst_n) bps_start <= 1'bz; rx_int <= 1'b0; else if(neg_rs232_rx) // 接收到串口接收线 rs232_rx 的下降沿标志信号 bps_start <= 1'b1; // 启动串口准备数据接收 rx_int <= 1'b1; // 接收数据中断信号使能 else if(num==4'd10) // 接收完有用数据信息 bps_start <= 1'b0; // 数据接收完毕, 释放波特率启动信号 rx_int <= 1'b0; // 接收数据中断信号关闭 //----------------------------------------------------------------

reg[7:0] rx_data_r; 至下一个数据来到 //---------------------------------------------------------------- reg[7:0] rx_temp_data; // 串口接收数据寄存器, 保存直 // 当前接收数据寄存器 if(!rst_n) rx_temp_data <= 8'd0; num <= 4'd0; rx_data_r <= 8'd0; else if(rx_int) // 接收数据处理 if(clk_bps) // 读取并保存数据, 接收数据为一个起始位,8bit 数据,1 或 2 个结束位 num <= num+1'b1; case (num) 4'd1: rx_temp_data[0] <= wi125_uart_rx; // 锁存第 0bit 4'd2: rx_temp_data[1] <= wi125_uart_rx; // 锁存第 1bit 4'd3: rx_temp_data[2] <= wi125_uart_rx; // 锁存第 2bit 4'd4: rx_temp_data[3] <= wi125_uart_rx; // 锁存第 3bit 4'd5: rx_temp_data[4] <= wi125_uart_rx; // 锁存第 4bit 4'd6: rx_temp_data[5] <= wi125_uart_rx; // 锁存第 5bit 4'd7: rx_temp_data[6] <= wi125_uart_rx; // 锁存第 6bit 4'd8: rx_temp_data[7] <= wi125_uart_rx; // 锁存第 7bit default: ; case else if(num == 4'd10) // 我们的标准接收模式下只有 1+8+1(2)=10bit 的有效数据 num <= 4'd0; // 接收到 STOP 位后结束,num 清零 rx_data_r <= rx_temp_data; // 把数据锁存到数据寄存器 rx_data 中 assign wi125_rx_data = rx_data_r; module