集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 932|回复: 0

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

[复制链接]
辉煌 发表于 2017-7-17 10:03:52 | 显示全部楼层 |阅读模式
采用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 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2025-4-20 12:42 , Processed in 0.079284 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表