oraclesqlloader全攻略

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oraclesqlloader全攻略相关的知识,希望对你有一定的参考价值。

参考技术A 一 sql loader 的特点oracle自己带了很多的工具可以用来进行数据的迁移 备份和恢复等工作 但是每个工具都有自己的特点 比如说exp和imp可以对数据库中的数据进行导出和导出的工作 是一种很好的数据库备份和恢复的工具 因此主要用在数据库的热备份和恢复方面 有着速度快 使用简单 快捷的优点 同时也有一些缺点 比如在不同版本数据库之间的导出 导入的过程之中 总会出现这样或者那样的问题 这个也许是oracle公司自己产品的兼容性的问题吧 sql loader 工具却没有这方面的问题 它可以把一些以文本格式存放的数据顺利的导入到oracle数据库中 是一种在不同数据库之间进行数据迁移的非常方便而且通用的工具 缺点就速度比较慢 另外对blob等类型的数据就有点麻烦了 二 sql loader 的帮助

  C:\\>sqlldr

  SQL*Loader: Release Production on 星期六 月 : :

  Copyright (c) Oracle Corporation All rights reserved

  用法: SQLLDR keyword=value [ keyword=value ]

  有效的关键字:

  userid ORACLE username/passwordcontrol Control file namelog Log file namebad Bad file namedata Data file namediscard Discard file namediscardmax Number of discards to allow (全部默认)skip Number of logical records to skip (默认 )load Number of logical records to load (全部默认)errors Number of errors to allow (默认 )rows Number of rows in conventional path bind array or beeen direct path data saves(默认: 常规路径 所有直接路径)bindsize Size of conventional path bind array in bytes(默认 )silent Suppress messages during run (header feedback errors discards partitions)direct use direct path (默认FALSE)parfile parameter file: name of file that contains parameter specificationsparallel do parallel load (默认FALSE)file File to allocate extents fromskip_unusable_indexes disallow/allow unusable indexes or index partitions(默认FALSE)skip_index_maintenance do not maintain indexes mark affected indexes as unusable(默认FALSE)readsize Size of Read buffer (默认 )external_table use external table for load; NOT_USED GENERATE_ONLY EXECUTE(默认NOT_USED)columnarrayrows Number of rows for direct path column array(默认 )streamsize Size of direct path stream buffer in bytes(默认 )multithreading use multithreading in direct pathresumable enable or disable resumable for current session(默认FALSE)resumable_name text string to help identify resumable statementresumable_timeout wait time (in seconds) for RESUMABLE(默认 )date_cache size (in entries) of date conversion cache(默认 )

  PLEASE NOTE: 命令行参数可以由位置或关键字指定 前者的例子是 sqlloadscott/tiger foo ; 后一种情况的一个示例是 sqlldr control=foouserid=scott/tiger 位置指定参数的时间必须早于但不可迟于由关键字指定的参数 例如 允许 sqlldr scott/tiger control=foo logfile=log 但是不允许 sqlldr scott/tiger control=foo log 即使参数 log 的位置正确

  C:\\>

  三 sql loader使用例子a)SQLLoader将 Excel 数据导出到 Oracle 创建SQL*Loader输入数据所需要的文件 均保存到C:\\ 用记事本编辑 控制文件 input ctl 内容如下    load data           控制文件标识    infile test txt        要输入的数据文件名为test txt    append into table test     向表test中追加记录    fields terminated by X    字段终止于X 是一个制表符(TAB)    (id username password sj)   定义列对应顺序 a insert 为缺省方式 在数据装载开始时要求表为空 b append 在表中追加新记录 c replace 删除旧记录 替换成新装载的记录 d truncate 同上 在DOS窗口下使用SQL*Loader命令实现数据的输入 C:\\>sqlldr userid=system/manager control=input ctl 默认日志文件名为 input log 默认坏记录文件为 input bad 还有一种方法可以把EXCEL文件另存为CSV(逗号分隔)(* csv) 控制文件就改为用逗号分隔 LOAD DATA INFILE d:\\car csv APPEND INTO TABLE t_car_temp FIELDS TERMINATED BY (phoneno vip_car)

  b)在控制文件中直接导入数据

   控制文件test ctl的内容 The format for executing this file with SQL Loader is: SQLLDR control=<filename> Be sure to substitute your version of SQL LOADER and the filename for this file LOAD DATAINFILE *BADFILE C:\\Documents and Settings\\Jackey\\桌面\\WMCOUNTRY BAD DISCARDFILE C:\\Documents and Settings\\Jackey\\桌面\\WMCOUNTRY DSC INSERT INTO TABLE EMCCOUNTRYFields terminated by ; Optionally enclosed by (COUNTRYID NULLIF (COUNTRYID= NULL ) COUNTRYCODE COUNTRYNAME CONTINENTID NULLIF (CONTINENTID= NULL ) MAPID NULLIF (MAPID= NULL ) CREATETIME DATE MM/DD/YYYY HH :MI:SS NULLIF (CREATETIME= NULL ) LASTMODIFIEDTIME DATE MM/DD/YYYY HH :MI:SS NULLIF (LASTMODIFIEDTIME= NULL ))BEGINDATA ; JP ; Japan ; ; ; / / : : ;NULL ; CN ; China ; ; ; / / : : ;NULL ; IN ; India ; ; ; / / : : ;NULL ; AU ; Australia ; ; ; / / : : ;NULL ; CA ; Canada ; ; ; / / : : ;NULL ; US ; United States ; ; ; / / : : ;NULL ; MX ; Mexico ; ; ; / / : : ;NULL ; GB ; United Kingdom ; ; ; / / : : ;NULL ; DE ; Germany ; ; ; / / : : ;NULL ; FR ; France ; ; ; / / : : ;NULL ; IT ; Italy ; ; ; / / : : ;NULL ; ES ; Spain ; ; ; / / : : ;NULL ; FI ; Finland ; ; ; / / : : ;NULL ; SE ; Sweden ; ; ; / / : : ;NULL ; IE ; Ireland ; ; ; / / : : ;NULL ; NL ; Netherlands ; ; ; / / : : ;NULL ; DK ; Denmark ; ; ; / / : : ;NULL ; BR ; Brazil ; ; ; / / : : ;NULL ; KR ; Korea Republic of ; ; ; / / : : ;NULL ; NZ ; New Zealand ; ; ; / / : : ;NULL ; BE ; Belgium ; ; ; / / : : ;NULL ; AT ; Austria ; ; ; / / : : ;NULL ; NO ; Norway ; ; ; / / : : ;NULL ; LU ; Luxembourg ; ; ; / / : : ;NULL ; PT ; Portugal ; ; ; / / : : ;NULL ; GR ; Greece ; ; ; / / : : ;NULL ; IL ; Israel ; ; ; / / : : ;NULL ; CH ; Switzerland ; ; ; / / : : ;NULL ; A ; Anonymous Proxy ; ; ; / / : : ;NULL ; A ; Satellite Provider ; ; ; / / : : ;NULL ; AD ; Andorra ; ; ; / / : : ;NULL ; AE ; United Arab Emirates ; ; ; / / : : ;NULL ; AF ; Afghanistan ; ; ; / / : : ;NULL ; AG ; Antigua and Barbuda ; ; ; / / : : ;NULL ; AI ; Anguilla ; ; ; / / : : ;NULL ; AL ; Albania ; ; ; / / : : ;NULL ; AM ; armenia ; ; ; / / : : ;NULL ; AN ; Netherlands Antilles ; ; ; / / : : ;NULL ; AO ; Angola ; ; ; / / : : ;NULL ; AP ; Asia/Pacific Region ; ; ; / / : : ;NULL ; AQ ; Antarctica ; ; ; / / : : ;NULL ; AR ; Argentina ; ; ; / / : : ;NULL ; AS ; American Samoa ; ; ; / / : : ;NULL ; AW ; Aruba ; ; ; / / : : ;NULL ; AZ ; Azerbaijan ; ; ; / / : : ;NULL ; BA ; Bosnia and Herzegovina ; ; ; / / : : ;NULL ; BB ; Barbados ; ; ; / / : : ;NULL ; BD ; Bangladesh ; ; ; / / : : ;NULL ; BF ; Burkina Faso ; ; ; / / : : ;NULL ; BG ; Bulgaria ; ; ; / / : : ;NULL ; BH ; Bahrain ; ; ; / / : : ;NULL ; BI ; Burundi ; ; ; / / : : ;NULL ; BJ ; Benin ; ; ; / / : : ;NULL ; BM ; Bermuda ; ; ; / / : : ;NULL ; BN ; Brunei Darussalam ; ; ; / / : : ;NULL ; BO ; Bolivia ; ; ; / / : : ;NULL ; BS ; Bahamas ; ; ; / / : : ;NULL ; BT ; Bhutan ; ; ; / / : : ;NULL ; BV ; Bouvet Island ; ; ; / / : : ;NULL ; BW ; Botswana ; ; ; / / : : ;NULL ; BY ; Belarus ; ; ; / / : : ;NULL 执行导入命令C:\\>sqlldr userid=system/manager control=test ctl

    

    

    

    

   part ii

