Nios在通用编译码器中的应用

时间:2011-08-24


 

  长期以来,Altera一直推行嵌入式处理器战略的原因是,随着应用的ASIC开发日益受到成本的困扰,OEM日渐转向FPGA来构建自己的系统。这些系统中绝大多数需要一个处理器,而Altera正是为设计者提供了为FPGA优化的灵活的嵌入式处理器方案,可以满足16位和32位嵌入式处理器市场的需求。Nios 系列包括3种产品,分别是:Nios /f(快速)--的系统性能,中等FPGA使用量;Nios /s(标准)--高性能,低FPGA使用量;Nios /e(经济)--低性能,的FPGA使用量。这3种产品具有32位处理器的基本结构单元--32位指令大小,32位数据和地址路径,32位通用寄存器和32个外部中断源;使用同样的指令集架构(ISA),100%二进制代码兼容,设计者可以根据系统需求的变化更改CPU,选择满足性能和成本的方案,而不会影响已有的软件投入。

  基于Nios设计的这一款通用编译码器,是将多种编译码模块和微处理器控制部分集成到单片FPGA内部,大大减少了处理器外围扩展电路数目、提高了系统集成度、降低了外围电路布局走线的复杂度、提高了系统的抗干扰能力。由于FPGA的可编程性,使系统的扩展和升级更加容易,通过设置不同的技术指标,可以应用到多种通信系统中。

  1 总体设计方案

  通用编译码器总体方案框图如图1所示。它由信息源、编码器模块、信道仿真模块、同步提取模块、译码器模块、存储器模块、LCD和键盘模块组成,整个系统在嵌入式处理器软核的控制下完成对各种外设的操作,包括设置编译码类型和信码速率、LCD显示等。


  该编译码器可以完成卷积码、CRC码、RS码等多种编译码方案。整个系统可工作在两种模式下:(1)调试模式。这种模式主要应用于系统调试及实验操作。在该模式下,信息源为其他模块提供信码,以便调试同步提取模块、编译码模块以及系统连接;信道仿真模块处于正常工作状态时,可向传输码元中加入干扰,以检验译码器是否正常工作。(2)应用模式。这种模式主要应用于实际系统。在该模式下,信息源模块只是把用户提供的信码传输给编码器,而信道仿真模块并不工作,编码模块及译码模块互不连接,编码后码元在特定的信道中传输,然后再回到译码器。

  设计过程中使用的软件平台主要有Quartus Ⅱ、SOPC Builder和Nios IDE.其中,Quartus Ⅱ主要用于整个系统的构建、编译、综合、适配、时序分析和。整个SOPC系统设计完成后,在Quartus Ⅱ下进行管脚分配和编译,并生成pof或sof文件到专用配置器件或FPGA中;SOPC Builder用于Nios微处理器和外围模块的集成设计,Nios微处理器系统设计完成后,通过"System Generation"产生可用于Quartus Ⅱ综合的VHDL描述,同时生成Symbol文件供调用;Nios IDE用于Nios处理器的软件开发、调试和。

  2 硬件实现

  硬件主要包括定制合适的CPU和外设、编译码模块、同步提取模块、键盘显示、存储器模块。

  2.1 位同步提取模块设计

  位同步的目的是使每个码元得到的解调和判决。位同步可以分为外同步法和自同步法两大类。一般而言,自同步法应用较多。外同步法需要另外专门传输位同步信息。自同步法则是从信号码元中提取其包含的位同步信息。自同步法又可以分为两种,即开环同步法和闭环同步法。开环法采用对输入码元做某种变换的方法提取位同步信息。闭环法则用比较本地时钟和输入信号的方法,将本地时钟锁定在输入信号上。闭环法更为准确,但是也更为复杂。位同步不准确将引起误码率增大。

  在数字通信中,位同步是基本的同步。它的基本含义是接收端和发送端时钟信号必须同频同相,这样接收端才能正确接收和判决发送端送来的每一个码元。实现位同步的方法可分为外同步法和自同步法。目前,在数字通信系统中,常常采用数字锁相法提取位同步[1],它属于自同步法。

  位同步提取原理图如图2所示。它由晶振、分频器、相位比较器和控制器组成。其中控制器包括图中所示的扣除门、附加门和或门。若接收码元的速率为F(波特),则要求位同步脉冲的重复速率也为F.这时,晶振的振荡频率应设在NF(赫),由晶振输出经整形得到重复频率为NF的窄脉冲,经扣除门、或门并N次分频后,就可得到频率为F的信号。如果此信号不能准确反映接收码元的频率和相位,就要根据相位比较器输出的误差信号,通过控制器对分频器进行调整。接收码元的相位可以从基带信号的过零点提取,将每个码元的宽度分为两个区:前半码元称为滞后区。若位同步脉冲波形落入此区,分频器输出脉冲,使'与门'B有输出,经过单稳2产生一滞后脉冲。后半码元称为超前区,若位同步脉冲落入此区,分频器的另一端使'与门'A有输出,经过单稳1产生一超前脉冲。这样无论位同步脉冲超前或滞后,都会分别送出超前或滞后脉冲对加于分频器的脉冲进行扣除或附加,达到相位调整的目的。


  图2中的单稳3是为了保证'与门'A先有输出,以防位同步输出的脉冲与接收码元的相位相差180°。对位同步提取电路进行时序仿真,得到的仿真波形如图3所示。图3中,codein为输入码流,weifen为提取出的码元起始相位,weitongbu为位同步信号输出。

  2.2 帧同步提取模块设计

  两个工作站之间以报文分组为单位传输信息时,必须将线路上的数据流划分成报文分组或HDLC(数据链路控制)规程的帧,以帧的格式进行传送。在HDLC通信规程中的帧的帧标识位F(01111110),就是用它来标识帧的开始和结束。通信开通时,当检测到帧标识F,即认为是帧的开始,然后在数据传输过程中一旦检测到帧标识F即表示帧结束。数据链路层所以要把比特组合成以帧为单位传送,是为了在出错时,可只将有错的帧重发,而不必将全部数据重新发送,从而提高了效率。通常为每个帧计算校验和(Checksum)。当一帧到达目的地时,校验和再被计算一遍,若与原校验和不同,就可发现差错了。帧同步指的是接收方应当能从接收到的二进制比特流中区分出帧的起始与终止。

  数字通信时,一般总是以一定数目的码元组成一个"句"进行传输。在本设计中,为了方便部分编码方法的实现,采用了加帧头的方法。因此在解码端,相应设计了帧同步信号的提取模块。实现帧同步的基本方法是在发送端预先规定的时隙插入一组特殊码形的帧同步码组,在接收端有帧同步检测电路检测该码组以保证收发帧同步。

  本方案中帧同步码为7位巴克码,即1110010,集中插入到每帧的第2~8个码元位置上,其原理框图如图4所示。本模块可分为信号源、巴克码识别器和同步保护三部分。每帧的具体结构可以通过键盘设置,此处以每帧24位为例,其中后16位为信息码元,则设置分频器1为24分频,分频器2设为3分频。巴克码识别器由图5所示的电路来实现。在移位时钟信号的作用下,当7位巴克码全部移进移位寄存器时,图5中的D0~D6全部为1.L0~L2端为门限控制端,其中L1和L2段已设置为1,而L0由同步保护端控制,只有当D0~D6中1的个数不小于门限值时,qout端才输出一脉冲,表示一帧的开始。

 


  图5中,同步保护的作用是减少假同步和漏同步。当无基带信号输入或有基带信号输出但识别器无输出时,'与门'1关闭,'与门'2打开,单稳输出信号通过'与门'2输入到分频器2,分频器2的输出信号使RS置0,从而关闭'与门'3,同步器无输出信号;此时Q的反向端高电平把判决门限的电平置为7,打开'与门'1,同步器处于捕捉状态,只要识别器输出一个信号,'与门'4就可以输出一个置0脉冲使分频器1置0.这样分频器1就可以输出与识别器同频同相的信号。识别器输出信号通过'与门'1后使状态触发器置1,从而打开'与门'3,输出帧同步信号,同时使判决门限降为6,关闭'或门',使同步器进入维持状态。在维持状态下,因为判决门限较低,故识别器的漏识别概率减小,假识别概率增加,但假识别信号与单稳输出信号不同步,故'与门'1与'与门'4不输出假识别信号,'与门'3输出的仍是正确的帧同步信号。在维持状态下,也可能出现漏识别,但由于漏识别概率比较小,只要识别器不连续出现三次漏识别,则分频器2就不输出一个脉冲信号,维持态不变;若超过三次,则维持态变为捕捉态,重新捕获帧同步码。若首次捕获的是信息数据中与帧同步码完全相同的码元序列,则系统将进入错误的同步维持状态。如果连续传输以一帧为周期的信号,此状态将维持下去。但在实际传输中,连续几帧都输出假识别信号的概率极小,所以这种错误的同步维持状态存在的时间很短。

  2.3 编译码模块设计

  限于篇幅,本文只简单介绍汉明码与卷积编码模块的实现。它们已很好地应用在本实验室的通信系统实验箱中。

  2.3.1 汉明码编译码模块

  以(7,4)汉明码为例,校正子与错码位置的对应关系如表1所示。


  监督位计算如下:


  


  4位码元相应进入编码器,首先进行串并变换,然后进行汉明编码,进行并串变换。主要代码如下:

  if(clk1'event and clk1='0') then

  if (en='0' and counter1=0) then

  tempt(6 downto 3)〈=datain(3 downto 0);

  tempt(2) 〈= (datain(3) XOR datain(2))

  XOR datain(1);

  tempt(1) 〈= (datain(3) XOR datain(2))

  XOR datain(0);

  tempt(0) 〈= (datain(3) XOR datain(1))

  XOR datain(0);

  end if;

  end if;

  在此模块中要设定输入时钟和输出时钟的周期为7比4的关系,具体周期大小与码元速率对应。对于译码模块,原理相同,在此不再赘述。汉明码编译码模块的仿真波形如图6所示。图中,outp1为编码输出,outp2为译码输出,仿真结果与理论计算值相同。

 


  2.3.2 卷积码编译码模块

  以(2,1,6)卷积编译码器为例,选择生成矩阵为G(D)=(1,1+D2+D5+D6)的卷积码。这种卷积码不仅是系统码,而且是自正交码。假设输入信息序列M=(1111),即M(D)=1+D+D2+D3,则编码器的输出C(D)=M(D)×G(D),即编码器输出序列为11111010010000000001.解码采用大数逻辑译码方法,可以纠正连续14个信息码元中的2个随机错误。对于存在突发干扰的信道,采用这种方法可获得非常大的编码增益。译码中完成纠错的代码如下:

  summ:process(s)

  begin

  if s(6)='1' then c6〈=1;else c6〈=0;end if;

  if s(5)='1' then c5〈=1;else c5〈=0;end if;

  if s(2)='1' then c2〈=1;else c2〈=0;end if;

  if s(0)='1' then c0〈=1;else c0〈=0;end if;

  end process;

  sum〈=c0+c2+c5+c6;

  men:process(sum)

  begin

  if sum>=3 then temp〈='1';else temp〈='0';

  end if;

  end process;

  卷积码模块仿真波形如图7所示。图中,encode为编码输出,decode为解码输出。由图可见,结果与理论计算相同。其中,编码输出速率为信息码速率的两倍。

  2.4 Nios微处理器模块

  微处理器用一片或少数几片大规模集成电路组成的中央处理器。这些电路执行控制部件和算术逻辑部件的功能。微处理器与传统的中央处理器相比,具有体积小,重量轻和容易模块化等优点。微处理器的基本组成部分有:寄存器堆、运算器、时序控制电路,以及数据和地址总线。微处理器能完成取指令、执行指令,以及与外界存储器和逻辑部件交换信息等操作,是微型计算机的运算控制部分。它可与存储器和外围电路芯片组成微型计算机。

  Nios CPU核有Nios-16和Nios-32两种结构,这里选用Nios-32处理器,它的预配置有标准型、型、全功能、标准调试功能以及自定制。在此选用标准调试功能,在标准模式下增加了用于JTAG在线调试的OCI模块,可以通过JTAG进行Nios调试[3];还定义了一个ROM 和RAM 模块,其数据宽度均为32 位,大小均为2KB.ROM 用来存储GERMS Monitor程序,以便进行软件调试, RAM作为程序运行空间和变量空间。UART 为通用串行通信IP ,用来外接RS232,用于系统的调试和通信。Avalon交换结构总线用来连接外部的Flash、SRAM以及用户自定制逻辑。Avalon需要极小的FPGA资源,提供完全的同步操作。该模块还定义了一个4×4的键盘,用来选择编译码方式、信息速率以及工作模式等。

  在SOPC Builder中添加相应模块,生成Nios微处理器及部分外设。在Quartus Ⅱ环境下采用模块化方法将SOPC Builder下定制的Nios CPU软核和用VHDL语言描述的硬件模块加以整合。通过图形化建模实现端口和信号流的匹配。

  3 软件实现

  软件实现包括系统的初始化,对RAM、ROM进行操作,读键盘和LCD显示等,主要由Nios SDK shell来完成,通过串行通信口测试Nios的控制程序,控制程序用C语言来实现。

  Nios开发套件提供了将程序代码存储在Flash存储器的功能,GERMS监控程序在CPU启动后自动执行程序代码。将代码存储在片外存储器有两种方法[4],本文采用的方法是使用软件程序srec2flash将。srec格式的可执行程序代码转换为可以写入Nios系统Flash存储器的。flash文件,在完成该操作的同时,srec2flash在。Flash文件的开始添加了一段代码,用于将应用代码从Flash复制到RAM中并运行。软核启动机制如图8所示。系统上电后,串行配置器件EPCS4配置FPGA;配置完毕后复位Nios并运行片上ROM中的BootLoader;选择运行模式;在调试模式下,BootLoader启动GERM监控程序,为开发者提供对系统进行开发调试的条件。在控制模式下,BootLoader将Flash存储的主程序装载到RAM中,指针指向程序开始地址,开始运行主程序;初始化,并配置系统。


  所选用Altera公司Cyclone系列的EP1C12Q240C8为的芯片,它内部包含12 060个基本逻辑单元和52个M4K RAM blocks,总共可以提供239 616bit的RAM资源,满足了系统的需求。

  本文利用可编程逻辑的灵活性和Nios的强大处理能力,将多种编译码模块和微处理器模块集成到一片FPGA内部,方便地实现了通用编译码器的设计。由于采用了VHDL语言,使系统具有可移植性和可扩展性。该设计已通过实际运行且效果良好。

 


  
上一篇:NIOS II和μclinux在工业CT高速数据传输系统的应用
下一篇:变压器转换模块及外围电路设计

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料