ETC中FM0解码器的设计
扫描二维码
随时随地手机看文章
摘要:FM0编码以其便于位同步提取、频谱带宽较窄、实现电路简单而在ETC中得到广泛的应用,线路FM0解码模块是ETC系统基带电路重要组成部分,本文基于ETC系统中车载单元(On board unit,OBU)与路边单元(Road sideunit,RSU)之间的短距离双向通信,以提高FM0解码速度的目的,根据FM0鳊码原则,在FPGA软件环境下用高级硬件描述语言VHDL实现FM0解码器设计,给出程序代码,在Quartus II环境下仿真,并通过逻辑分析仪观察波形。同等功能下,解码时间是图形输入法的五分之一。
关键词:FM0;短距离通信;VHDL;FPGA;数据解码
电子不停车收费系统(ETC)兴起于80年代,主要适用于道路、大桥和隧道收费站,由于过往车辆通过收费站时无须停车便能够实现自动收费,大大改善了目前普遍存在的路桥收费站停车收费造成交通堵塞的恶劣状况,受到各国政府和企业的广泛重视,许多世界著名的电子公司竞相开始研制,先后在北美、欧洲、日本、澳洲、新加坡等地广泛应用,已经成为智能交通的一大支柱产业。我国的ETC系统起步在上世纪90年代,主要靠引进国外的先进技术,虽然也取得了积极的效果,但由于起步晚,国内公路ETC工作仍处于试验和探索阶段。
整个ETC系统主要由车载单元(On board unit,OBU)与路边单元(Road side unit,RSU)组成,OBU与RSU之间的短距离双向通信属于专用短程通信(DSRC-Dedicated Short Range Communications)协议规范的范畴,该协议中的物理层可配置为A和B两个可选配置,其中配置A的上下行链路都定义为FM0,主要用于基本的ETC应用。线路FM0解码模块是ETC系统基带电路重要组成部分,这使得对FM0解码器的研究和优化提上日程。
本文介绍了在FPGA软件环境下用高级硬件描述语言VHDL实现FM0解码器设计,最终实现ETC系统中OBU和RSU中的FM0解码模块的逻辑功能。
1 FM0码介绍
FM0编码(即Bi-Phase Space)即为双相间隔码编码,编码规则是在每个码元的开始、结束以及‘0’码元正中间时刻发生跳变,其余时刻不变化。FM0编码以其便于位同步提取、频谱带宽较窄、实现电路简单而在短距离通信中得到了广泛的应用。编码的示意图如图1所示。
图1示出了代码序列为10110001时,FM0码的波形。图1(a)是源代码序列,图1(b)是FM0码的波形。比较图1(a)和图1(b)两个波形可以看出,FM0码实际上只要用一个与原始信号同步的时钟信号的跳变沿(上升沿或下降沿)以及‘0’码元对应的跳变沿(上升沿或下降沿)触发翻转,即可完成数据编码。
2 FM0解码器的实现方案选择
FM0解码器的实现方法主要可分为以下3种:第一种是使用专用集成芯片;第二种是软件编程实现,包括PC机和单片机;第三种是使用可编程逻辑器件实现,主要使用FPGA器件。目前市面上常用的FM0码的解码芯片比较少,例如STR715芯片,并且专业芯片的使用存在一定限制。软件编程方法尽管具有硬件结构简单、功能灵活等特点,但程序运行占用处理器资源多,执行速度慢,对信号的延时和同步性不易预测,只适用于低速信号处理。使用FPGA器件实现FM0解码,能够有效综合前两种方法的优点,因为FPGA采用硬件处理技术,可反复编程,能够兼顾速度和灵活性,并能并行处理多路信号,实时性能够预测和仿真。由于解码的算法多为逻辑运算和时序运算,采用灵活性极大的可编程逻辑器件FPGA完成FM0编解码更适合。
作为ALTERA公司第四代可编程逻辑器件开发软件,QuartusⅡ在设计流程的每个阶段都提供了图形模式和命令行模式等极为便利的输入手段,具有快速的编译和直接易懂的器件编程功能、对众多种芯片的支持和百万门级的设计能力。QuartusⅡ为FPGA设计者提供了原理图输入、HDL输入、图形设计输入、内存编辑输入等输入方法。
目前,原理图输入法已用于FM0编解码器设计,尽管方式直观、简单易行,但对设计者的硬件水平要求高,编解码时间较长。
硬件描述语言VHDL[10]就是用语言描述替代图形化(元件拼凑)设计,简化了设计工作,节约了开发的时间,大大缩短编码时间,对于设计者的硬件水平要求不高,比FPGA设计中较直观的原理图输入法更具优势,更具推广价值。
3 FM0解码器的设计
本文以RSU中的BST信号作为输入信号,进行FM0解码设计,该信号的传输速率为256 kB/s。由FM0编码规则可反推之,如果在一个码元时间内解码数据连续跳变两次,则为‘0’电平,否则为‘1’电平。本文采用带有复位端口的同步计数器原理产生同步时钟信号,因此采用16倍速率的时钟信号。
如图2所示,解码原理分为同步时钟信号产生和在一个码元时间解码数据连续两次跳变检测两部分。
3.1 同步时钟信号产生
用16倍数据速率的时钟信号对输入信号RDIN采样得到data_temp1信号,将采样信号data_temp1延迟一个16倍时钟周期(0.5μs)得到data_temp2信号,data_temp1与data_temp2相异或得到data_temp3信号,如果信号跳变data_temp3为‘1’,否则为‘0’,得到RDIN跳变时的脉冲clr信号,当clr=‘1’时,清0,当clr=‘0’时,对输入时钟信号clk_in进行2、4、8和16分频,分别产生同步时钟信号Q0(2 048 kB/s)、Q1(1 024 kB/s)、Q2(512 kB/s)、Q3(256 kB/s)。
16分频后得到的Q3(256 kB/s)时钟信号不能直接作为解码输出的同步信号,clr信号在输入信号跳变时产生脉冲,尽管输入信号RDIN与Q3速率相同,而clr信号发生在Q3高电平或低电平处,使Q3受到影响,输出的不是完整的256 kB/s时钟信号。因此为了得到完整的16分频时钟信号,需将8分频时钟信号再次2分频得到时钟信号CLKO。
VHDL源代码如下:
3.2 在一个码元时间解码数据连续两次跳变检测
用4分频信号Q1对data_temp1信号采样得到data_temp4信号,将采样信号data_temp4延迟一个输入信号RDIN的四分之一码元周期得到data_temp5信号,data_temp4与data_temp5相同或得到data_temp6信号。用时钟信号CLKO的上升和下降沿同时检测data_temp6信号,求或。如果求或结果为‘1’则表示时钟的上升和下降沿有一次得到‘1’电平,即在半个码元的时间间隔内解码数据没有跳变,根据FM0编码规则此时数据应该是‘1’电平,解码输出DEOUT输出为‘1’电平;否则,如果求或结果为‘0’则表示时钟的上升和下降沿均得到‘0’电平,即在半个码元的时间间隔内解码数据有跳变,根据FM0编码规则,此时数据应该是‘0’电平,解码输出DEOUT输出为‘0’电平。
VHDL源代码如下:
4 结果仿真
将设计好的FM0解码程序进行封装,封装图如图3所示。
以BST信号为例,解码数据输入端RDIN输入BST信号,在解码时钟输入端clk_in输入16倍数据速率时钟信号(4 096 kB/s)。在QuartusⅡ软件支持下完成逻辑综合,将编程数据写入选定的FPGA芯片进行测试,可通过逻辑分析仪看到波形。
图4依次给出了RDIN、clk_in、clr、data_temp1、data_temp4、data_temp5、data_temp6、Q1、Q2、Q3、CLKO和DEOUT的仿真波形。从仿真结果来看,解码模块很好地完成了任务,可测得整个解码过程仅用了8 μs。
同样的解码过程用现有的图形输入法完成需要40μs,而用VHDL语言编写只需8 μs,解码时间是图形输入法的五分之一。
5 结束语
采用高级硬件描述语言VHDL在FPGA上实现FM0解码设计,为电子系统的设计带来了极大地灵活性。将复杂的硬件设计过程转化为在特定的软件平台上通过软件设计来完成,从而使设计工作简化,大大节约了开发时间,并大幅度缩短FM0解码时间。
随着ETC系统的日益普及,对FM0解码设计的需求也大幅提高,因此采用较合适的方法设计出高性能的FM0解码器是十分有意义的。