SQL*Loader是Oracle数据库导入外部数据的一个工具 它和DB 的Load工具相似 但有更多的选择 它支持变化的加载模式 可选的加载及多表加载   如何使用 SQL*Loader 工具  我们可以用Oracle的sqlldr工具来导入数据 例如:  sqlldr scott/tiger control=loader ctl  控制文件(loader ctl) 将加载一个外部数据文件(含分隔符) loader ctl如下:  load data  infile c:\\data\\mydata csv   into table emp  fields terminated by optionally enclosed by   ( empno empname sal deptno )  mydata csv 如下:   Scott Tiger    Frank Naude   下面是一个指定记录长度的示例控制文件 * 代表数据文件与此文件同名 即在后面使用BEGINDATA段来标识数据   load data  infile *  replace  into table departments  ( dept position ( : ) char( )   deptname position ( : ) char( )  )  begindata  COSC PUTER SCIENCE  ENGL ENGLISH LITERATURE  MATH MATHEMATICS  POLY POLITICAL SCIENCE  Unloader这样的工具  Oracle 没有提供将数据导出到一个文件的工具 但是 我们可以用SQL*Plus的select 及 format 数据来输出到一个文件   set echo off newpage space pagesize feed off head off trimspool on  spool oradata txt  select col || || col || || col   from tab   where col = XYZ ;  spool off  另外 也可以使用使用 UTL_FILE PL/SQL 包处理:  rem Remember to update initSID ora utl_file_dir= c:\\oradata parameter  declare  fp utl_file file_type;  begin  fp := utl_file fopen( c:\\oradata tab txt w );  utl_file putf(fp %s %s\\n TextField );  utl_file fclose(fp);  end;  /  当然你也可以使用第三方工具 如SQLWays TOAD for Quest等   加载可变长度或指定长度的记录  如   LOAD DATA  INFILE *  INTO TABLE load_delimited_data  FIELDS TERMINATED BY OPTIONALLY ENCLOSED BY   TRAILING NULLCOLS  ( data   data   )  BEGINDATA   AAAAAAAAAA   A B C D   下面是导入固定位置(固定长度)数据示例   LOAD DATA  INFILE *  INTO TABLE load_positional_data  ( data POSITION( : )   data POSITION( : )  )  BEGINDATA   AAAAAAAAAA   BBBBBBBBBB  跳过数据行   可以用 SKIP n 关键字来指定导入时可以跳过多少行数据 如   LOAD DATA  INFILE *  INTO TABLE load_positional_data  SKIP   ( data POSITION( : )   data POSITION( : )  )  BEGINDATA   AAAAAAAAAA   BBBBBBBBBB  导入数据时修改数据   在导入数据到数据库时 可以修改数据 注意 这仅适合于常规导入 并不适合 direct导入方式 如   LOAD DATA  INFILE *  INTO TABLE modified_data  ( rec_no my_db_sequence nextval   region CONSTANT   time_loaded to_char(SYSDATE HH :MI )   data POSITION( : ) :data /   data POSITION( : ) upper(:data )   data POSITION( : ) to_date(:data YYMMDD )   )  BEGINDATA   AAAAAAAAAA    BBBBBBBBBB   LOAD DATA  INFILE mail_orders txt   BADFILE bad_orders txt   APPEND  INTO TABLE mailing_list  FIELDS TERMINATED BY   ( addr   city   state   zipcode   mailing_addr decode(:mailing_addr null :addr :mailing_addr)   mailing_city decode(:mailing_city null :city :mailing_city)   mailing_state  )  将数据导入多个表   如:  LOAD DATA  INFILE *  REPLACE  INTO TABLE emp  WHEN empno !=   ( empno POSITION( : ) INTEGER EXTERNAL   ename POSITION( : ) CHAR   deptno POSITION( : ) CHAR   mgr POSITION( : ) INTEGER EXTERNAL  )  INTO TABLE proj  WHEN projno !=   ( projno POSITION( : ) INTEGER EXTERNAL   empno POSITION( : ) INTEGER EXTERNAL  )  导入选定的记录   如下例 ( ) 代表第一个字符 ( : ) 代表 到 之间的字符:  LOAD DATA  INFILE mydata dat BADFILE mydata bad DISCARDFILE mydata dis   APPEND  INTO TABLE my_selective_table  WHEN ( ) <> H and ( ) <> T and ( : ) =   (  region CONSTANT   service_key POSITION( : ) INTEGER EXTERNAL   call_b_no POSITION( : ) CHAR  )  导入时跳过某些字段   可用 POSTION(x:y) 来分隔数据 在Oracle i中可以通过指定 FILLER 字段实现 FILLER 字段用来跳过 忽略导入数据文件中的字段 如   LOAD DATA  TRUNCATE INTO TABLE T   FIELDS TERMINATED BY   ( field   field FILLER   field   )  导入多行记录   可以使用下面两个选项之一来实现将多行数据导入为一个记录:  CONCATENATE: use when SQL*Loader should bine the same number of physical records together to form one logical record   CONTINUEIF use if a condition indicates that multiple records should be treated as one Eg by having a # character in column   SQL*Loader 数据的提交   一般情况下是在导入数据文件数据后提交的   也可以通过指定 ROWS= 参数来指定每次提交记录数   提高 SQL*Loader 的性能    ) 一个简单而容易忽略的问题是 没有对导入的表使用任何索引和/或约束(主键) 如果这样做 甚至在使用ROWS=参数时 会很明显降低数据库导入性能    ) 可以添加 DIRECT=TRUE来提高导入数据的性能 当然 在很多情况下 不能使用此参数    ) 通过指定 UNRECOVERABLE选项 可以关闭数据库的日志 这个选项只能和 direct 一起使用    ) 可以同时运行多个导入任务   常规导入与direct导入方式的区别   常规导入可以通过使用 INSERT语句来导入数据 Direct导入可以跳过数据库的相关逻辑(DIRECT=TRUE) 而直接将数据导入到数据文件中 lishixinzhi/Article/program/Oracle/201311/17401

