基于单片机的 复杂可编程逻辑器件快速配置方法_EDAPLD论文
关键词:复杂可编程逻辑器件 静态随机存储器 被动串行
基于sram(静态随机存储器)的可重配置pld(可编程逻辑器件)的出现,为系统设计者动态改变运行电路中pld的逻辑功能创造了条件。pld使用sram单元来保存配置数据。这些配置数据决定了pld内部的互连关系和逻辑功能,改变这些数据,也就改变了器件的逻辑功能。由于sram的数据是易失的,因此这些数据必须保存在pld器件以外的eprom、eeprom或flash rom等非易失存储器内,以便使系统在适当的时候将其下载到pld的sram单元中,从而实现在电路可重配置icr(in-circuit reconfigurability)。
本文介绍笔者设计的pld icr控制电路,它不但线路结构简洁、开发容易、体积小、成本低,并且在图2介绍的icr控制电路中,其存储pld配置数据的flash存储器采用并行总线,交换速度较快。然而pld配置数据较大,通常都在数十千字节以上。如何提高图2介绍的icr控制电路的配置速度,使系统上电后的最短的时间内完成配置而进入正常工作状态,软件设计上的一个重点。
1 基于sram的可重配置cpld的结构与原理
早期的可编程逻辑器件大多采用紫外线可擦除只读存储器(eprom)和电可擦除只读存储器(eeprom)方式。如gal系列、epf7064、epf7128等。由于其结构简单、规模小,只能完成简单数字逻辑功能。此后,出现了一类结构上稍复杂的基于sram存储器的可编程芯片,即复杂可编程逻辑器件(cpld),它能完成各种数字逻辑功能。
采用这些结构的可编程逻辑器件有altera公司的flex、acex、apex系列,xilinx公司的spartan、virtex系列。多年来,altera公司一直致力于cpld的开发。近几年,该公司又推出了很有竞争力的cpld器件,即灵活的逻辑单元阵列的flex(flexible logic element matrix)系列产品。相对于其它一些厂家的fpga产品来说,altera公司的flex系列产品有其独特之处。这主要表现在高密度、在线配置功能、高速度和连续式布线结构等方面。
查找表lut(look-up-table)是基于sram的可重配置pld的一个重要组成部分,lut本质上就是一个ram。目前cpld中多使用4输入的lut,所以每一个lut可以看成个有4位地址线的16×1bit的ram。当用户通过gdf原理图或vhdl语言描述了一个逻辑电路后,cpld开发软件会自动计算逻辑电路的所有可能结果,并把结果事先存入查找表。这样,当多信信号进行逻辑运算时就等于输入一个地址进行查表,找出地址所对应的内容,然后将其输出即可。
2 可编程逻辑器件的配置原理
首先在开发软件max+plus ii的assign菜单下选择将要采用的基于sram的器件名称。经过编译、优化、逻辑综合、仿真等步骤达到设计要求后,软件会自动产生一个编程文件(扩展名为.sof文件)。对于基于sram工艺的可编程逻辑器件(如altera的所有flex、acex、apex系列,xilinx的sparten、vertex系列),由于sram存储器的特点,掉电后数据会消失,因此在调试期间可以采用并口byteblastemv下载电缆多次重复配置pld器件。当电路设计成功,调试完成后,需要将配置数据烧写固化在一个由altera生产的专用eeprom(如epc1441)中。上电时,由这片配置eeprom先对pld加载数据,几十毫秒后,pld即可正常工作。
cpld器件的工作状态分为三种:首先是上电配置状态(configuration mode),将编程的数据装入cpld器件的过程,也可称之为构造;然后是初始化状态(initialization mode),在配置完成后,cpld器件复位内部各类寄存器,让i/o引脚为逻辑器件正常工作做准备;最后是用户状态(user mode),指电路中cpld器件正常工作时的状态。
altera公司具有icr功能的pld器件有flex8000、flex10k、apex和acex系列,它们的配置方式可分为ps、pps和jtag(joint test action group)等方式。ps方式因pld与配置电路的互连最简单,对配置时钟的最小频率没有限制而应用最广泛,因此在icr控制电路中通常采用ps配置方式来实现icr功能。
被动串行(ps)配置方式:在该配置方式下,由byteblastemv下载电缆产生一个由低到高的跳变送到nconfig引脚脚复位pld,然后将配置数据送到data0引脚,直到conf_done引脚变为高电平。图1是ps配置方式的时序图。conf_done变成高电平后,dclk必须多余十个周期来初始化该器件。器件的初始化由下载电缆自动执行。在ps方式中没有握手信号,所以配置时钟的工作频率必须低于10mhz。在多器件ps配置方式中,第一片pld的nceo引脚级联到下一片pld的nce引脚。在配置完第一个器件后,nceo输出为低,使第二个pld器件的nce有效,开始对第二块器件进行配置。
3 用winbond78e58单片机配置可编程逻辑器件
用单片机配置可编程逻辑器件与上述ps配置方式原理一致,只需模拟ps配置方式中data0、dclk、nconfig、conf_done、nstatus引脚的配置时序,将配置数据串行移入pld。配置引脚的功能如表1所示。
3.1 硬件设计
用单片机配置pld,可以使用普通输入输出口或单行口。使用普通i/o口(如p1口),向pld发送1bit数据至少需要4个指令周期。一个指令给data0赋值,两个指令产生dclk时钟,一个指令移位取数据。如果晶振为fosc,一个指令周期为12/fosc,因此它的下载速率为fosc/48。然而如果采用串行口方式0,其下载速率提高为fosc/12。考虑到pld配置文件数据比较大,通常都在数十千字节以上(其配置文件大小如表2),为了加快配置速度,并适合各种不同规模的pld,采用了winbond78e58单片机。
表1 配置引脚功能说明
data0 | 输出 | 配置数据 |
dclk | 输出 | 配置时钟 |
nconfig | 输出 | 器件复位脚(该信号线的上升沿使配置开始) |
conf_done | 输入 | 状态位(在配置完成后,该信号线为高) |
nstatus | 输入 | 状态位(如果该信号线为低,表明在配置过程中出现错误,需重新配置) |
表2 各种cpld配置文件大小
器 件 | 配置数据大小(bits) | 配置文件大小(kbytes) |
apex 0k1000e apex 20k600e apex 20k400e apex 20k300e apex 20k200e apex20k100 epf10k100e epf10k70 epf10k40 epf10k30 epf10k20 epf10k10 | 8,938,000 5,564,000 3,878,000 2,733,000 1,950,000 985,000 1,336,000 892,000 498,000 376,000 231,000 118,000 | 1,029 680 474 333 238 121 164 109 61 46 29 15 |
注:配置文件大小由.rbf文件决定
该单片机外接晶振最大频率为40mhz,它在串行口方式0下波特率可设置为fosc/4。另外通过设置特殊功能寄存器ckcon的md0、md1、md2三位,可以将movx、movc等指令周期缩短至2个机器周期。与普通单片机相比,可使配置时间大为缩短。winbond78e58单片机内部拥有32kb flash rom.由配置文件数据表2可知,只需一片单片机就可以对epf10k20系列以下的pld进行配置了。本系统中使用了一片apex20k300e,因此在硬件电路设计中,扩展了一片winbond29c040 flash存储器(容量为512kb),其电路如图2。data0与rxd、dclk与txd、nconf与p15、config_done与p16、nstatus与p17分别相连。
3.2 软件设计
在软件编程时,使用了串行口移位寄存器输入输出方式。本系统只需用到输出方式,串行数据通过rxd引脚输出,而在txd引脚输出移位时钟。当一字节数据写入串行数据缓冲器sbuf时,就开始发送。在此期间,发送控制器送出移位信号,使发送移位寄存器的内容右移一位,直至最高位(d7位)数字移出后,停止发送数据和移位时钟脉冲。rxd、txd时序如图3。由图3可知,它可以用来模拟配置时序。发送完一字节数据后,硬件置发送标志位ti为1,向cpu申请中断。若cpu响应中断,则从0023h单元开始执行串行中断服务程序。
为了提高配置速度,单片机程序用汇编语言编写。单片机上电后使nconfig脚由低到高复位待配置pld;当判断到nstatus为高后,开始从外部flash存储器取数据串行移位。配置过程中,查询conf_done。一旦为高,配置完成,但还要送40个dclk脉冲,pld才能进入用户工作状态。
用户设计pld程序经maxplus ii或quartus编译后将产生后缀后为.sof的sram目标文件。该文件含有除配置数据以外的控制字符,不能直接写入到pld中去,需要利用软件的编程文件转换功能将文件转换成.rbf(raw binary file)十六进制文件。把.rbf文件烧写到存储器中,单片机通过movx指令读入后,串行移位到pld。
部分asm语言源程序如下:
nconfig bit p1.5
confdone bit p.6
nstatus bit p1.7
org 000h
……
clr sm0
clr sm1 ;sm0,sm1为0,串口工作于方式0
clr sm2 ;串口波特率为fosc/4
clr ren
anl 8eh,#0f8h ;地址8eh是ckcon单元,md0、md1、md2清0
clr ea
wjrestart:clr nconfig
setb nconfig ;上升沿复位pld
wait:jnb nstatus,wait ;nstatus为高,可进行配置
wjpeizhi:mov p1,counter3
mov dph,counter2
mov dpl,counter1 ;配置数据大,需3个单元作地址记数
movx a,@dpta
mov sbuf,a ;串行移位
nop
nop ;采用填充2个空指令,正好使一个字节发送完成,可发送下一个字节
inc counter1 ;地址加
mov a,counter1
jb confdone,wjend1
cjne a,#0,wjpeizhi
inc counter2
nov a,counter2
cjne a,#0,wjpeizhi
inc counter3
ljmp wjpeizhi
wjend1:mov r0,#60
wjend:wov a,#55h
……
mov sbuf,a ;由此产生40个dclk时钟
djnz r0,wjend
were:ljmp here ;配置完成,进入用户工作模式
使用otp(one time programming)器件配置cpld具有一定的冒险性,一次简单的代码更换就可能意味着更换otp器件,并重新开始所有的程序。被动串行微处理器(passive serial with processor)配置方式以eeprom为基础,允许对这些存储器进行多次编程,所有其它芯片都无需从已装配的印制电路板上拆卸下来。高速读写周期的flash存储器能确保1万次编程,而且能对任何以sram为基础的pld下载。该方式除了在加电期间能承载配置数据外,还有许多方便之处。例如,用户可以将多个配置文件.rbf分区编程到外部存储器的未用区段,通过单片机读取不同存储区可以将可编程逻辑器件在线配置成多种不同的工作模式。