实现FPGA与PC的串行通讯
发布日期:2011-05-03
本文重要先容了基于FPGA技能实现与PC串行通讯的进程,给出了各个模块的详细实现要领,阐发了实现结果,验证了串行通讯的精确性。
小序
串行通讯即串行数据传输,实现FPGA与PC的串行通讯在实际中,分外是在FPGA的调试中有着很紧张的应用。调试进程一样平常是先举行软件编程仿真,然后将步伐下载到芯片中验证计划的精确性,如今还没有更好的东西可以在下载后及时地对FPGA的事变环境和数据举行阐发。通过串行通讯,可以向FPGA发控制下令让其实行相应的操纵,同时把必要的数据通过串口发到PC上举行相应的数据处理惩罚和阐发,以此来果断FPGA是否按计划请求事变。如许给FPGA的调试带来了很大方便,在不必要DSP等其他分外的硬件条件下,只通过串口就可以完成对FPGA的调试。本文采取QuartusⅡ3.0开辟平台,利用Altera公司的FPGA,计划实现了与PC的串行通讯。
图1 总体框图
图2 发送吸取流程图
图3 状态机更改
总体计划
重要计划头脑:PC向串口发送下令,FPGA通过果断吸取的控制字实行相应的操纵,总体框图如图1所示。
计划包括三部分:1、通过向I/O端口发送曲折电平以到达控制外部硬件的请求。2、完成芯片内部逻辑的变革。3、将必要的数据先存起来(一样平常采取内部或外部FIFO),然后通过串口将数据发送到PC,PC将吸取的数据举行处理惩罚和阐发。串口采取标准的RS-232协议,重要参数的选择:波特率28800bit/s、8位有效位、无奇偶校验位、1位克制位。
FPGA中各模块的实现
分频模块
计划中必要将3.6864MHz的时钟举行64分频变为57600 波特作为其他模块的时钟基准。详细实现时采取一个6位计数器,将计数器的溢出作为时钟的输出即可实现整数分频。
发送吸取模块
此模块是整个计划的内核部分。计划流程如图2所示。
在串行通讯中,无论发送或吸取,都必须偶然钟脉冲信号对所发送的数据举行定位和同步控制,计划中采取的时钟频率是波特率的两倍(57600 bit/s)。吸取进程:初始状态是等待状态,当检测到0时进入查验状态,在查验状态下要是再检测到0则进入吸取数据状态,当吸取完8位比特数后果断是否有克制位,要是有则结束吸取进程重新进入等待状态。发送进程:初始状态是等待状态,当吸取到开始发送的信号则进入发送进程,先发送肇始位,再发送8位比特数,每位宽度为2个周期,当一个字节发送完毕后发送一个克制位,发送结束,重新回到等待状态。
控制模块
重要实现的成果是:果断从PC吸取的数据,根据预先计划的逻辑举行相应的状态转换。比方:给端口预置一个状态;送开始发送的标记位,送准备发送的数据;给DDS送配置信号,控制FIFO的读写。步伐中状态机计划如图3所示。
计划中必要细致的题目
波特率的选择对付串口通讯是很紧张的,波特率不该太大,如许数据才会更稳固。整个发送吸取进程中肇始位的鉴别和发送是数据传输的条件。为了克制误码的孕育产生,在FPGA计划中的串行输入和输出端口都应该加上一个数据锁存器。
图4 发送吸取进程
图5 发送控制字进程
图6 从FIFO读数据的进程
仿真结果
根本的发送吸取
如图4所示,clk是时钟信号(57600 bit/s);start_xmit是开始发送标记位;sin是串行输入;datain是并行输出;read_bit是吸取结束标记位;xmit_bit是发送结束标记位;sout是串行输出;dataout是并行输出;rcv_bit 是吸取位数寄存器。发送吸取模块重要完成把从sin端口吸取的串行数据变为并行数据送给dataout;把并行数据datain变成串行数据通过sout端口串行发送。
吸取:果断吸取的串行数据sin是否是连续的两个0,要是是则进入吸取进程;每两个时钟周期吸取1个比特的数据,依次吸取到01101010,要是吸取到克制位表明这个吸取进程结束read_bit=1。根据串行通讯协议,数据是根据先低位,后高位的次序发送的,以是实际吸取的是01010110。发送:待发送的并行数据为01010110,当start_xmit=1发送有效,进入发送进程;起首发送两个肇始位0,包管长度为两个时钟周期,然后依次发送01101010,每两个时钟周期发送1比特,末了发送克制位,发送进程结束xmit_bit为1。
发送控制字
图5中clk是时钟信号;a是PC发来的16进制的控制字,也便是图4中的并行输出dataout; ma1cnt、ma2cnt、ma3cnt是三个寄存器;clrr是体系清零信号;ddsclr是DDS配置信号;fifo_clk,fifo_rd,fifo_wr,ram_rst是FIFO的时钟、读、写、清零信号;start_xmit是发送开始标记位;b是准备发送的数据。当吸取a为1时,fifo_wr置1;当a为18时,把ma1cnt的值送到b。其他的操纵雷同,重要是端口的置位,FIFO读写状态的控制。
从FIFO中读写数据
图6中SER_CLOCK是体系时钟3.6864MHz,sa是分频后的频率57600bit/s;SIN是串行输入;data是准备输出的数据;SOUT是串行输出;fifoclk、fifowr、fiford是FIFO的读时钟、写、读使能。读进程:读使能有效,先孕育产生6个读时钟,但是不往SOUT发送数据,由于FIFO的前6个周期不是有效数据。然后孕育产生一个读时钟,将FIFO的数据送到data,根据通讯协议通过SOUT发送出去,发送结束再孕育产生一个读时钟,读取FIFO的数据,举行下一次串行输出。
结语
随着可编程器件的不绝生长和遍及应用,FPGA与外围配置的通讯也越来越多。本文先容的串行通讯的实现具有可复制性,只需变化体系时钟频率和控制模块就可以在其他场合下利用。
参考文献
1 褚振勇,瓮木云着.《FPGA的计划与应用》.西安电子科技大学出版社,2002.7
2 Uwe Meyer-Baese着.刘凌,胡永生译.《数字信号处理惩罚的FPGA实现》.清华大学出版社,2003.1
3 朱明程编. FPGA原理及应用计划.电子产业出版社,2001.10
4 侯伯亭,顾新编.VHDL硬件形貌语言及数字逻辑电路计划.西安电子科技大学出版社