FPGA开发全攻略——配置电路

原文链接:

FPGA开发全攻略连载之十二:FPGA实战开发技巧(9)

FPGA开发全攻略连载之十二:FPGA实战开发技巧(10)

FPGA开发全攻略连载之十三:FPGA实战开发技巧(11)

 

5.5 FPGA相关电路设计知识

FPGA的相关电路主要就是FPGA的配置电路,其余的应用电路只要将外围芯片连接到FPGA的通用I/O管脚上即可。

5.5.1 配置电路

FPGA配置方式灵活多样,根据芯片是否能够自己主动加载配置数据分为主模式、从模式以及JTAG模式。典型的主模式都是加载片外非易失( 断电不丢数据) 性存储器中的配置比特流,配置所需的时钟信号( 称为CCLK) 由FPGA内部产生,且FPGA控制整个配置过程。从模式需要外部的主智能终端( 如处理器、微控制器或者DSP等) 将数据下载到FPGA中,其最大的优点就是FPGA 的配置数据可以放在系统的任何存储部位,包括:Flash、硬盘、网络,甚至在其余处理器的运行代码中。JTAG 模式为调试模式,可将PC 中的比特文件流下载到FPGA中,断电即丢失。此外,目前赛灵思还有基于Internet 的、成熟的可重构逻辑技术System ACE解决方案。

