ETC中FM0解码器的设计
电子不停车收费系统(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源代码如下: