首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

采用EEPROM对大容量FPGA芯片数据实现串行加载之二

采用EEPROM对大容量FPGA芯片数据实现串行加载之二

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
DATAINout 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 mapI=>CCLKIN O=>CCLK 
nCCLK<=not CCLK
L1counter17 portmap
CLOCK=>CCLK8ASYNC_CTRL=>nRESET
Q_OUT=>pADDRESS 
L2 clk_div8 portmap
CLOCK=>nCCLKASYNC_CTRL=>nRESET
CLK_OUT=>CCLK8 
nCE<=not pADDRESS0 
CE<=pADDRESS0 
clkenable<='1'
L3R_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


参考文献
1 XILINX 公司DATABOOK,199954~56
2 XILINX公司网站www.xilinx.com
3 王小军.VHDL 简明教程.北京:清华大学出版社,1997
记录学习中的点点滴滴,让每一天过的更加有意义!
返回列表