(1) 主模式

在主模式下,FPGA上电后,自动将配置数据从相应的外存储器读入到SRAM中,实现内部结构映射;主模式根据比特流的位宽又可以分为:串行模式( 单比特流) 和并行模式( 字节宽度比特流) 两大类。如:主串行模式、主SPI Flash 串行模式、内部主SPI Flash串行模式、主BPI 并行模式以及主并行模式,如图5-19所示。

(2) 从模式

在从模式下,FPGA 作为从属器件,由相应的控制电路或微处理器提供配置所需的时序,实现配置数据的下载。从模式也根据比特流的位宽不同分为串、并模式两类,具体包括:从串行模式、JTAG模式和从并行模式三大类,其概要说明如图5-20所示。

(3)JTAG模式

在JTAG模式中,PC和FPGA通信的时钟为JTAG接口的TCLK,数据直接从TDI进入FPGA,完成相应功能的配置。

 

技术分享

 

 

图5-19 常用主模式下载方式示意图

 

 

技术分享

 

 

图5-20 常用的从模式下载方式示意图

 

目前,主流的FPGA芯片都支持各类常用的主、从配置模式以及JTAG,以减少配置电路失配性对整体系统的影响。在主配置模式中,FPGA自己产生时钟,并从外部存储器中加载配置数据,其位宽可以为单比特或者字节;在从模式中,外部的处理器通过同步串行接口,按照比特或字节宽度将配置数据送入FPGA芯片。此外,多片FPGA可以通过JTAG菊花链的形式共享同一块外部存储器,同样一片/ 多片FPGA也可以从多片外部存储器中读取配置数据以及用户自定义数据。

Xilinx FPGA的常用配置模式有5 类:主串模式、从串模式、Select MAP模式、Desktop配置和直接SPI配置。在从串配置中,FPGA接收来自于外部PROM或其它器件的配置比特数据,在FPGA产生的时钟CCLK的作用下完成配置,多个FPGA可以形成菊花链,从同一配置源中获取数据。Select MAP模式中配置数据是并行的,是速度最快的配置模式。SPI配置主要在具有SPI接口的FLASH电路中使用。下面以Spartan-3E系列芯片为例,给出各种模式的配置电路。

