自大规模现场可编程逻辑器件问世以来,先后出现了两类器件,一类是基于sram体系结构的fpga系列,如xilinx公司的4000系列和最新的virtex系列;另一类是基于faxtflash技术的cpld器件,如xilinx公司的9500系列和lattice公司的isplsxx系列芯片。fpga具有容量大、设计资源丰富、片内rom及ram设计灵活等特点1,但是它们需要在每次上电时进行数据加载。目前实现加载的方法有以下三种:①采用prom并行加载;②采用专用srom串行加载;③采用单片机控制实现加载。第一种方式需要占用较多的fpga管脚资源,虽然这些管脚在加载完成后可用作一般i/o口,但在加载时不允许这些管脚有其他任何外来信号源;另外数据存储器prom与fpga之间的大量固定连线如8位数据线以及大量访问prom的地址线等,使得pcb设计不便。但是第一种方式有一个有利的方面,即prom的容量较大、容易购置、价格低、技术支持(编程器)较好。第二种方式情况刚好与第一种方式相反,即占用资源少、pcb布板方便,但是容量小、价格较高、兼容性差。第三种方式采用单片机控制,由prom中读取并行数据,然后再串行送出。由于涉及到单片机编程,对于开发者来说较为不便;另外,如果单片机仅用来实现该任务,较为浪费硬件资源。cpld的一个最大优点是采用计算机专用开发工具,通过jtag口直接一次性实现编程数据加载,并永久保留,除非进行再次编程(与gal器件相似)。该类器件比较适合在实验室内进行现场调试,但是由于其数据的加载必须通过计算机,因此对于从事野外作业者来说会产生不便。
通过上述比较,并结合实际工作情况,我们认为采用串行数据加载比较方便、可靠(这种可靠性得益于fpga与srom之间较少的接口线)。但随着fpga规模的不断升级,其config数据量越来越大,截止到本文写作时,config数据量最大已到6mbit,虽然xilinx公司有相关的xc17x系列srom提供使用,但皆为一次性芯片?2、开发成本较高、代理商供货周期长、价格较高,这给fpga的应用及普及带来很大的障碍。我们曾使用过at&t公司的att17系列电可擦除srom,但是该类srom芯片能与xilinx系列fpga芯片实现接口的种类不多,且容量小。由于种种原因,其价格往往是同样存储容量的eeprom的五、六倍,甚至更高,并且来源困难。那么能不能结合并行加载与串行加载的优点,从而解决大容量fpga数据加载的问题呢?我们在仔细分析了串行加载机制后,认为采用eeprom作为数据存储器,经过可控的并-串转换,应该可以实现数据加载。下面以xilinx公司virtex系列xcv100芯片为例,采用atmel公司1兆位的at29c010a进行数据存储,采用xilinx公司9500系列xc95108芯片作为加载控制器件进行设计。
1 原理设计
原理性master serial模式串行加载时序如图1所示
在该加载模式中,比较重要的几个信号为/init、cclk、datain、done。/init表示fpga芯片上电时或者当/program信号为低时fpga内部数据初始化过程,并作为外送信号给数据加载控制器件作为复位之用。当/init信号跃为高电平时,cclk开始启动。加载数据datain在cclk的上升沿打入,与通用串行通讯相类似,加载数据流也有开始位与结束位,且以数据帧的方式接收。一旦发生错误,fpga立即停止接收数据,并将/init信号置为低电平,因此该信号又称为错误指示信号。当数据全部接受并验证无误后,fpga将done信号置为“1”?3。 在分析了fpga加载数据流特性后,可以得出这样一个结论:保证cclk与datain之间的严格同步与连续性,就可以实现加载。基于此结论,在生成加载数据格式时,产生单片srom串行格式,对于xilinx公司的fpga系列,该格式为.mcs文件格式;然后用all07编程器以intel hex数据格式将其写入eeprom中。余下的工作是在cclk、/init、datain的控制下完成并-串转换。该控制过程采用一片cpld之95系列xc95108芯片来承担,在设计容量上采用一片xc9536即可完成,之所以采用xc95108是因为其尚需要完成其他任务。其原理框图如图2所示。
2 并-串转换时序设计
在时序设计上,关键在于要保持datain加载数据的连续性、datain与cclk加载时钟的同步性以及eeprom访问地址的复位问题。对于复位问题,采用上电时fpga产生的/init信号对95108内部的eeprom地址发生器复位。这样做的原因是/init与fpga之cclk时钟产生有着同步关系,但同时也默认上电加载是一次成功;在考虑串行datain数据的连续性时,采用两组移位寄存器,设定它们为r_shifta和r_shiftb,当r_shifta在进行移位操作时,r_shiftb由eeprom中读入八位并行数据,反之亦然;为保持datain与cclk时钟的同步性,所有上述操作都以cclk为同步时钟,值得注意的是,由于datain串行数据是在cclk的上升沿打入fpga,因此我们给予xc95108芯片设计的运转时钟是经过反相的cclk时钟,这样就保证了cclk与datain的时间关系。
以下是为该加载设计的vhdl硬件编程语言设计程序4 5,其中的计数器及移位寄存器模块用f2.11设计软件之logicblox模块产生。整个程序经f2.1i开发软件仿真、编译成功后,经jtag编程电缆写入xc95108芯片。加电后便加载成功,经多次加电实验,成功率为100%。
虽然该程序是针对xcv100芯片及at29c010a eeprom设计的,但对于其他fpga及eeprom芯片同样适用,不同的是针对不同容量的eeprom,应改变其地址计数器的位数。
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity v10sload is
port
pdata in std_logic_vector 7 downto 0
paddress inout std_logic_vector 16
downto 0
cclkin in std_logic
reset in std_logic
datainout std_logic
end v10sload
architecture v10sload_arch of v10sload is
signal loadin ce nce cclk8 nreset ncclk adatain
bdatain std_logic
signal clkenable cclk std_logic
signal ppdata std_logic_vector 7 downto 0
component clk_div8
port
clock async_ctrl in std_logic
clk_out out std_logic
end component
component r_shift8
port
d_in in std_logic_vector 7 downto 0
load in std_logic
clk_en in std_logic
clock in std_logic
ls_out out std_logic
end component
component bufg
port i in std_logic o out std_logic
end component
begin
-------------------------------
--data-loading function statements here
nreset<=not reset
init_data process reset
begin
if reset='0' then
ppdata<=′00000000′
else ppdata<=pdata
end if
end process init_data
l0 bufg port mapi=>cclkin o=>cclk
ncclk<=not cclk
l1 counter17 portmap
clock=>cclk8async_ctrl=>nreset
q_out=>paddress
l2 clk_div8 portmap
clock=>ncclkasync_ctrl=>nreset
clk_out=>cclk8
nce<=not paddress0
ce<=paddress0
clkenable<='1'
l3r_shift8 portmap
d_in=>ppdata load=>nce clk_en=>
clkenable clock=>ncclk
ls_out=>adatain
l4 r_shift8 portmap
d_in=>ppdata load=>ce clk_en=>
clkenable clock=>ncclk
ls_out=>bdatain
process adatain bdatain ce
begin
if ce='1' then datain<=ddatain
else datain<=bdatain
end if
end process
end v10sload_arch
Linux中你需要了解的7件事!
博世与库卡成为德国工业4.0的典型代表
基于以太网通信高性能运动控制的选型及开发流程
区块链到底是什么有什么价值
芯和半导体针对高速连接器产品提供仿真EDA解决方案
使用AT29C010A和XC95108芯片实现对FPGA芯片数据进行串行加载
中国电动汽车崛起对功率半导体行业意味着什么?
无线MESH的自组网 是如何实现的
如何在噪声环境中减少或滤除偶发错误测量值
什么是MQTT网关
深度学习模型的部署方法
英特尔展示游戏手柄,在云游戏市场诸多动作
瑞芯微RK3588M智能车载360°全景环视方案首发
离线语音识别模块深入到各个领域当中
LED“抗衰老”的几个小妙招,智能控制LED灯带亮灭的原理方案
华为mate10最新消息:华为Mate10黑科技泄露,给苹果8致命一击
Photoshop惊现严重安全漏洞 建议用户尽快升级
深交所向华灿光电下发关注函,对其第一大股东变更事件表示关注
常用于电源去耦的元件组合
小米6最新消息:这次玩真的,小米6不用抢,卖现货了!售价2499起