基于FPGA的IRIG—B码发生器的设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于FPGA的IRIG—B码发生器的设计
本文主要讲述了在FPGA芯片上设计了一个IRIG-B码的编码和解码电路。

首先提出了IRIG-B码编码和解码的逻辑方案,然后选取健壮且严谨的VHDL 语言进行了具体电路的设计。

标签:IRIG-B码;FPGA;VHDL语言;电子设计
IRIG-B码的解码设计
本文是通过对一毫秒周期码元进行赋值进行编码的,本文的IRIG-B码的解码也同样是主要是通过逐个扫描地读取一毫秒周期码元的高低电平来读取和识别IRIG-B码。

1 单位码元的读取和识别
在本文观察单位码元的结构发现,P码、1码和0码的一毫秒码元一开始都是高电平,之后都是低电平。

因此在本文读取每一个一毫秒周期码元时,当读取到低电平时就意味着已经读取了一个单位码元。

在本文读取单位码元之后,需要对单位码元进行识别。

已经知道P码、1码和0码的码元区别在于高电平的一毫秒周期码元的数量,因此只需要本文知道了单位码元中的一毫秒周期码元的高电平的数量就识别出单位码元。

为了识别单位码元,在这里设计了一个计数器pulse_width用于记录一毫秒周期码元的高电平的数量。

本文是根据高电平的数量来识别单位码元,这样就转化为计数器pulse_width的计数,这样只需对pulse_width的数量进行判断,就可以识别出单位码元。

这里運用了一个case的条件语句,根据P、1、0码的不同pulse_width的判別区间进行分支结构,在不同的pulse_width的判别区间之中进行不同的赋值语句,分别将P码、0码、1码赋值存到逻辑变量bit_value中,逻辑变量bit_value 是设计用来存储读取的单位码元信息的。

在读取到低电平的一毫秒周期码元后,将判别出的单位码元赋值到一个逻辑变量中进行存储。

以上就是最直接的解码的原理,这只是程序设计的一部分,它的外层还需要包裹一层对IRIG-B码的码元结构的解码设计。

2 解码的流程控制
IRIG-B码的码型结构是一个B码对应10组以10个单位码元为一组的码组,
一个码组对应10个单位码元,一个单位码元又对应10个一毫秒周期码元。

解码的流程是从下到上,因此在码元解码的流程是从最底层的一毫秒周期码元开始,再到单位码元、再对应到码组、最后是一个完整的IRIG-B码。

在第一层的流程控制中,设计了一个tempt计数器,取值区间是0到9,用于记录一毫秒周期码元的读取个数。

每当读取了一个一毫秒周期码元后,采用if 语句进行分条件处理,当tempt的值为9时,则赋值为0就重新计数,并向下一层的计数器加1;否则的话,tempt自身加1。

在第二层的流程控制中,同样设计了一个i计数器,取值空间是0到99,总体控制整个IRIG-B码结构,并且也是IRIG-B码中的100个单位码元的位置识别数字标号。

该层解码流程控制是嵌套在第一层流程控制中的当tempt的值为9时的if语句中的,同样使用条件判断语句if,判断的条件为i是否等于99,若相等则i赋值为0并且重新开始计数;否则,i自身加1。

之前,本文知道每读取了10个一毫秒周期码元,就向下一层流程控制i计数器加1,这意味着读取了1个单位码元。

当i等于99时就意味着读取了100个单位码元,这就也就表明了一个完整的IRIG-B码已经被完全读取了。

3 解码中的时间信息读取
对于时间信息的读取,就是从前面读取的码元存储在逻辑变量bit_value中将时间码元读取出来,便完成了完整的解码的流程。

在逻辑变量bit_value中,根据计数器i从0到99依次按i编号按顺序存储了读取的单位码元,所以里面包含了整个IRIG-B码的信息。

逻辑变量bit_value的数据类型是std_logic_vector,定义的是长度为100的变量,确定的赋值方向(99 down to 0)。

本文可以根据已知的IRIG-B码的码元结构,就可以知道时间码元的在100个码元中所占的位置的具体标号,再根据相应位置的时间码元找到对应的计数器i的数字编号,再通过这个i的数字编号就从中逻辑变量bit_value中提取出相关的时间信息。

4 IRIG-B码的解码流程和算法
IRIG-B码的解码流程在上一节已经讲了,在解码时都是依据1khz的时钟上升沿为触发,为一种触发扫描式的解码模式,其中不是一种循环的结构,而是单向的条件判断的结构,具体的流程如下:
解码实现的具体流程为:
流程一:首先是,有一个经过编写的IRIG-B码的时间信息输入,输入后先便根据每一毫米周期的码元高低电平进行判断;
若输入的电平为高电平,则计数器pulse_width加1;
若输入的电平为低电平,则计数器pulse_width设置为0,并转入下一个流
程;
流程一中的判断主要发挥了两个作用,一个是对计数器pulse_width进行计数,这是为了记录高电平的数量,之后地码元的判别就根据它的数量;其次是通过对低电平的读取,来判别一个单位码元的读取。

流程二:在判断了每一毫米周期的码元为低电平之后,便开始判断单位码元的计数判断器temp:
若计数器temp的数量小于9,则计数器temp加1;
若计数器temp的数量等于9,则设置计数器temp为0,并转入下一个流程;
在该流程中,计数器temp的作用同样是有两个,一是代表这对单位码元的读取,当满10个时就表示有了10个一毫秒周期码元组成了一个单位码元,一个单位码元完成读取,同时将读取的数据存储到逻辑向量中;二是向下一个阶段传递加1的数值,为单位码元的数量进行计数。

流程三:在计数器temp等于9之后,便开始判断整个IRIG-B码的计数判断器:
若i不等于99,则计数器i加1;
若i等于99,则计数器i复位设置为0;
在该流程中,计数器i是单位码元的计数器,存储的是单位码元的数量,当i满足等于99的条件时,就意味着读取了100个单位码元也就是一个完整的IRIG-B码的读取,之后便从IRIG-B码中读取到的完整的时间信息输出到指定的端口中,将读取到的时间信息输入到外部电路中。

参考文献
[1]吴炜,周烨,黄子强. FPGA实现IRIG-B(DC)码编码和解码的设计[J]. 电子设计工程,2010,18(12):162-164.
[2]陈利. 基于FPGA的IRIG-B码基带产生电路的设计与实现[D]. 苏州大学,2014.
[3]张艳. 基于FPGA的IRIG-B DC码解码器的设计[J]. 火控雷达技术,2013,42(1):70-73.。

相关文档
最新文档