5.5.2 主串模式——最常用的FPGA配置模式

1.配置单片FPGA

在主串模式下,由FPGA的CCLK管脚给PROM提供工作时钟,相应的PROM在CCLK的上升沿将数据从D0管脚送到FPGA的DIN管脚。无论PROM芯片类型( 即使其支持并行配置),都只利用其串行配置功能。Spartan3E系列FPGA的单片主串配置电路如图5-21所示。主串模式是赛灵思公司各种配置方式中最简单,也最常用的方式,基本所有的可编程芯片都支持主串模式。

 

技术分享

 

 

图5-21 Spartan-3E主串模式配置电路

 

2.配置电路的关键点

主串配置电路最关键的3点就是JTAG链的完整性、电源电压的设置以及CCLK信号的考虑。只要这3步任何一个环节出现问题,都不能正确配置PROM芯片。

(1)JTAG链的完整性

FPGA和PROM芯片都有自身的JTAG接口电路,所谓的JTAG链完整性指的是将JTAG连接器、FPGA、PROM的TMS、TCK连在一起,保证从JTAG连接器TDI到其TDO之间,形成JTAG连接器的“TDI →(TDI~TDO) → (TDI~TDO) → JTAG连接器TDO”的闭合回路,其中(TDI~TDO) 为FPGA或者PROM芯片自身的一对输入、输出管脚。图5-12中配置电路的JTAG链从连接器的TDI到FPGA的TDI,再从FPGA的TDO到PROM的TDI,最后从PROM的TDO到连接器的TDO,形成了完整的JTAG链,FPGA芯片被称为链首芯片。也可以根据需要调换FPGA和PROM的位置,使PROM成为链首芯片。

(2) 电源适配性

如图5-22所示,由于FPGA和PROM要完成数据通信,二者的接口电平必须一致,即FPGA相应分组的管脚电压Vcco_2必须和PROM Vcco的输入电压大小一致,且理想值为2.5V,这是由于FPGA的PROG_B和DONE管脚由2.5V的Vccaux供电。此外,由于JTAG连接器的电压也由2.5V的Vccaux提供,因此PROM的VCCJ也必须为2.5V。因此,如果接口电压和参考电压不同,在配置阶段需要将相应分组的管脚电压和参考电压设置为一致;在配置完成后,再将其切换到用户所需的工作电压。当然,FPGA和PROM也可以自适应3.3V的I/O电平以及JTAG电平,但需要进行一定的改动,即添加几个外部限流电阻,如图5-22所示。在主串模式下,XCFxxS系列PROM的核电压必须为3.3V,XCFxxP系列PROM的核电压必须为1.8V。

 

技术分享

 

 

图5-22 3.3V的JTAG配置电路示意图

 

图5-22中的RSER、RPAR这两个电阻要特别注意。首先,RSER= 68Ω将流入每个输入的电流限制到9.5mA ;其次,N= 3三个输入的二极管导通,

RPAR = VCCAUX min/ NIIN = 2.375V/(3*9.5mA)
=83 Ω或82 Ω ( 与标准值误差小于5%的电阻 )

(3)CCLK的信号完整性

CCLK信号是JTAG配置数据传输的时钟信号,其信号完整性非常关键。FPGA 配置电路刚开始以最低时钟工作,如果没有特别指定,将逐渐提高频率。CCLK信号是由FPGA内部产生的,对于不同的芯片和电平,其最大值如表F-1所示。

 

技术分享

 

 

表5-1 不同PROM芯片的最大配置时钟频率

 

3.配置多片FPGA

多片FPGA的配置电路和单片的类似,但是多片FPGA之间有主(Master)、从(Slave) 之分,且需要选择不同的配置模式。两片Spartan 3E系列FPGA的典型配置电路如图5-23所示,两片FPGA存在主、从地位之分。

 

技术分享

 

 

图5-23 主从模式下两片FPGA的配置电路

5.5.3 SPI串行Flash配置模式

1.SPI串行配置介绍

串行Flash的特点是占用管脚比较少,作为系统的数据存贮非常合适,一般都是采用串行外设接口(SPI 总线接口)。Flash 存贮器与EEPROM根本不同的特征就是EEPROM可以按字节进行数据的改写,而Flash只能先擦除一个区间,然后改写其内容。一般情况下,这个擦除区间叫做扇区(Sector),也有部分厂家引入了页面(Page) 的概念。选择Flash产品时,最小擦除区间是比较重要的指标。在写入Flash时,如果写入的数据不能正好是一个最小擦除区间的尺寸,就需要把整个区间的数据全部保存另外一个存贮空间,擦除这个空间,然后才能重新对这个区间改写。大多数Flash工艺更容易实现较大的擦除区间,因此较小擦除区间的Flash 其价格一般会稍贵一些。此外,SPI是标准的4线同步串行双向总线,提供控制器和外设之间的串行通信数据链路,广泛应用于嵌入式设备中。

