CN107967231A - 一种Spi模拟多路全双工串口的系统 - Google Patents
一种Spi模拟多路全双工串口的系统 Download PDFInfo
- Publication number
- CN107967231A CN107967231A CN201711284966.2A CN201711284966A CN107967231A CN 107967231 A CN107967231 A CN 107967231A CN 201711284966 A CN201711284966 A CN 201711284966A CN 107967231 A CN107967231 A CN 107967231A
- Authority
- CN
- China
- Prior art keywords
- fifo
- spi
- host computer
- fpga
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4282—Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Communication Control (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明提供了一种Spi模拟多路全双工串口的系统,包括FPGA/CPLD平台,FPGA/CPLD平台集成SPI接口、波特率时钟模块、FIFO缓存模块以及RX/TX状态机,上位机通过Spi协议定义的接口连接FPGA/CPLD芯片,FIFO缓存模块连接RX/TX状态机,FIFO缓存模块包括发FIFO模块和收FIFO模块。本发明基于时序控制的FPGA/CPLD平台,利用分时复用的方式,实现了高速Spi对慢速串口的接口模拟,能够灵活的满足上位机对外部全双工串口数量的要求;采用基于时序逻辑的FPGA/CPLD平台,对于通信时钟系统控制准确,灵活的对外部信号进行解析,提高了对信号较差时的适应能力。
Description
技术领域
本发明属于高速接口Spi对多路低速接口串口的模拟扩展领域,尤其是涉及一种Spi模拟多路全双工串口的系统。
背景技术
串口是一种常用的异步通信接口,有时上位机需要与外部通信的设备很多,而IO数量又很有限,无法同时接入多路串口,这时就需要用其它方式解决多路串口的通信问题。
发明内容
有鉴于此,本发明旨在提出一种Spi模拟多路全双工串口的系统,利用平台的精准时序控制保证数据通信极低的误码率,同时满足了上位机对多路全双工串口的要求。
为达到上述目的,本发明的技术方案是这样实现的:
一种Spi模拟多路全双工串口的系统,包括FPGA/CPLD平台,所述FPGA/CPLD平台集成SPI接口、波特率时钟模块、FIFO缓存模块以及RX/TX状态机,上位机通过Spi协议定义的接口连接FPGA/CPLD芯片,所述FIFO缓存模块连接RX/TX状态机,所述FIFO缓存模块包括发FIFO模块和收FIFO模块;
发送串口数据时,上位机将需要发送的数据经过Spi接口发送到发FIFO进行缓存,然后输出给TX状态机,再以串口协议的方式发送出去,完成上位机模拟串口数据发送的过程;
接收串口数据时,RX状态机模块接收外部设备通过串口发送来的数据,输出到接收FIFO缓存模块,然后经过Spi接口模块将数据从接收FIFO模块送至上位机,完成上位机对外部串口数据的接收过程;
波特率时钟模块用于为FIFO模块与RX/TX状态机提供工作时钟。
进一步的,所述波特率时钟模块设计方法如下:
(1)输入本地高速时钟clk;
(2)建立多个低位宽计数器cnt1、cnt2、cnt3;
(3)计算并输出波特率时钟clk_out;
计算如下
先建立一个4bit宽的计数器cnt,然后根据计数器cnt的状态决定输出时钟clk_out的输出电平高低变化,完成了对clk_out时钟的设计。
进一步的,所述FIFO缓存模块设计方法如下:
(1)利用FPGA芯片的ip核创建1024深16bit宽大小的接收FIFO,用于缓存RX模块接收外部传来的串口数据;
(2)利用FPGA芯片的ip核创建1024深16bit宽大小的发送FITO,用于缓存上位机通过Spi模块传过来的需要发送的串口数据;
(3)利用FIFO ip核自带的empty、full状态信号作为与上位机通信的中断信号,当收FIFO的empty=0时,上位机通过Spi读取收FIFO中的数据,直至读空FIFO,当发送FIFO的full=0时,上位机才向发FIFO发送串口数据。。
进一步的,所述TX/RX模块采用的时钟为波特率时钟的16倍,每个bit采用16个clk进行接收和发送。
相对于现有技术,本发明所述的一种Spi模拟多路全双工串口的系统具有以下优势:
(1)本发明基于时序控制的FPGA/CPLD平台,利用分时复用的方式,实现了高速Spi对慢速串口的接口模拟,能够灵活的满足上位机对外部全双工串口数量的要求;
(2)采用基于时序逻辑的FPGA/CPLD平台,对于通信时钟系统控制准确,灵活的对外部信号进行解析,提高了对信号较差时的适应能力,误码率极低;
(3)FPGA/CPLD平台自带PLL时钟锁相环资源,可以利用外部时钟进行时钟的倍频与分频管理,很大程度上满足了多波特率的串口设计要求;
(4)在FPGA/CPLD平台内利用高速的本地时钟,与内部FIFO资源,能够同时应对多路慢速接口的数据缓存、读写,保证了模拟出的接口拥有极低的模拟延迟。
附图说明
构成本发明的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为本发明实施例所述的一种Spi模拟多路全双工串口的系统示意图;
图2为本发明实施例所述的状态机工作示意图。
具体实施方式
需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
在本发明的描述中,需要理解的是,术语“中心”、“纵向”、“横向”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”等的特征可以明示或者隐含地包括一个或者更多个该特征。在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。
在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以通过具体情况理解上述术语在本发明中的具体含义。
下面将参考附图并结合实施例来详细说明本发明。
如图1-2所示,本发明提供了一种基于FPGA/CPLD平台的Spi模拟多路全双工串口的系统,共有以下模块组成:
(1)与上位机的Spi通信协议确定;
(2)基于FPGA/CPLD平台的波特率时钟模块;
(3)基于FPGA/CPLD平台的FIFO缓存模块;
(4)基于FPGA/CPLD平台的RX/TX状态机;
上位机通过Spi协议定义的接口与FPGA芯片内所有模块进行数据通信,以控制整体系统的运行。发送串口数据时,上位机将需要发送的数据经过Spi接口发送到发FIFO进行缓存,然后输出给TX状态机模块,再以串口协议的方式发送出去,完成上位机模拟串口数据发送的过程。接收串口数据时,RX状态机模块接收外部设备通过串口发送来的数据,输出到接收FIFO缓存模块,然后经过Spi接口模块将数据从接收FIFO模块送至上位机,完成上位机对外部串口数据的接收过程。其中,收发FIFO模块与RX/TX状态机模块的工作时钟均由波特率时钟模块提供。
1)与上位机的Spi通信协议确定:Spi接口操作简单且速率高,能够在极短的时间内完成多路全双工串口的收发,保证了收发效率。
协议由命令CMD与数据DATA组成,命令CMD包含串口配置,如串口开关、串口波特率、串口数据宽度、停止位个数等,以及对FPGA/CPLD平台内部FIFO模块的控制指令,如FIFO复位。
Spi接口协议较为灵活,设计者可以根据自我需求进行定义。为了保证通信效率,建议充分利用每一bit。
2)基于FPGA/CPLD平台的波特率时钟模块设计:FPGA/CPLD芯片内部一般都内嵌了锁相环电路(PLL),能够利用本地CLK产生多个波特率时钟。但平台内部资源有限(尤其PLL资源更为珍贵,用于模拟串口功能的片子在PLL资源上比较有限),利用平台搭建分频器逻辑电路完成对多种波特率的时钟控制电路。同时根据波特率的要求选择合适的本地时钟,这样保证分频电路产生的时钟能够符合串口波特率要求。
时钟模块设计如下:
(1)输入本地高速时钟clk(如30Mhz)
(2)建立多个低位宽计数器cnt1、cnt2、cnt3(当然也可以用1个高位宽计数器实现,但这样资源消耗会大一些)
(3)计算并输出波特率时钟clk_out(本模块输出的时钟为实际波特率的16倍,用于RX/TX模块对异步传输数据采样的时钟)
计算如下(用波特率=115200举例,用verlog代码实现)
上述代码先建立了一个4bit宽的计数器cnt,然后根据计数器cnt的状态决定输出时钟clk_out的输出电平高低变化,完成了对clk_out时钟的设计。实现了由30Mhz时钟clk转为波特率115200的16倍时钟clk_out(实际为1875000Hz,与115200*16=1843200Hz相差1.7%,误差率可以接受。类似地,其它的波特率可以用多个计数器的组合进行实现,这里不再赘述。)最后根据输入的波特率模式选择不同的波特率输出。
分频时钟偏差(百分比%)计算:
如本地时钟CLK1=30Mhz,波特率BaudRate=115200:
A1=(CLK1/16/BaudRate);
B1=floor(A1);
Clk_Diff_Ratio1=(1–B1/A1)*100%=1.73%
本地时钟CLK2=37.125Mhz,波特率BaudRate=115200:
A2=(CLK2/16/BaudRate);
B2=floor(A2);
Clk_Diff_Ratio2=(1–B2/A2)*100%=0.7%
比对可知:使用分频方法,本地时钟37.125Mhz比30Mhz要更加符合要求(当然30Mhz也是可以的,只是37.125Mhz会更好)。
3)基于FPGA/CPLD平台的FIFO缓存模块:(FIFO缓存是分时复用的基础)
缓存模块设计:
(1)利用FPGA芯片的ip核创建1024深16bit宽大小的接收FIFO,用于缓存RX模块接收外部传来的串口数据。
(2)利用FPGA芯片的ip核创建1024深16bit宽大小的发送FITO,用于缓存上位机通过Spi模块传过来的需要发送的串口数据。
(3)FIFO中断机制:利用FIFO ip核自带的empty、full状态信号作为与上位机通信的中断信号。当收FIFO的empty=0时,上位机通过Spi读取收FIFO中的数据,直至读空FIFO(即empty=1)。当发送FIFO的full=0时,上位机才向发FIFO发送串口数据。中断机制保证了收、发FIFO的数据正常读写,防止了数据覆盖、丢失的情况。
收FIFO:多路的外部串口可能会在同一时间发送数据,FPGA/CPLD平台利用快速的本地时钟CLK分时采样外部多路接收数据端口,将数据存入FPGA/CPLD的FIFO缓存空间内,根据FIFO空间是否为空向上位机发送Spi的中断指令,上位机根据中断发送Spi读FIFO命令,将FIFO缓存空间读空,完成多路串口的数据接收工作。
发FIFO:上位机通过Spi将需要发送到某个串口的数据发给FPGA/CPLD,FPGA/CPLD将数据写入芯片FIFO内,用本地时钟CLK依次地将FIFO内的数据读出,分别送到对应的串口发送模块发送出去,完成串口的发送工作。
FIFO ip核是较为常见的FPGA芯片内部资源,缓存的深度和宽度选择是至关重要的。在芯片内部资源有限的情况下,合理的深度与位宽设计,能够最大程度发挥芯片资源,能够实现更多的串口设计。
本申请的FIFO的数据位宽设计为16bit,深度为1024,数据采用编码方式存储(如数据(16bit)=串口通道号(8bit)+串口数据(8bit))。
2、RX/TX时,写入FIFO的16bit数据是经过编码的,高8bit对应着串口编号,这样就可以利用一个大FIFO完成多路的串口收发数据的缓存,节省了FPGA/CPLD的平台资源。
4)基于FPGA/CPLD平台的RX/TX状态机设计:
TX/RX模块采用的时钟为波特率时钟的16倍(之所以用16倍时钟是因为在FPGA平台内,进行2的幂次运算与逻辑,在代码实现上更为简单,同时消耗的逻辑资源也更少),每个bit采用16个clk进行接收和发送。(对于串口这种异步传输模式,建议采用高速时钟进行采样)。
本申请利用高数据位宽与深度的FIFO同时缓存多个接口数据,解决了芯片在资源问题上的困扰。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (4)
1.一种Spi模拟多路全双工串口的系统,其特征在于:包括FPGA/CPLD平台,所述FPGA/CPLD平台集成SPI接口、波特率时钟模块、FIFO缓存模块以及RX/TX状态机,上位机通过Spi协议定义的接口连接FPGA/CPLD芯片,所述FIFO缓存模块连接RX/TX状态机,所述FIFO缓存模块包括发FIFO模块和收FIFO模块;
发送串口数据时,上位机将需要发送的数据经过Spi接口发送到发FIFO进行缓存,然后输出给TX状态机,再以串口协议的方式发送出去,完成上位机模拟串口数据发送的过程;
接收串口数据时,RX状态机模块接收外部设备通过串口发送来的数据,输出到接收FIFO缓存模块,然后经过Spi接口模块将数据从接收FIFO模块送至上位机,完成上位机对外部串口数据的接收过程;
波特率时钟模块用于为FIFO模块与RX/TX状态机提供工作时钟。
2.根据权利要求1所述的一种Spi模拟多路全双工串口的系统,其特征在于:所述波特率时钟模块设计方法如下:
(1)输入本地高速时钟clk;
(2)建立多个低位宽计数器cnt1、cnt2、cnt3;
(3)计算并输出波特率时钟clk_out;
计算如下
先建立一个4bit宽的计数器cnt,然后根据计数器cnt的状态决定输出时钟clk_out的输出电平高低变化,完成了对clk_out时钟的设计。
3.根据权利要求1所述的一种Spi模拟多路全双工串口的系统,其特征在于:所述FIFO缓存模块设计方法如下:
(1)利用FPGA芯片的ip核创建1024深16bit宽大小的接收FIFO,用于缓存RX模块接收外部传来的串口数据;
(2)利用FPGA芯片的ip核创建1024深16bit宽大小的发送FITO,用于缓存上位机通过Spi模块传过来的需要发送的串口数据;
(3)利用FIFO ip核自带的empty、full状态信号作为与上位机通信的中断信号,当收FIFO的empty=0时,上位机通过Spi读取收FIFO中的数据,直至读空FIFO,当发送FIFO的full=0时,上位机才向发FIFO发送串口数据。。
4.根据权利要求1所述的一种Spi模拟多路全双工串口的系统,其特征在于:所述TX/RX模块采用的时钟为波特率时钟的16倍,每个bit采用16个clk进行接收和发送。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711284966.2A CN107967231A (zh) | 2017-12-07 | 2017-12-07 | 一种Spi模拟多路全双工串口的系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711284966.2A CN107967231A (zh) | 2017-12-07 | 2017-12-07 | 一种Spi模拟多路全双工串口的系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107967231A true CN107967231A (zh) | 2018-04-27 |
Family
ID=61999513
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711284966.2A Pending CN107967231A (zh) | 2017-12-07 | 2017-12-07 | 一种Spi模拟多路全双工串口的系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107967231A (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109435338A (zh) * | 2018-12-24 | 2019-03-08 | 天津天地伟业机器人技术有限公司 | 一种承重较大的可折叠瓦楞纸内衬 |
CN109614350A (zh) * | 2018-10-29 | 2019-04-12 | 中国航空工业集团公司洛阳电光设备研究所 | 一种用于处理器间双口ram通信的中断系统 |
CN109814528A (zh) * | 2019-01-16 | 2019-05-28 | 浙江众合科技股份有限公司 | 一种列车信号系统中单板在位实时监测装置 |
CN109828943A (zh) * | 2019-01-16 | 2019-05-31 | 北京左江科技股份有限公司 | 一种低速率通信网络的提高串口传输速率处理系统及方法 |
CN109933293A (zh) * | 2019-03-25 | 2019-06-25 | 深圳忆联信息系统有限公司 | 基于SpiFlash的数据写入方法、装置和计算机设备 |
CN111181690A (zh) * | 2019-12-26 | 2020-05-19 | 山西银河电子设备厂 | 一种多信道通信及接口动态切换方法 |
CN115248998A (zh) * | 2022-09-22 | 2022-10-28 | 济南新语软件科技有限公司 | 一种SoC芯片分布式仿真验证平台和方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN202870808U (zh) * | 2012-07-04 | 2013-04-10 | 四川九洲电器集团有限责任公司 | 一种spi串口模块的fpga实现装置 |
CN103268248A (zh) * | 2012-10-17 | 2013-08-28 | 厦门雅迅网络股份有限公司 | Arm平台linux系统下模拟多路全双工串口的方法 |
CN106445853A (zh) * | 2016-08-30 | 2017-02-22 | 天津天地伟业数码科技有限公司 | 基于fpga的spi接口与uart接口的转换方法 |
-
2017
- 2017-12-07 CN CN201711284966.2A patent/CN107967231A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN202870808U (zh) * | 2012-07-04 | 2013-04-10 | 四川九洲电器集团有限责任公司 | 一种spi串口模块的fpga实现装置 |
CN103268248A (zh) * | 2012-10-17 | 2013-08-28 | 厦门雅迅网络股份有限公司 | Arm平台linux系统下模拟多路全双工串口的方法 |
CN106445853A (zh) * | 2016-08-30 | 2017-02-22 | 天津天地伟业数码科技有限公司 | 基于fpga的spi接口与uart接口的转换方法 |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109614350A (zh) * | 2018-10-29 | 2019-04-12 | 中国航空工业集团公司洛阳电光设备研究所 | 一种用于处理器间双口ram通信的中断系统 |
CN109614350B (zh) * | 2018-10-29 | 2022-03-15 | 中国航空工业集团公司洛阳电光设备研究所 | 一种用于处理器间双口ram通信的中断系统 |
CN109435338A (zh) * | 2018-12-24 | 2019-03-08 | 天津天地伟业机器人技术有限公司 | 一种承重较大的可折叠瓦楞纸内衬 |
CN109435338B (zh) * | 2018-12-24 | 2023-10-31 | 天地伟业技术有限公司 | 一种承重较大的可折叠瓦楞纸内衬 |
CN109814528A (zh) * | 2019-01-16 | 2019-05-28 | 浙江众合科技股份有限公司 | 一种列车信号系统中单板在位实时监测装置 |
CN109828943A (zh) * | 2019-01-16 | 2019-05-31 | 北京左江科技股份有限公司 | 一种低速率通信网络的提高串口传输速率处理系统及方法 |
CN109933293A (zh) * | 2019-03-25 | 2019-06-25 | 深圳忆联信息系统有限公司 | 基于SpiFlash的数据写入方法、装置和计算机设备 |
CN109933293B (zh) * | 2019-03-25 | 2022-06-07 | 深圳忆联信息系统有限公司 | 基于SpiFlash的数据写入方法、装置和计算机设备 |
CN111181690A (zh) * | 2019-12-26 | 2020-05-19 | 山西银河电子设备厂 | 一种多信道通信及接口动态切换方法 |
CN115248998A (zh) * | 2022-09-22 | 2022-10-28 | 济南新语软件科技有限公司 | 一种SoC芯片分布式仿真验证平台和方法 |
CN115248998B (zh) * | 2022-09-22 | 2023-01-03 | 济南新语软件科技有限公司 | 一种SoC芯片分布式仿真验证平台和方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107967231A (zh) | 一种Spi模拟多路全双工串口的系统 | |
US9979432B2 (en) | Programmable distributed data processing in a serial link | |
US8352774B2 (en) | Inter-clock domain data transfer FIFO circuit | |
US9736276B2 (en) | Packetized interface for coupling agents | |
CN103116175B (zh) | 基于dsp和fpga的嵌入式导航信息处理器 | |
CN101571842B (zh) | 一种用于arinc429通讯的pci板卡装置 | |
CN110289859A (zh) | 基于多片adc的并行时间交替高速采样系统 | |
CN101599004B (zh) | 基于fpga的sata控制器 | |
EP3411956A1 (en) | Programmable distributed data processing in a serial link | |
US11657016B2 (en) | Distributed multi-die protocol application interface | |
CN104866453A (zh) | 系统芯片、总线接口连接电路和其总线接口连接方法 | |
CN107451087A (zh) | 一种基于fpga的异同步可切换串口及使用方法 | |
CN106933772A (zh) | 基于uart ip核的sci通讯方法 | |
CN207895438U (zh) | 一种fpga与dsp多核异构加速计算板卡 | |
US11669486B2 (en) | Initialization sequencing of chiplet I/O channels within a chiplet system | |
CN103036685A (zh) | 基于dp83849c的afdx接口转换器 | |
CN103106169A (zh) | 基于aurora协议的高速总线接口的扩展架构 | |
CN108628784A (zh) | 串行通信器及串行通信系统 | |
CN104156333A (zh) | 一种基于fpga的uart多接口扩展系统和方法 | |
CN107908587A (zh) | 基于usb3.0的实时数据采集传输装置 | |
CN104657297B (zh) | 计算设备扩展系统及扩展方法 | |
CN105786741A (zh) | 一种soc高速低功耗总线及转换方法 | |
CN109491940A (zh) | 一种tlk2711传输接口与usb3.0传输接口的转换电路及转换方法 | |
CN111190853A (zh) | 基于emif和srio接口的片间高速通信系统 | |
CN209312015U (zh) | 一种tlk2711传输接口与usb3.0传输接口的转换电路 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20180427 |
|
RJ01 | Rejection of invention patent application after publication |