在油田测井中,井下仪在井下采集大量信息,并传送给地面测井系统;但井下仪到地面这段信道的传输性能并不好,常用的NRZ码不适合在这样的信道里传输,而且NRZ码含有丰富的直流分量,容易引起滚筒的磁化,因而选用了另外一种编码 ——曼彻斯特码。曼彻斯特编码是串行数据传输的一种重要的编码方式。和最常用的NRZ码相比,曼彻斯特码具有很多优点。例如,消除了NRZ码的直流成分,具有时钟恢复和更好的抗干扰性能,这使它更适合于信道传输。<p> 但曼彻斯特码的时序比较复杂,实现编解码器和单片机的接口需要添加大量的逻辑电路,给电路设计和调试带来很多困难。使用CPLD可大大简化这一过程。CPLD(Complex Programmable Logic Devices)具有用户可编程、时序可预测、速度高和容易使用等优点,这几年得到了飞速发展和广泛应用。上至高性能CPU,下至简单的74电路,都可以用CPLD来实现。而且CPLD的可编程性,使修改和产品升级变得十分方便。用户可以根据原理图或硬件描述语言自由地设计一个数字系统,然后通过软件仿真,事先验证设计的正确性。PCB完成以后,还可以利用PLD的在线修改能力,随时修改设计而不必改动硬件电路,从而大大缩短了设计和调试时间,减少了PCB面积,提高了系统的可靠性。</p><p><b> 1 选用器件和开发软件</b></p><p>1.1 选用器件</p><p> (1)<a href="http://www.chinaicmart.com/series-XC9/XC95144.html" target="_blank">XC95144</a></p><p> Xilinx公司的XC9500系列产品具有业界领先的速度,同时,具有增强引脚锁定结构和支持全面的IEEE Std. 1149.1 JTAG边界扫描,向用户提供了更高的灵活性。XC9500体系由多个同一功能块组成,每个功能块内含18个宏单元,引脚到引脚速度最快支持到5 ns;支持125 MHz时钟速率,I/O口接口电平5 V、3.3 V或两者皆可。其中<a href="http://www.chinaicmart.com/series-XC9/XC95144.html" target="_blank">XC95144</a>内部有144个宏单元。</p><p> (2)HD-6408和HD-6409</p><p> HD-6408和HD-6409是Intersil公司的产品,两者均是曼彻斯特编解码器。</p><p> HD-6408编码器转换串行NRZ数据(通常来自移位寄存器)为曼彻斯特编码,增加一个同步头和一个奇偶位。解码器识别这个同步头,并判断出这是数据同步,还是命令同步,数据解码后移出NRZ码(通常送到移位寄存器中)。最后检查奇偶校验位。如果没有编码或奇偶校验方面的错误,解码器将输出一个有效信号,表明接收到一个有效的字。解码器能够向输入的曼彻斯特码字以很高的速率提供时钟恢复和优异的抗干扰能力。HD-6408使用在很多商业应用场合,例如安全系统、环境控制系统及串行数据链等。它的数据传输速率高达1 Mb/s,开销很小,20位中有16位可用来传输数据。</p><p> HD-6409曼彻斯特编解码器使用原理与HD-6408略有差别,但基本相似。</p><p> 1.2 使用软件</p><p> CPLD编程软件选择Xilinx Foundation 3.1i。该软件界面友好,功能强大,提供了开发CPLD所需的整个流程,包括:编辑、综合、实现、仿真及 下载等。该软件可人工指定引脚,编译各个子模块文件,并提供了两种仿真:功能仿真和时序仿真。其中时序仿真对时序提出了要求,是更严格的仿真。</p><p><b> 2 曼码控制系统设计</b></p><p> 2.1 系统说明</p><p> 系统中,HD-6408以T2模式(20.8 Kb/s)从地面接收数据,HD-6409以T5模式 ( 93.75 Kb/s)向地面发送数据。</p><p> 接收时,HD-6408接收外部传来的曼码数据,转换成NRZ码在CPLD里进行串并转换,转换完成后产生接收中断,通知单片机取数据;发送时,单片机送给CPLD数据,进行并串转换,移位输出到HD-6409的输入端,由HD-6409编码发送出去。接收地址和发送地址均由CPLD解码产生。HD-6408和HD-6409所需的外部时钟源,通过CPLD对外部晶振分频得到。</p><p style="TEXT-INDENT: 30px;">2.2 CPLD内部功能设计</p><p style="TEXT-INDENT: 30px;">2.2.1 系统总体框图</p><p> 设计CPLD内部电路时,采用了模块化设计方法,内含5个模块:16位串并转换器、16位并串转换器、分频器、解码器及控制器。系统顶层逻辑框图如图1所示。<br/><br/> 以上模块均采用VHDL语言描述。控制器是核心部分,实现对HD-6408接收和HD-6409发送的时序控制。</p><p style="TEXT-INDENT: 30px;">2.2.2 HD-6408解码时序</p><p> HD-6408的接收时序如图2所示。</p><p> (1)引脚定义</p><p style="TEXT-INDENT: 30px;">VW:输出字有效信号。</p><p style="TEXT-INDENT: 30px;">DSC:解码移位时钟。</p><p style="TEXT-INDENT: 30px;">TD:接收数据信号。</p><p style="TEXT-INDENT: 30px;">SDO:串行数据输出。</p><p style="TEXT-INDENT: 30px;">BZI、BOI:双极性数据输入。</p><p> (2)解码时序过程</p><p> 解码器一直监视数据输入线,当接收到有效的同步头和两个有效的曼彻斯特码数据位后,便开始输出。当同步头被识别后,CDS引脚输出同步的类型:如果接收的是命令,便输出高并保持16个DSC周期;如果接收的是数据,就继续保持低电平。TD变高,并在SDO输出NRZ数据期间一直为高。SDO输出一个字后,开始检验奇偶位。如果曼彻斯特码和奇偶位都正确,VW信号输出高,此时解码器开始寻找新的同步头,开始下一个接收周期。接收到新的有效的同步头和两个曼彻斯特码位后,VW信号被复位;否则,在持续大约20个DSC周期后,VW信号变低。</p><p> 2.2.3 HD-6409发送时序</p><p style="TEXT-INDENT: 30px;">HD-6409发送时序。 </p><p style="TEXT-INDENT: 30px;">(1)引脚定义</p><p style="TEXT-INDENT: 30px;">SD/CDS:串行NRZ码数据输入。</p><p style="TEXT-INDENT: 30px;">CTS:清除准备发送信号。</p><p style="TEXT-INDENT: 30px;">ECLK:编码时钟。</p><p style="TEXT-INDENT: 30px;">BZO、BOO:曼彻斯特编码数据输出。</p><p style="TEXT-INDENT: 30px;">(2)编码时序过程</p><p> CTS信号高无效,低有效。在CTS信号的下降沿,引脚BZO和BOO开始发送同步序列(8个曼码“0”组成)。同步序列后就是命令同步脉冲(由1.5位高电平和1.5位低电平组成)。在输出命令同步脉冲时,NRZ数据在ECLK的下降沿通过SD/CDS引脚输入,这些数据编码后在命令同步序列后持续输出。这些码字没有奇偶校验和字结构。编码数据块的长度由CTS决定。<br/><br/> 2.2.4 VHDL源程序</p><p> 控制器的VHDL源文件如下(程序较长,附核心部分):</p><p style="TEXT-INDENT: 30px;">process (controlcs)</p><p style="TEXT-INDENT: 30px;">begin</p><p style="TEXT-INDENT: 30px;">if(controlcs 'vent and controlcs= '1') then</p><p style="TEXT-INDENT: 30px;">control_data <= databus;</p><p style="TEXT-INDENT: 30px;">end if;</p><p style="TEXT-INDENT: 30px;">end process;</p><p style="TEXT-INDENT: 30px;">ee08 <= reset and control_data(0);</p><p style="TEXT-INDENT: 30px;">lclk595 <= not td08;</p><p style="TEXT-INDENT: 30px;">sclk595 <=td08 and dsc08;</p><p style="TEXT-INDENT: 30px;">lclk597 <=control_data(3) and qq_out;</p><p style="TEXT-INDENT: 30px;">sclk597 <= (not(esc08 and sd08)) and (not eclk09);</p><p style="TEXT-INDENT: 30px;">tdd08 <= not(td08);</p><p style="TEXT-INDENT: 30px;">cdss08 <=not(cds08);</p><p style="TEXT-INDENT: 30px;">cts09 <= control_data(1);</p><p style="TEXT-INDENT: 30px;">load <=(ee_bit or (not(control_data(1))))and qq_out;</p><p style="TEXT-INDENT: 30px;">dr08 <= control_data(2);</p><p style="TEXT-INDENT: 30px;">ss08 <=control_data(4);</p><p style="TEXT-INDENT: 30px;">mr08 <= control_data(5);</p><p style="TEXT-INDENT: 30px;">信号说明如下:</p><p style="TEXT-INDENT: 30px;">control_data——8位控制寄存器;</p><p style="TEXT-INDENT: 30px;">controlcs——控制寄存器片选信号,低有效;</p><p style="TEXT-INDENT: 30px;">mr08——hd-6408的主复位信号,高有效;</p><p style="TEXT-INDENT: 30px;">dr08——hd-6408的编码器复位信号,高有效;</p><p style="TEXT-INDENT: 30px;">ee08——hd-6408的使能信号,高有效;</p><p style="TEXT-INDENT: 30px;">ss08——编码同步头选择;</p><p style="TEXT-INDENT: 30px;">cts09——hd-6409的使能信号,低有效;</p><p style="TEXT-INDENT: 30px;">lclk595——串并转换器的载入数据信号;</p><p style="TEXT-INDENT: 30px;">sclk595——串并转换器的时钟信号;</p><p style="TEXT-INDENT: 30px;">lclk597——并串转换器的载入数据信号;</p><p style="TEXT-INDENT: 30px;">sclk597——并串转换器的时钟信号;</p><p style="TEXT-INDENT: 30px;">load——16位计数器载入初值信号;</p><p style="TEXT-INDENT: 30px;">qq_out——16位边界指示器;</p><p style="TEXT-INDENT: 30px;">tdd08——触发中断信号。</p><p><b> 3 仿真与实现</b></p><p> 本系统采用Xilinx公司生产的<a href="http://www.chinaicmart.com/series-XC9/XC95144.html" target="_blank">XC95144</a>芯片,使用Xilinx Foudation 3.1i软件进行开发。所用VHDL程序通过时序仿真和下载后,观察波形并进行实际验证,可以正确地接收和发送曼彻斯特码,符合设计要求。</p><p><b> 4 结 论</b></p><p> 本系统时序配合严格,运行可靠,易于修改;可以根据需要,灵活地加入各种各样的使用曼彻斯特码通信的系统中。</p> |
|