赛灵思公司的新款FPGA都支持SPI接口。SPI总线通过4根信号线来完成主、从之间的通信,典型的SPI系统中常包含一个主设备以及至少一个从设备,在FPGA应用场合中,FPGA芯片为主设备,SPI 串行FLASH为从设备。4个SPI接口信号的名称和功能如表5-2所示。

 

技术分享

 

 

表5-2 SPI接口信号列表

 

一个主芯片和一个从芯片的通信接口如图5-24所示。FPGA通过SCLK控制双方通信的时序,在SS_n为低时,FPGA通过MOSI 信号线将数据传送到FLASH,在同一个时钟周期中,FLASH通过SOMI将数据传输到FPGA芯片。无论主、从设备,数据都是在时钟电平跳转时输出,并在下一个相反的电平跳转沿,送入另外一个芯片。

 

技术分享

 

 

图5-24 SPI接口连接示意图

 

其中SCLK信号支持不同的速率,一般常采用20MHz。通过SPI 接口中的CPOL和CPHA这两个比特定义了4种通信时序。其中,CPOL信号定义了SCLK的空闲状态,当CPOL为低时,SCLK的低电平为空闲状态,否则其空闲状态为高电平;CPHA定义了数据有效的上升沿位置,当其为低时,数据在第1 个电平跳转沿有效,否则数据在第2个电平跳转沿有效。其相应的时序逻辑如图5-25所示。

 

技术分享

 

 

图5-27 CPHA为低时SPI的总线时序示意图

 

 

技术分享

 

 

图5-28 CPHA为高时SPI的总线时序示意图

 

可以通过增加片选信号SS_n的位宽来支持多个从设备,SS_n的位宽等于从设备的个数。对于某时刻被选中的从设备和主设备而言,其读写时序逻辑和图5-29一样。

 

技术分享

 

 

图5-29 多个从芯片的连接电路图

 

SPI串行FLASH作为一种新兴的高性能非易失性存储器,其有效读写次数高达百万次,不仅引脚数量少、封装小、容量大,可以节约电路板空间,还能够降低功耗和噪声。从功能上看,可以用于代码存储以及大容量的数据和语音存储,对于以读为主,仅有少量擦写和写入时间的应用来说,支持分区( 多页) 擦除和页写入的串行存储是最佳方案。

2.SPI串行FLASH配置电路

SPI串行配置模式常用于已采用了SPI串行FLASH PROM的系统,在上电时将配置数据加载到FPGA中,这一过程只需向SPI串行发送一个4字节的指令,其后串行FLASH中的数据就像PROM配置方式一样连续加载到FPGA中。一旦配置完成,SPI中的额外存储空间还能用于其它应用目的。

1)SPI 配置电路

虽然SPI接口是标准的4线接口,但不同的SPI FLASH PROM芯片采用了不同的指令协议。FPGA芯片通过变量选择信号VS[2:0] 来定义FPGA和SPI FLASH的通信方式、FPGA的读指令以及在有效接收数据前插入的冗余比特数。常用SPI FLASH与FPGA的有效操作配置如表5-3所示,其余的VS[2:0] 配置留有它用。

 

技术分享

 

 

表5-3 赛灵思芯片所支持的SPI FLASH存储器以及配置列表

 

从整体上看来,控制SPI串行闪存比较容易,只需要使用简单的指令就能完成读取、擦除、编程、写使能/禁止以及其它功能。所有的指令都是通过4 个SPI 引脚串行移位输入的。

 

技术分享

 

 

图5-30 支持快读写的串行FLASH配置电路示意图

 

不同型号的FPGA芯片具有数目不同的从设备片选信号,因此所挂的串行芯片数目也就不一样。例如:Spartan-3E系列FPGA芯片只有1位SPI从设备片选信号,因此只能外挂一片SPI串行FLASH芯片。在SPI串行FLASH配置模式下,M[2:0]=3’b001。FPGA 上电后,通过外部SPI 串行FLASH PROM完成配置,配置时钟信号由FPGA芯片提供时钟信号,支持两类业界常用的FLASH。

图5-30给出了Spartan3E系列FPGA支持0X0B快速读写指令的STMicro 25系列PROM的典型配置电路。其中的Flash芯片需要Flash编程器来加载配置数据;单片的FPGA芯片构成了完整的JTAG链,仅用来测试芯片状态,以及支持JTAG在线调试模式,与SPI配置模式没有关系。

从中可以看出,SPI Flash容量大,适合于大规模设计场合。但由于SPI配置需要专门的Flash编程器,且操作起来比较麻烦,不适合在产品研发阶段调试FPGA芯片,因此一般还会添加JTAG链专门用于在线调试。

 

技术分享

 

 

图5-31 Atmel SPI串行FLASH配置电路示意图

 

图5-31给出了Spartan3E系列FPGA支持SPI协议的Atmel公司“C”、“D”系列串行Flash芯片的典型配置电路。这两个系列的FLASH芯片可以工作在很低温度,具有短的时钟建立时间。同样,单片的FPGA芯片构成了完整的JTAG链,仅用来测试芯片状态,以及支持JTAG在线调试模式,与SPI 配置模式没有关系。

表5-3给出了SPI配置接口的连线说明,每个SPI Flash PROM采用的名字略有不同,SPI Flash PROM的写保护信号和保持控制信号在FPGA配置阶段是不用的。其中HOLD管脚在配置阶段必须为高,为了编程Flash存储器,写保护信号必须为高。

5.5.4 从串配置模式

在串行模式下,需要微处理器或微控制器等外部主机通过同步串行接口将配置数据串行写入FPGA芯片,其模式选择信号M[2:0]=3’b111。典型的Spartan 3E系列FPGA单片配置电路如图5.5.11所示。DIN输入管脚的串行配置数据需要在外部时钟CCLK 信号前有足够的建立时间。其中单片FPGA 芯片构成了完整的JTAG链,仅用来测试芯片状态,以及支持JTAG 在线调试模式,与从串配置模式没有关系。外部主机通过下拉PROG_B启动配置并检测INIT_B 电平,当INIT_B 为高时,表明FPGA 做好准备,开始接收数据。此时,主机开始提供数据和时钟信号直到FPGA 配置完毕且DONE 管脚为高,或者INIT_B 变低表明发生配置错误才停止。整个过程需要比配置文件大小更多的时钟周期,这是由于部分时钟用于时序建立,特别当FPGA 被配置为等待DCM锁存其时钟输入。

 

技术分享

 

 

图5-32 FPGA从串配置电路示意图

 

此外,从串配置模式也可配置多片FPGA芯片,典型的两片Spartan 3E系列FPGA的从串配置电路如图5-33所示。所有芯片的CCLK信号都有主控设备提供,靠近主控设备的FPGA要充当桥梁的作用,将配置数据转发到第二个FPGA芯片。可以看到采用从串配置的好处主要在于节省电路板面积,并使得系统具备更大的灵活性。

 

技术分享

 

 

图5-33 多片FPGA从串模式配置电路

 

5.5.5 JTAG配置模式

1.JTAG配置电路

赛灵思公司的FPGA芯片具有IEEE 1149.1/1532协议所规定的JTAG接口,只要FPGA上电,不论模式选择管脚M[2:0] 的电平,都可用采用该配置模式。但是将模式配置管脚设置为JTAG模式,即M[2:0]=3’b101时,FPGA芯片上电后或者PROG_B管脚有低脉冲出现后,只能通过JTAG模式配置。JTAG模式不需要额外的掉电非易失存储器,因此通过其配置的比特文件在FPGA断电后即丢失,每次上电后都需要重新配置。由于JTAG模式已更改,配置效率高,是项目研发阶段必不可少的配置模式。典型的Spartan 3E系列芯片的JTAG配置电路如图5-34所示。

 

技术分享

 

 

图5-34 JTAG模式配置电路示意图

 

5.5.6 System ACE配置方案

随着FPGA成为系统级解决方案的核心,大型、复杂设备常需要多片大规模的FPGA。如果使用PROM进行配置,需要很大的PCB面积和高昂的成本,因此很多情况下都利用微处理由从模式配置FPGA芯片,但该配置方案容易出现总线竞争且延长了系统启动时间。为了解决大规模FPGA的配置问题,赛灵思公司推出了系统级的System ACE(Advanced Configuration Environment) 解决方案。

System ACE可在一个系统内,甚至在多个板上,对赛灵思的所有FPGA进行配置,使用Flash存储卡或微硬盘保存配置数据,通过System ACE控制器把数据配置到FPGA中。目前,System ACE有System ACE
CF(Compact Flash)、System ACE SC(Soft Controller) 以及System ACE MPM(Muti-Package Module) 三种。读者需要注意的是:System ACE SC/MPM 是和System ACE CF 独立的解决方案。典型的ACE 接口以及系统组成如图5-35 所示。

 

技术分享

 

 

图5-35 典型的ACE接口以及系统组成示意图

 

1.System ACE CF解决方案

System ACE CF的核心是System ACE CF存储设备和System ACE控制器芯片。System ACE CF存储设备包括赛灵思的ACE Flash卡或其它厂家的Compact Flash卡以及IBM的微硬盘。Compact Flash卡的容量为32MB~4GB,微硬盘的容量为2GB~6GB,至少可配置数百片FPGA芯片。

System ACE CF控制器提供了存储单元和FPGA器件之间的接口,PC和存储器的标准JTAG接口。控制器芯片默认的配置模式也是通过边界扫描的方式将数据配置到FPGA 链中,同样可由边界扫描链的测试和编程接口来辅助进行系统原形的调试,其主要特点有:

- 支持赛灵思所有FPGA芯片的配置;
- 以最小的PC板空间实现多达8Gb的配置 ;
- 包括高达152Mbps的配置速率;
- 利用带有嵌入式处理器核的FPGA进行系统调节;
- 管理多个比特流( 全部或部分),并按需要对其进行激活;
- 包含处理器核初始化;
- 软件存储加密;
- 可移动存储器件;
- 降低了定制配置系统的成本,支持大多数 CompactFlash卡,包括Microdrive单元;包含内置式微处理器接口,可以直接调整FPGA配置;释放设计资源。

 

技术分享

 

 

图5-36 System ACE CF配置电路示意图

 

Compact Flash接口是ACE控制器的关键接口,可连接Compact Flash卡、标准的Compact Flash模块以及IBM微硬盘。Compact Flash可以进行拆卸,因此对存储内容进行修改和升级以及更换容量都非常方便。Compact Flash接口由Compact Flash控制器和Compact Flash仲裁器两部分组成。由System ACE CF配置FPGA的接口电路如图5-36所示。

2.System ACE SC解决方案

System ACE SC为用户提供了自主性,用户可以自由地选择每一部分的元件,可将其置于电路板的任何位置,且所有的功能在一个独立的FPGA中完成,并不需要整合其他组件。System ACE SC有4个主要接口:边界扫描JTAG接口、系统控制接口、Flash存储器接口以及FPGA 接口,如图5-37所示。

 

技术分享

 

 

图5-37 System ACE SC接口示意图

 

其中JTAG接口主要提供边界扫描测试和对具有JTAG接口的Flash存储器通信;Flash接口主要和外边的Flash芯片通信,读取存储器内的内容以及对存储器进行编程;系统控制接口主要提供输入时钟、配置控制信号和配置状态信号等;FPGA 接口主要用于配置FPGA,可通过从串、从并以及Selec tMAP等配置模式。

System ACE SC和System ACE CF的主要区别在于,System ACE SC的控制器是一个软核逻辑,而不是芯片,需要和设计一起下载到FPFA中。其余区别如表5-4所列。

 

技术分享

 

 

表5-4 System ACE CF和System ACE SC的区别

 

典型的System ACE SC 配置电路如图5-38 所示。

 

技术分享

 

 

图5-38 System ACE SC配置电路示意图

 

3.System ACE MPM解决方案

System ACE MPM是一个整合的组件解决方案,包括FPGA和PROM组成的配置控制组件和一个Flash存储组件,并封装为一个模块,通过尽可能少的组件来实现配置电路。赛灵思公司有16M、32M 以及64M位低密度的System ACE MPM。System ACE MPM 有4 个主要接口,和System ACE SC 的接口一样,其特征和功能也与System ACE SC 一样。二者的区别在于:System ACE MPM 封装了整个配置模块,而System ACE SC 允许用户自行配置,其接口电路如图5-39 所示。

 

技术分享

 

 

图5-39 System ACE MPM接口电路示意图

 

System ACE MPM是赛灵思公司第一个支持位流压缩的配置方案,支持多种配置模式,同时可多达8个FPGA链的从串配置模式和多达4个FPGA的Select MAP配置模式,最大配置速率为152Mbps,同时又可最大限度地减小电路板空间和连线。典型的System ACE MPM 配置电路如图5-40所示。总之,System ACE技术简化了大型FPGA 系统的配置方案,令开发人员将精力主要集中在系统性能的提高和开发时间的缩短。

 

技术分享

 

 

图5-40 System ACE MPM配置电路示意图

以上是关于oraclesqlloader全攻略的主要内容,如果未能解决你的问题,请参考以下文章

Oracle12c 性能优化攻略:攻略1-3: 匹配表类型与业务需求

Oracle 11g安装图文攻略

Oracle 11g安装图文攻略

CentOS 7(同red hat)安装oracle 11g r2最全最细攻略

jdk(Java SE JDK)安装与环境变量配置攻略

oracle 11g安装-window