Xilinx UG383 Spartan-6 ブロック RAM ユーザー ガイド

Similar documents
7 シリーズ FPGA メモリ リソース ユーザー ガイド (UG473)

UltraScale アーキテクチャ メモリ リソース ユーザー ガイド (UG573)

ザイリンクス 7 シリーズ FPGA ライブラリ ガイド (HDL 用)

7 シリーズ FPGA ライブラリ ガイド (HDL 用)

Spartan-6 ライブラリ ガイド (HDL 用)

エレクトーンのお客様向けiPhone/iPad接続マニュアル

インターネット接続ガイド v110

ScanFront300/300P セットアップガイド

Virtex-6 Clocking

-2 外からみたプロセッサ GND VCC CLK A0 A1 A2 A3 A4 A A6 A7 A8 A9 A10 A11 A12 A13 A14 A1 A16 A17 A18 A19 D0 D1 D2 D3 D4 D D6 D7 D8 D9 D10 D11 D12 D13 D14 D1 MEMR

2

デザインパフォーマンス向上のためのHDLコーディング法

TH-47LFX60 / TH-47LFX6N

iPhone/iPad接続マニュアル

ScanFront 220/220P 取扱説明書

ScanFront 220/220P セットアップガイド


Chapter

オンチップ・メモリ クイック・ガイド for Cyclone III

外部SQLソース入門

QuartusII SOPC_Builderで利用できるGPIF-AVALONブリッジとは?

SOPC Builder ペリフェラル 簡易ユーザ・ガイド - PIO (Parallel I/O)


DDR3 SDRAMメモリ・インタフェースのレベリング手法の活用

WYE771W取扱説明書

DDK-7 取扱説明書 v1.10

DS-30

Xilinx XAPP645 Virtex-II Pro デバイス アプリケーション ノート『シングル エラー訂正およびダブル エラー 検出』

2-2 デザイン ガイドライン 表 2-1: 容量と分配 A10-MEMORY タイプ Arria 10 GX Arria 10 GT Arria 10 SX 製品ライン ブロック数 M20K RAM ビット数 (Kb) ブロック数 MLAB RAM ビット数 (Kb) トータル RAM ビット数

ダウンロード方法アルテラのソフトウェアをインストールするためのダウンロード ファイルには以下の種類があります.tar フォーマットのソフトウェアとデバイス ファイルの完全なセット ダウンロードとインストールをカスタマイズするための個別の実行ファイル ディスクに焼いて他の場所にインストールするための

NetVehicle GX5取扱説明書 基本編

PX-403A

スライド 1

Microsoft PowerPoint - 3.3タイミング制御.pptx

基本操作ガイド

RL78開発環境移行ガイド R8C/M16C, H8S/H8SXからRL78への移行(統合開発環境編)(High-performance Embedded Workshop→CS+)

PX-504A

PX-434A/PX-404A

DS-70000/DS-60000/DS-50000

EPSON ES-D200 パソコンでのスキャンガイド

EPSON PX-503A ユーザーズガイド

Notes and Points for TMPR454 Flash memory

untitled

操作ガイド(本体操作編)

EP-704A

ダウンロード方法 アルテラのソフトウェアをインストールするためのダウンロード ファイルには以下の種類があります.tar フォーマットのソフトウェアとデバイス ファイルがバンドルされたセット ダウンロードとインストールをカスタマイズするための個別の実行ファイル ディスクに焼いて他の場所にインストールす

操作ガイド(本体操作編)

ES-D400/ES-D350

ザイリンクス XCN 製造中止製品の通知 : CPLD、コンフィギュレーション PROM、Spartan および Virtex FPGA 製品のリビジョン制御 SCD 製品番号

EPSON EP-803A/EP-803AW ユーザーズガイド

ヤマハDante機器と他社AES67機器の接続ガイド

EPSON EP-703A ユーザーズガイド

TH-80LF50J TH-70LF50J

untitled

PLL ダイナミック リコンフィギュレーション, アプリケーション ノート (XAPP879)

PX-673F

CONTEC DIOプロバイダ ユーザーズガイド

基本操作ガイド

使用する前に

Virtex-6 FPGA で LVDS を使用した、1.25Gb/s での 4X 非同期オーバーサンプリング, アプリケーション ノート (XAPP881)

AWS Client VPN - ユーザーガイド

MusicSoft Manager

Microsoft Word - HowToSetupVault_mod.doc

インテル(R) Visual Fortran コンパイラ 10.0

AutoCAD道場-なぜ「レイアウト」がいいのか?

2ALU 以下はデータ幅 4ビットの ALU の例 加算, 減算,AND,OR の4つの演算を実行する 実際のプロセッサの ALU は, もっと多種類の演算が可能 リスト 7-2 ALU の VHDL 記述 M use IEEE.STD_LOGIC_1164.ALL; 00 : 加算 use IEE

べリンガーB-CONTROL

GT-X980

GT-F740/GT-S640

IM 21B04C50-01

GT-X830

「電子政府推奨暗号の実装」評価報告書

2

スライド 1

Veritas System Recovery 18 System Recovery Disk

ChipScope Pro ILA コアと Project Navigator を使用した FPGA アプリケーションのデバッグ

本書は INpMac v2.20(intime 5.2 INplc 3 Windows7/8/8.1に対応 ) の内容を元に記載しています Microsoft Windows Visual Studio は 米国 Microsoft Corporation の米国及びその他の国における登録商標です

2D/3D CAD データ管理導入手法実践セミナー Autodesk Vault 最新バージョン情報 Presenter Name 2013 年 4 月 2013 Autodesk

VelilogHDL 回路を「言語」で記述する

PX-B750F

PPTフォーム(white)

ザイリンクス UG382 Spartan-6 FPGA クロック リソース ユーザー ガイド

Appendix

ISim ハードウェア協調シミュレーション : Virtex-5 エンベデッド イーサネット MAC を介したライブ イーサネット トラフィックの処理

Transcription:

Spartan-6 FPGA ブロック RAM リソース ユーザーガイド

Xilinx is disclosing this user guide, manual, release note, and/or specification (the "Documentation") to you solely for use in the development of designs to operate with Xilinx hardware devices. You may not reproduce, distribute, republish, download, display, post, or transmit the Documentation in any form or by any means including, but not limited to, electronic, mechanical, photocopying, recording, or otherwise, without the prior written consent of Xilinx. Xilinx expressly disclaims any liability arising out of your use of the Documentation. Xilinx reserves the right, at its sole discretion, to change the Documentation without notice at any time. Xilinx assumes no obligation to correct any errors contained in the Documentation, or to advise you of any corrections or updates. Xilinx expressly disclaims any liability in connection with technical support or assistance that may be provided to you in connection with the Information. THE DOCUMENTATION IS DISCLOSED TO YOU AS-IS WITH NO WARRANTY OF ANY KIND. XILINX MAKES NO OTHER WARRANTIES, WHETHER EXPRESS, IMPLIED, OR STATUTORY, REGARDING THE DOCUMENTATION, INCLUDING ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NONINFRINGEMENT OF THIRD-PARTY RIGHTS. IN NO EVENT WILL XILINX BE LIABLE FOR ANY CONSEQUENTIAL, INDIRECT, EXEMPLARY, SPECIAL, OR INCIDENTAL DAMAGES, INCLUDING ANY LOSS OF DATA OR LOST PROFITS, ARISING FROM YOUR USE OF THE DOCUMENTATION. 2009-2010 Xilinx, Inc. XILINX, the Xilinx logo, Virtex, Spartan, ISE, and other designated brands included herein are trademarks of Xilinx in the United States and other countries. All other trademarks are the property of their respective owners. 改訂履歴 本書の改訂履歴は以下のとおりです 日付 バージョン 変更内容 2009 年 6 月 24 日 1.0 初期リリース 2009 年 10 月 29 日 1.1 非同期クロック に項目を追加 未使用の入力 の接続を Low に修正 2010 年 2 月 23 日 1.2 コンフィギュレーションの種類 を変更 ( 18Kb ブロック RAM - シンプルデュアルポート セクションの削除を含む ) ガイド全体でこの情報を削除 表 2 ~ 表 3 にポート名を追加 非同期クロック の説明をアップデート データおよびアドレス幅 - DATA_WIDTH_A DATA_WIDTH_B を変更 図 14 をアップデート 本資料は英語版 (v1.2) を翻訳したもので 内容に相違が生じる場合には原文を優先します 資料によっては英語版の更新に対応していないものがあります 日本語版は参考用としてご使用の上 最新情報につきましては 必ず最新英語版をご参照ください Spartan-6 FPGA ブロック RAM リソースユーザーガイド japan.xilinx.com

目次 改訂履歴........................................................................ 2 このマニュアルについてその他の資料.................................................................... 5 その他のリソース................................................................ 6 ブロック RAM リソース概要........................................................................... 7 コンフィギュレーションの種類..................................................7 9Kb ブロック RAM - シンプルデュアルポート................................8 9Kb ブロック RAM - 完全デュアルポート....................................8 18Kb ブロック RAM - 完全デュアルポート...................................9 Spartan-6 FPGA のブロック RAM の機能........................................11 Spartan-6 FPGA のブロック RAM の使用規則.....................................11 同期デュアルポートおよびシンプルデュアルポート RAM............................. 12 データフロー...............................................................12 読み出し動作...............................................................13 書き込み動作...............................................................13 書き込みモード.............................................................13 WRITE_FIRST ( 透過 ) モード ( デフォルト )...................................14 READ_FIRST ( 書き込み前に読み出し ) モード................................14 NO_CHANGE ( 変化なし ) モード...........................................15 競合の回避.................................................................15 非同期クロック.........................................................15 同期クロック...........................................................16 出力レジスタ ( オプション )....................................................16 シンプルデュアルポートブロック RAM........................................16 バイト幅書き込みイネーブル...................................................18 ブロック RAM のライブラリプリミティブ........................................... 18 ブロック RAM のポート信号...................................................... 20 クロック - CLKA CLKB (CLKAWRCLK CLKBRDCLK)........................20 イネーブル - ENA ENB (ENAWREN ENBRDEN)..............................20 バイト幅書き込みイネーブル - WEA WEB (WEAWEL WEBWEU).................20 レジスタイネーブル - REGCEA REGCEB (REGCEA REGCEBREGCE)............21 セット / リセット - RSTA RSTB (RSTA RSTBRST)..............................21 アドレスバス - ADDRA ADDRB (ADDRAWRADDR ADDRBRDADDR)..........21 データ入力バス - DIA DIB (DIADI DIBDI)....................................22 データ入力パリティ - DIPA DIPB (DIPADIP DIPBDIP)..........................22 データ出力バス - DOA DOB (DOADO DOBDO)...............................22 データ出力パリティ - DOPA DOPB (DOPADOP DOPBDOP).....................22 GSR......................................................................22 未使用の入力...............................................................22 ブロック RAM のアドレスマップ.................................................. 23 ブロック RAM の属性............................................................ 23 データおよびアドレス幅 - DATA_WIDTH_A DATA_WIDTH_B...................23 メモリ内容の初期化 - INIT_xx.................................................23 パリティメモリ内容の初期化 - INITP_xx........................................24 出力ラッチの初期化 - INIT_A INIT_B..........................................24 出力ラッチ / レジスタの同期セット / リセット - SRVAL_A SRVAL_B.................25 RAM モード - RAM_MODE...................................................25 リセットと CE の優先度 - RST_PRIORITY_A RST_PRIORITY_B..................25 Spartan-6 FPGA ブロック RAM リソースユーザーガイド japan.xilinx.com 3

データラッチリセット - EN_RSTRAM_A EN_RSTRAM_B.......................25 リセットタイプ - RSTTYPE...................................................25 オプションの出力レジスタ切り替え - DO[A B]_REG...............................25 書き込みモード - WRITE MODE_A WRITE_MODE_B...........................25 ブロック RAM のロケーション制約.............................................26 ブロック RAM の初期化.......................................................... 26 ブロック RAM プリミティブの設計上の追加注意事項.................................. 26 出力レジスタ ( オプション )....................................................26 RAMB16BWER および RAMB8BWER ポートのマップ規則.........................26 リセットの動作.............................................................27 バイト幅書き込みイネーブル...................................................27 ブロック RAM のアプリケーション................................................. 27 大型 RAM 構造の作成........................................................27 レジスタモードのブロック RAM の RST........................................28 ブロック RAM のタイミングモデル................................................ 30 ブロック RAM のタイミングパラメータ.........................................30 ブロック RAM のタイミング特性...............................................31 クロックイベント 1.....................................................31 クロックイベント 2.....................................................32 クロックイベント 4.....................................................32 クロックイベント 5.....................................................32 ブロック RAM のタイミングモデル.............................................33 4 japan.xilinx.com Spartan-6 FPGA ブロック RAM リソースユーザーガイド

このマニュアルについて このマニュアルでは すべての Spartan -6 FPGA で使用可能なブロック RAM について説明します ブロック RAM は 効率的なデータ格納またはバッファ パフォーマンスの優れたステートマシンまたは FIFO バッファ 大型シフトレジスタ 大型ルックアップテーブル ROM などに使用されます その他の資料 Spartan-6 に関するその他の情報は http://japan.xilinx.com/support/documentation/spartan-6.htm から次を参照してください Spartan-6 ファミリ概要 Spartan-6 ファミリの機能とデバイスの概要を示します Spartan-6 FPGA データシート : DC 特性およびスイッチ特性 Spartan-6 ファミリの DC 特性およびスイッチ特性が記載されています Spartan-6 FPGA パッケージおよびピン配列の仕様 デバイス / ピンの組み合わせと最大 I/O 数 ピン定義 ピン配置図 機械的図面 熱仕様が記載されています Spartan-6 FPGA コンフィギュレーションユーザーガイド コンフィギュレーションインターフェイス ( シリアルおよびパラレル ) 複数のビットストリームの管理 ビットストリームの暗号化 バウンダリスキャンおよび JTAG コンフィギュレーション リコンフィギュレーション手法など コンフィギュレーションについて詳細に説明します Spartan-6 FPGA SelectIO リソースユーザーガイド すべての Spartan-6 デバイスに含まれている SelectIO について説明します Spartan-6 FPGA クロックリソースユーザーガイド DCM および PLL を含め Spartan-6 デバイスのクロックリソースについて説明します Spartan-6 FPGA コンフィギャブルロジックブロックユーザーガイド すべての Spartan-6 デバイスで使用可能なコンフィギャブルロジックブロック (CLB) の機能について説明します Spartan-6 FPGA GTP トランシーバユーザーガイド Spartan-6 LXT FPGA で使用可能な GTP トランシーバについて説明します Spartan-6 FPGA ブロック RAM リソースユーザーガイド japan.xilinx.com 5

このマニュアルについて Spartan-6 FPGA DSP48A1 Slice User Guide Spartan-6 FPGA の DSP48A1 スライスのアーキテクチャについて説明し コンフィギュレーション例を示します Spartan-6 FPGA Memory Controller User Guide Spartan-6 FPGA のメモリコントローラブロックについて説明します メモリコントローラブロックは Spartan-6 FPGA をよく使用されるメモリ規格に接続する際のインターフェイスを簡略化するエンベデッドマルチポートメモリコントローラです Spartan-6 FPGA PCB Design Guide PCB およびインターフェイスレベルでデザインを決定するためのストラテジに焦点を置いて Spartan-6 デバイスの PCB デザインに関する情報を示します その他のリソース シリコン ソフトウェア IP に関するアンサーデータベースを検索したり テクニカルサポートのウェブケースを開く場合は 次の Web サイトにアクセスしてください http://japan.xilinx.com/support 6 japan.xilinx.com Spartan-6 FPGA ブロック RAM リソースユーザーガイド

ブロック RAM リソース 概要 Spartan -6 FPGA のブロック RAM は 最大 18K ビットのデータを格納でき 2 つの独立した 9Kb RAM または 1 つの 18Kb RAM としてコンフィギュレーションできます 各 RAM は 2 つのポートを使用してアクセスできますが シングルポート RAM としてもコンフィギュレーションできます ブロック RAM リソースには パイプラインパフォーマンスを向上するため出力レジスタが含まれています ブロック RAM は列に配置されます ブロック RAM の合計数は Spartan-6 デバイスのサイズによって異なります その他のザイリンクス FPGA のブロック RAM と同様に 書き込みと読み出しは同期動作で 2 つのポートは対称でそれぞれ完全に独立しており 格納されたデータのみを共有します 各ポートは 設定可能な幅のいずれかに個別に指定できます メモリの内容は コンフィギュレーションビットストリームで初期化またはクリアできます 書き込み処理中 データ出力をそのまま保持するか 書き込まれている新規データを出力するか 上書きされようとしている以前のデータを出力するかを指定できます デュアルポートまたはシングルポートのエンベデッド RAM モジュール ROM モジュール 同期 FIFO データ幅コンバータは CORE Generator のブロックメモリモジュールを使用すると簡単にインプリメントできます デュアルクロック FIFO は CORE Generator の FIFO Generator モジュールを使用して作成できます コンフィギュレーションの種類 完全デュアルポートモードの場合 両方のポートを個別に書き込みまたは読み出しポートに設定できます 9Kb RAM では シンプルデュアルポートモードの場合を除き データの最大幅は 18 ビットです シンプルデュアルポートモードの場合 ポート A は書き込みのみ ポート B は読み出しのみにしか設定できませんが データ幅は 36 ビットに拡張されます 完全デュアルポートモードでは 両方のブロック RAM サイズで 2 つのポートの幅を個別に設定できます シンプルデュアルポートモードでは 表 1 ~ 表 3 に示すように 9Kb RAM で x36 データ幅のコンフィギュレーションが可能です Spartan-6 FPGA ブロック RAM リソースユーザーガイド japan.xilinx.com 7

概要 9Kb ブロック RAM - シンプルデュアルポート 9Kb ブロック RAM にコンフィギュレーション可能なシンプルデュアルポートモードのポート幅の組み合わせは 表 1 のとおりです 表 1 : 9Kb ブロック RAM にコンフィギュレーション可能なシンプルデュアルポートモード ポート A ポート B パリティビットなし パリティビットあり 8K x 1 4K x 2 2K x 4 1K x 8 512 x 16 パリティビットなし パリティビットあり 8K x 1 4K x 2 2K x 4 1K x 8 512 x 16 256 x 32 1K x 9 512 x 18 256 x 36 完全デュアルポートモードを使用 不可 256 x 32 不可 可能 1K x 9 512 x 18 不可 不可 完全デュアルポートモードを使用 256 x 36 不可可能 不可 9Kb ブロック RAM - 完全デュアルポート 9Kb ブロック RAM にコンフィギュレーション可能な完全デュアルポートモードのポート幅の組み合わせは 表 2 のとおりです 表 2 : 9Kb ブロック RAM にコンフィギュレーション可能な完全デュアルポートモードポート A ポート B 8K x 1 4K x 2 2K x 4 1K x 8 512 x 16 1K x 9 512 x 18 パリティビットなし パリティビットあり 8K x 1 4K x 2 2K x 4 1K x 8 512 x 16 1K x 9 512 x 18 すべて可能 すべて不可 すべて不可 すべて可能 8 japan.xilinx.com Spartan-6 FPGA ブロック RAM リソースユーザーガイド

概要 18Kb ブロック RAM - 完全デュアルポート 18Kb ブロック RAM にコンフィギュレーション可能な完全デュアルポートモードのポート幅の組み合わせは 表 3 のとおりです 表 3 : 18Kb ブロック RAM にコンフィギュレーション可能な完全デュアルポートモード ポート A ポート B 16K x 1 8K x 2 4K x 4 2K x 8 1K x 16 512 x 32 2K x 9 1K x 18 512 x 36 パリティビットなしパリティビットあり 16K x 1 8K x 2 4K x 4 2K x 8 1K x 16 512 x 32 2K x 9 1K x 18 512 x 36 すべて可能すべて不可 すべて不可すべて可能 Spartan-6 FPGA ブロック RAM リソースユーザーガイド japan.xilinx.com 9

概要 表 4 は その他のブロック RAM の組み合わせと ADDR ポート幅を示しています 表 4 : ブロック RAM データの組み合わせと ADDR の位置 組み合わせ ワード数 データ幅 パリティ幅 データ入力および出力 ADDR RAM 合計 (Kb) パリティありとパリティなしの場合の 9Kb ブロック RAM 256x32 (1) 256 32 なし [31:0] [12:5] 8 256x36 (1) 256 32 4 [35:0] [12:5] 9 512 x16 512 16 なし [15:0] [12:4] 8 512 x18 512 16 2 [17:0] [12:4] 9 1K x 8 1024 8 なし [7:0] [12:3] 8 1K x 9 1024 8 1 [8:0] [12:3] 9 2K x 4 2048 4 なし [3:0] [12:2] 8 4K x 2 4096 2 なし [1:0] [12:1] 8 8K x 1 8192 1 なし [0:0] [12:0] 8 パリティありとパリティなしの場合の 18Kb ブロック RAM 512 x 32 512 32 なし [31:0] [13:5] 16 512 x 36 512 32 4 [35:0] [13:5] 18 1K x16 1024 16 なし [15:0] [13:4] 16 1K x18 1024 16 2 [17:0] [13:4] 18 2K x 8 2045 8 なし [7:0] [13:3] 16 2K x 9 2048 8 1 [8:0] [13:3] 18 4K x 4 4096 4 なし [3:0] [13:2] 16 8K x 2 8192 2 なし [1:0] [13:1] 16 16K x 1 16384 1 なし [0:0] [13:0] 16 メモ : 1. x32 および x36 のデータ幅はシンプルデュアルポート (SDP) モードでのみ使用可能 10 japan.xilinx.com Spartan-6 FPGA ブロック RAM リソースユーザーガイド

概要 Spartan-6 FPGA のブロック RAM の機能 ブロックごとのメモリ格納機能により 各ブロック RAM に最大で 18Kb のデータを格納できます 2 つの独立した 9Kb または 1 つの 18Kb ブロック RAM がサポートされます 各 9Kb ブロック RAM をシンプルデュアルポートモードにし ブロック RAM のデータ幅を最大 36 ビットにまで設定できます シンプルデュアルポートモードでは 読み出し専用ポートと書き込み専用ポートが 1 つずつあり それぞれが独立したクロックで動作します 同期セットピンと同期リセットピンを分離することにより オプションの出力レジスタのセット / リセットとブロック RAM の出力ラッチ段階を個別に制御できます これにより Spartan-6 FPGA ブロック RAM がその他の FPGA ファミリとさらに一致するようになり FPGA ロジックレジスタをブロック RAM ブロックにマップしやすくなります 18 または 36 ビット幅のポートには バイトごとに個別の書き込みイネーブルを含めることができます これは オンチップのマイクロプロセッサとインターフェイスする際に頻繁に使用される機能です すべての入力はポートクロックに同期して取り込まれ setup-to-clock タイミング仕様に従います すべての出力の機能は 書き込みイネーブル (WE) ピンの状態によって 読み出し または 書き込み中読み出し になります これらの出力は clock-to-out タイミングの後に有効になります 書き込み中読み出しの出力には WRITE_FIRST READ_FIRST NO_CHANGE という 3 つの動作モードがあります 書き込みには クロックエッジが 1 つ必要です 読み出しには クロックエッジが 1 つ必要です すべての出力ポートにはラッチが付いています 出力ポートの値は そのポートで別の読み込みまたは書き込みが行われない限り変化しません デフォルトでは ブロック RAM 出力はラッチモードです 出力データパスにはオプションの内部パイプラインレジスタがあります レジスタモードの使用を強く推奨します これにより 高クロックレートでの動作が可能になりますが 1 クロックサイクルのレイテンシが追加されます Spartan-6 FPGA のブロック RAM の使用規則 ブロック RAM の同期出力レジスタ ( オプション ) は DO_REG = 1 のときに RST を使用してセットまたはリセット (SRVAL) されます 同期出力ラッチは EN_RSTRAM = TRUE のときに RST を使用してセットまたはリセット (SRVAL) されます この場合 ブロック RAM はイネーブル (EN = 1) になっている必要があります ブロック RAM のアドレスピンおよび書き込みイネーブルピンのセットアップタイムに違反しないようにします アドレスセットアップタイムに違反すると 書き込みネーブルが Low であっても ブロック RAM のデータ内容が破損します Spartan-6 FPGA ブロック RAM リソースユーザーガイド japan.xilinx.com 11

同期デュアルポートおよびシンプルデュアルポート RAM 同期デュアルポートおよびシンプルデュアルポート RAM データフロー 完全デュアルポートの 18Kb ブロック RAM デュアルポートメモリは 18Kb の記憶領域と 完全に独立した 2 つのアクセスポート (A および B) で構成されています 同様に 各 9Kb ブロック RAM デュアルポートメモリは 9Kb の記憶領域と 完全に独立した 2 つのアクセスポート (A および B) で構成されています 構造は完全に対称で 両ポートは交換可能です 図 1 にデュアルポートのデータフローを示し 表 5 にポート名とその説明を示します データの書き込み / 読み出しは どちらか 1 つのポートまたは両方のポートで実行できます 書き込みは同期動作であり 各ポートにそれぞれアドレス データ入力 データ出力 クロック クロックイネーブル 書き込みイネーブルがあります 読み出しおよび書き込みは同期動作であり クロックエッジが 1 つ必要です 両方のポートで同じアドレスにアクセスした場合に それを調整する専用モニタはありません 2 つのクロックのタイミングは ユーザーの責任で調整してください 同じアドレスに同時に書き込みを実行した場合 物理的な破損はありませんが 書き込まれたデータは不確定になります X-Ref Target - Figure 1 18 Kb Block RAM DIA DIPA ADDRA WEA ENA RSTA CLKA REGCEA Port A 18 Kb Memory Array DOA DOPA DIB DIPB ADDRB WEB ENB RSTB CLKB REGCEB Port B DOB DOPB ug383_c1_01_042209 図 1 : 完全デュアルポートデータフロー 12 japan.xilinx.com Spartan-6 FPGA ブロック RAM リソースユーザーガイド

同期デュアルポートおよびシンプルデュアルポート RAM 表 5 : 完全デュアルポートの名前と説明 DI[A B] (1) DIP[A B] (1) ADDR[A B] WE[A B] EN[A B] ポート名説明 データ入力バス データ入力パリティバス アドレスバス バイト幅書き込みイネーブル 非アクティブの場合 ブロック RAM にデータは書き込まれず 出力バスが以前の状態に保持されます RST[A B] 出力レジスタを同期セット / リセット (DO_REG = 1) CLK[A B] DO[A B] (1) DOP[A B] (1) REGCE[A B] クロック入力データ出力バスデータ出力パリティバス出力レジスタクロックイネーブル メモ : 1. データパリティピンの詳細は データ入力バス - DIA DIB (DIADI DIBDI) を参照してください 読み出し動作 ラッチモードの読み出しには 1 つのクロックエッジが使用されます 読み出しアドレスが読み出しポートに取り込まれてから RAM アクセス時間の後に 格納されたデータが出力ラッチに読み込まれます 出力レジスタを使用している場合 出力でレイテンシが 1 サイクル追加されます 書き込み動作 書き込み動作は 1 つのクロックエッジで行われます 書き込みアドレスが書き込みポートに取り込まれ 入力データがメモリに格納されます 書き込みモード 書き込みクロックエッジ後に出力ラッチに現れるデータは 書き込みモードを 3 つの値 (WRITE_FIRST READ_FIRST NO_CHANGE) のいずれかに設定することで制御します 各ポートで書き込みモードを個別に設定できます デフォルトでは WRITE_FIRST に設定されています WRITE_FIRST では 出力バスに新たに書き込まれたデータが出力されます READ_FIRST では 新しくデータが書き込まれる前に 格納されていたデータが出力されます NO_CHANGE では 前回の読み出しでの出力がそのまま保持されます Spartan-6 FPGA ブロック RAM リソースユーザーガイド japan.xilinx.com 13

同期デュアルポートおよびシンプルデュアルポート RAM WRITE_FIRST ( 透過 ) モード ( デフォルト ) WRITE_FIRST モードでは 図 2 に示すように 入力データがメモリに書き込まれると同時にデータ出力に送信されます ( 透過書き込み ) ここに示す波形は オプションの出力パイプラインレジスタを使用していないラッチモードの場合のものです X-Ref Target - Figure 2 CLK WE DI XXXX 1111 2222 XXXX ADDR aa bb cc dd DO 0000 MEM(aa) 1111 2222 MEM(dd) EN Disabled Read Write MEM(bb)=1111 Write MEM(cc)=2222 Read ug383_c1_02_042209 図 2 : WRITE_FIRST モードのタイミング READ_FIRST ( 書き込み前に読み出し ) モード READ_FIRST モードでは 以前に書き込みアドレスに格納されていたデータが出力ラッチに送信され それと同時に入力データがメモリに格納されます ( 書き込み前に読み出し ) 図 3 に示す波形は オプションの出力パイプラインレジスタを使用していないラッチモードの場合のものです X-Ref Target - Figure 3 CLK WE DI XXXX 1111 2222 XXXX ADDR aa bb cc dd DO 0000 MEM(aa) old MEM(bb) old MEM(cc) MEM(dd) EN Disabled Read Write MEM(bb)=1111 Write MEM(cc)=2222 Read ug383_c1_03_042209 図 3 : READ_FIRST モードのタイミング 14 japan.xilinx.com Spartan-6 FPGA ブロック RAM リソースユーザーガイド

同期デュアルポートおよびシンプルデュアルポート RAM NO_CHANGE ( 変化なし ) モード NO_CHANGE モードでは 書き込み中出力ラッチは変化しません 図 4 に示すように データ出力には最後に読み込まれたデータがそのまま保持され 同じポートでの書き込みに影響されません ここに示す波形は オプションの出力パイプラインレジスタを使用していないラッチモードの場合のものです X-Ref Target - Figure 4 CLK WE DI XXXX 1111 2222 XXXX ADDR aa bb cc dd DO 0000 MEM(aa) MEM(dd) EN Disable Read Write MEM(bb)=1111 Write MEM(cc)=2222 Read ug383_c1_04_042209 図 4 : NO_CHANGE モードのタイミング 競合の回避 Spartan-6 FPGA のブロック RAM メモリは 両方のポートが任意のメモリ位置に随時アクセスできる完全デュアルポート RAM です ただし 2 つのポートから 1 つのメモリ位置へアクセスする際には 制限があります このようなアクセスには 両ポートで共通のクロックを使用している場合 ( 同期クロック ) と 両ポートのクロック周波数と位相が異なる場合 ( 非同期クロック ) があります 非同期クロック 非同期クロックは より一般的な状況で 両クロックのアクティブエッジは同時に発生しません 両ポートで読み出しを実行する場合 タイミングの制限はありません 1 つのポートで書き込みを実行しているときに もう 1 つのポートで同じメモリ位置への読み出しまたは書き込みは実行できません これに反すると シミュレーションモデルでエラーが発生します この制限を無視すると 読み出しまたは書き込み動作の結果が予測されないものになります ただし デバイスが物理的に破損することはありません 読み出しと書き込みが実行されると 書き込み位置に有効なデータが格納されます READ_FIRST モードでは デュアルポートブロック RAM を使用する場合にポート A と B のアドレスが競合しないようにする必要があります この制限は TDP および SDP モードの両方に適用されます 1 つのポートでの読み出し / 書き込みと もう 1 つのポートでの同じアドレスへの書き込みを同時に実行することはできません ブロック RAM の動作におけるこの制限を無視することはできません 両方のポートが 18 ビット幅以下である場合の RAMB16BWER : A13 ~ A6 および A4 を同じにすることはできません 1 つのポートが 36 ビット幅である場合の RAMB16BWER : A13 ~ A7 および A5 を同じにすることはできません RAMB16BWER のすべてのコンフィギュレーション : A12 ~ A6 および A4 を同じにすることはできません Spartan-6 FPGA ブロック RAM リソースユーザーガイド japan.xilinx.com 15

同期デュアルポートおよびシンプルデュアルポート RAM 同期クロック 同期クロックは 両ポートのクロックのアクティブエッジが同時に発生するという特殊な状況です 両ポートで読み出しを実行する場合 タイミングの制限はありません 1 つのポートで書き込みを実行しているとき もう 1 つのポートを使用して同じメモリ位置に書き込みを実行することできません ただし 両ポートで書き込むデータが同一の場合は例外です 1 つのポートで書き込みを実行しているとき 書き込みポートが READ_FIRST モードになっていれば もう 1 つのポートで同じメモリ位置から正しくデータを読み出すことができます その場合 両ポートの DATA_OUT は以前に格納されていたデータになります 書き込みポートが WRITE_FIRST または NO_CHANGE モードになっているときは 読み出しポートの DATA_OUT が無効 ( 不確定 ) になります 読み出しポートのモード設定は この動作には影響を与えません 出力レジスタ ( オプション ) オプションの出力レジスタは パイプライン処理用に CLB フリップフロップへの配線遅延を削除することで デザインのパフォーマンスを向上します これらの出力レジスタには独立したクロックイネーブル入力が供給されるため 入力レジスタとは別の値が保持されます 図 5 にオプションの出力レジスタを示します X-Ref Target - Figure 5 DO Address DI Register Memory Array (common to both ports) D Q Latches D Q Register WE EN Write Strobe Read Strobe Control Engine Latch Enable CLK Optional Inverter Configurable Options ug383_c1_05_042209 図 5 : ブロック RAM の論理図 ( ポートは 1 つ ) シンプルデュアルポートブロック RAM 各 9Kb ブロックは シンプルデュアルポート (SDP) RAM モードにもコンフィギュレーションできます このモードでは 9Kb ブロック RAM のポート幅が 2 倍の 36 ビットとなります シンプルデュアルポートモードでは ポート A を主な書き込みポート ポート B を主な読み出しポートとし 読み出しおよび書き込み動作を同時に実行できます 読み出しポートおよび書き込みポートで同時に同じデータ位置にアクセスすると競合が発生し 完全デュアルポートモードのポート競合と同じように処理されます コンフィギュレーションポートからのリードバックはシンプルデュアルポートブロック RAM モードではサポートされていません このモードでのデータフローを図 6 に示します 表 6 には SDP のポート名とその説明を示します 16 japan.xilinx.com Spartan-6 FPGA ブロック RAM リソースユーザーガイド

同期デュアルポートおよびシンプルデュアルポート RAM X-Ref Target - Figure 6 9 Kb Memory Array 32 DI DO 32 4 DIP DOP 4 4 15 WE WRADDR WRCLK WREN 15 RDEN RDADDR RDCLK REGCE RST ug383_c1_06_022010 図 6 : シンプルデュアルポートモードでのデータフロー 表 6 : シンプルデュアルポート RAM のポート名および説明 ポート名説明 DO DOP DI DIP RDADDR RDCLK RDEN REGCE RST WE WRADDR WRCLK WREN データ出力バスデータ出力パリティバスデータ入力バスデータ入力パリティバス読み出しデータアドレスバス読み出しデータクロック読み出しポートイネーブル出力レジスタクロックイネーブルデータ出力レジスタ / ラッチの同期セット / リセットバイト幅書き込みイネーブル書き込みデータアドレスバス書き込みデータクロック書き込みポートイネーブル Spartan-6 FPGA ブロック RAM リソースユーザーガイド japan.xilinx.com 17

ブロック RAM のライブラリプリミティブ バイト幅書き込みイネーブル ブロック RAM にはバイト幅の書き込みイネーブル機能があり 8 ビット (1 バイト ) 単位で入力データを書き込むことができます 完全デュアルポート RAM へのバイト幅書き込みイネーブル入力は 最高で 4 つあります 各バイト幅書き込みイネーブルは 入力データの 1 バイトと 1 パリティビットに対応しています この機能は ブロック RAM を使用してマイクロプロセッサと通信する場合に有用です バイト幅書き込みイネーブルの詳細は ブロック RAM プリミティブの設計上の追加注意事項 を参照してください 図 7 に ブロック RAM のバイト幅書き込みイネーブルのタイミング図を示します ブロック RAM を 18 ビット幅または 9 ビット幅のデータパス用にコンフィギュレーションすると データワード内で指定したバイト位置への書き込みを任意のポートで制御できます READ_FIRST モードの場合 DO バスには指定されたアドレスの以前のワード全体が出力されます WRITE_FIRST モードの場合 DO には新しく書き込まれたイネーブルになっているバイトのみが出力されます NO_CHANGE モードの場合 DO には前のクロックサイクルからの値が保持されます X-Ref Target - Figure 7 CLK WE DI 1111 0011 XXXX 1111 2222 XXXX ADDR aa bb bb cc DO 0000 MEM(aa) 1111 xx22 MEM(cc) EN Disabled Read Write MEM(bb)=1111 Byte Write MEM(bb)=1122 Read ug383_c1_07_052909 ブロック RAM のライブラリプリミティブ 図 7 : バイト書き込み動作の波形 (x36 WRITE_FIRST) Spartan-6 FPGA ブロック RAM のライブラリプリミティブ RAMB16BWER および RAMB8BWER は すべてのブロック RAM コンフィギュレーションの基本ブロックです その他のブロック RAM プリミティブおよびマクロは これらのプリミティブを基にしています ブロック RAM の属性によっては これらの中の 1 つのプリミティブを使用するだけでコンフィギュレーションできます 詳細は ブロック RAM の属性 を参照してください 図 8 に 18Kb の完全デュアルポートの RAM プリミティブ (RAMB16BWER) の I/O ポートを 図 9 に 9Kb のデュアルポートブロック RAM プリミティブ (RAMB8BWER) を示します 表 7 には 9Kb および 18Kb プリミティブをリストします 18 japan.xilinx.com Spartan-6 FPGA ブロック RAM リソースユーザーガイド

ブロック RAM のライブラリプリミティブ X-Ref Target - Figure 8 32 4 14 4 DIA DIPA ADDRA WEA ENA REGCEA RSTA CLKA DOA DOPA 32 4 32 4 14 4 DIB DIPB ADDRB WEB ENB REGCEB RSTB DOB DOPB 32 4 CLKB ug383_c1_08_042209 図 8 : ブロック RAM ポート信号 (RAMB16BWER) X-Ref Target - Figure 9 16 2 13 2 DIADI DIPADIP ADDRAWRADDR DOADO WEAWEL DOPADOP ENAWREN REGCEA RSTA CLKAWRCLK 16 2 16 2 13 2 DIBDI DIPBDIP ADDRBRDADDR WEAWEU ENBRDEN REGCEBREGCE RSTBRST DOBDO DOPBDOP 16 2 CLKBRDCLK ug383_c1_09_042309 図 9 : ブロック RAM ポート信号 (RAMB8BWER) Spartan-6 FPGA ブロック RAM リソースユーザーガイド japan.xilinx.com 19

ブロック RAM のポート信号 表 7 : Spartan-6 FPGA のブロック RAM プリミティブ プリミティブ RAMB8BWER RAMB16BWER 説明 サポートされるデータ幅 : x1 x2 x4 x8 x16 x32 ( およびパリティビット付きの x9 x18 x36) サポートされるデータ幅 : x1 x2 x4 x8 x16 x32 ( およびパリティビット付きの x9 x18 x36) メモ : 1. プリミティブについては ソフトウェアのライブラリガイドおよび言語テンプレートで説明されています ブロック RAM のポート信号 ブロック RAM の各ポートは 同じ 9Kb または 18Kb メモリセルのセットにアクセスしますが 動作はそれぞれ独立しています RAMB16BWER と RAMB8BWER プリミティブのポート名は異なります 次のセクションでは RAMB16BWER のポート名を最初に RAMB8BWER のポート名をかっこ内にします クロック - CLKA CLKB (CLKAWRCLK CLKBRDCLK) 各ポートは それぞれのクロックピンに完全に同期します すべてのポート入力ピンのセットアップタイムは CLK ピンのポートを基準としています また 出力データバスの clock-to-out タイムも CLK ピンを基準とします クロックの極性はコンフィギュレーション可能で デフォルトは立ち上がりエッジに設定されています 完全デュアルポート (TDP) モード (RAM_MODE = TDP) の RAMB8BWER の場合 CLKAWRCLK と CLKBRDCLK がそれぞれのポートのクロック入力になります SDP モード (RAM_MODE = SDP) の場合 CLKAWRCLK が書き込みクロック入力 CLKBRDCLK が読み出しクロック入力になります イネーブル - ENA ENB (ENAWREN ENBRDEN) ポートの読み出し 書き込み およびセット / リセット機能を制御します ポートのイネーブルピンが非アクティブのときは 出力ピンは前の状態を保持し データはメモリセルに書き込まれません イネーブルの極性はコンフィギュレーション可能で デフォルトではアクティブ High に設定されています TDP モード (RAM_MODE = TDP) の RAMB8BWER の場合 ENAWREN と ENBRDEN がそれぞれのポートのイネーブル入力になります SDP モードの場合は ENAWREN が書き込みイネーブル ENBRDEN が読み出しイネーブルになります バイト幅書き込みイネーブル - WEA WEB (WEAWEL WEBWEU) データ入力バスの内容を指定したメモリ位置に書き込むには クロックの立ち上がりエッジのセットアップタイム前までに EN と WE の両方をアクティブにする必要があります データが出力ラッチに読み込まれるかどうかは 書き込みモード (WRITE_FIRST READ_FIRST NO_CHANGE) の設定によって決まります 非アクティブの場合は 読み出し処理が行われ 書き込みモードの設定に関わらず アドレスバスで指定されたメモリセルの内容がデータ出力バスに送信されます 書き込みイネーブルの極性はコンフィギュレーション可能で デフォルトはアクティブ High に設定されています 20 japan.xilinx.com Spartan-6 FPGA ブロック RAM リソースユーザーガイド

ブロック RAM のポート信号 TDP モード (RAM_MODE = TDP) の RAMB8BWER の場合 WEAWEL と WEBWEU がそれぞれのポートのバイトイネーブル入力になります SDP モードの場合 WEAWEL が下位 2 バイトの書き込みイネーブルで WEBWEU が上位バイトの書き込みイネーブルになります レジスタイネーブル - REGCEA REGCEB (REGCEA REGCEBREGCE) オプションの出力レジスタを制御します RAM がレジスタモードの場合 REGCE = 1 と指定すると クロックエッジで出力がレジスタに取り込まれます REGCE の極性はコンフィギュレーション可能で デフォルトではアクティブ High に設定されています TDP モード (RAM_MODE = TDP) の RAMB8BWER の場合 REGCEA と REGCEBREGCE がそれぞれのポートのレジスタクロックイネーブル入力になります SDP モードの場合 REGCEA は未使用なので ロジック 0 に接続されている必要があります REGCEBREGCE は 読み出しポートのレジスタイネーブルになります セット / リセット - RSTA RSTB (RSTA RSTBRST) ラッチモードでは RST ピンがアクティブになると データ出力ラッチの値が SRVAL の値になります この動作は RSTTYPE 属性の値によって同期または非同期になります 詳細は 23 ページの ブロック RAM の属性 を参照してください オプションの出力レジスタがイネーブルの場合 (DO_REG = 1) RST 信号によりデータ出力レジスタの値が SRVAL の値になります RST_PRIORITY 属性を使用すると RST と REGCE のどちらを優先するかを指定できます データ出力レジスタは パリティビットを含めて 0 または 1 にアサートされます EN_RSTRAM 属性の設定によっては データ出力ラッチが RST ポートでもリセットされます 各ポートには それぞれ 36 ビットの SRVAL[A B] 属性が指定されます この動作により RAM メモリセルが変化することはなく もう 1 つのポートでの書き込みにも影響しません セット / リセット機能も 読み込み / 書き込みと同様に そのポートのイネーブルピンがアクティブな場合にのみ有効となります 両方の信号の極性はコンフィギュレーション可能で デフォルトではアクティブ High に設定されています TDP モード (RAM_MODE = TDP) の RAMB8BWER の場合 RSTA と RSTBRST がそれぞれのポートのセット / リセット入力になります SDP モードの場合 RSTA は未使用なので ロジック 0 に接続されている必要があります RSTBRST は 読み出しポートのセット / リセットになります アドレスバス - ADDRA ADDRB (ADDRAWRADDR ADDRBRDADDR) 読み込みまたは書き込みを行うメモリセルを選択します 表 4 に示すように 1 つのブロック RAM に必要なアドレスバス幅は ポートのデータビット幅によって決まります データ幅は DATA_WIDTH_[A B] 属性によって定義されます TDP モード (RAM_MODE = TDP) の RAMB8BWER の場合 ADDRAWRADDR と ADDRBRDADDR がそれぞれのポートのイネーブル入力になります SDP モード (RAM_MODE=SDP) の場合 ADDRBRDADDR が書き込みポートのアドレス入力 ADDRBRDADDR が読み出しポートの入力になります データおよびアドレスピンのマップについては ブロック RAM プリミティブの設計上の追加注意事項 で詳しく説明しています Spartan-6 FPGA ブロック RAM リソースユーザーガイド japan.xilinx.com 21

ブロック RAM のポート信号 データ入力バス - DIA DIB (DIADI DIBDI) RAM に書き込むデータ値を供給します パリティデータ入力バス ( 使用可能な場合 ) を含む通常のデータ入力バス (DI) の幅を合計すると ポート幅になります たとえば 表 4 に示すように 36 ビットポートのデータ幅は DI[31:0] とそのパリティビットの DIP[3:0] で表されます データ幅は DATA_WIDTH_[A B] 属性によって定義されます TDP モード (RAM_MODE = TDP) の RAMB8BWER の場合 DIADI と DIBDI がそれぞれのポートのデータ入力になります SDP モード (RAM_MODE=SDP) の場合は DIADI が下位ビット DIBDI が上位ビットを示します ( データ幅が 16 ビットを超える場合 ) データ入力パリティ - DIPA DIPB (DIPADIP DIPBDIP) RAM のパリティビットに書き込むデータ値を供給します メモリのこの部分は パリティビットを格納するためのものですが 必要に応じて追加データにも使用できます パリティビットを計算したり 検証するためのロジックは ブロック RAM にはありません TDP モードの場合 DIPADIP と DIPBDIP がそれぞれのポートのパリティデータ入力になります SDP モードの場合 DIPADIP が下位 2 ビットのパリティで DIPBDIP が上位 2 ビットのパリティになります データ出力バス - DOA DOB (DOADO DOBDO) 読み出しでは 最後のアクティブなクロックエッジでアドレスバスにより指定されたメモリセルの内容が データ出力バスに送信されます WRITE_FIRST または READ_FIRST モードの書き込みでは 書き込み中の値または書き込み前に保存されていた値がデータ出力バスに送信されます NO_CHANGE モードの書き込みでは データ出力バスは変化しません TDP モード (RAM_MODE = TDP) の RAMB8BWER の場合 DOADO と DOBDO がそれぞれのポートの出力になります SDP モード (RAM_MODE=SDP) の場合は DOADO が下位ビット DOBDO が上位ビットを示します ( データ幅が 16 ビットを超える場合 ) データ出力パリティ - DOPA DOPB (DOPADOP DOPBDOP) GSR パリティデータに割り当てられたメモリセルの内容が出力されます データは データ出力バスと同様にバスに出力されます TDP モード (RAM_MODE = TDP) の RAMB8BWER の場合 DOPADOP と DOPBDOP がそれぞれのポートの出力になります SDP モードの場合 DOPADOP が下位バイトのパリティビット DOPBDOP が上位バイトのパリティビットになります Spartan-6 デバイスのグローバルセット / リセット (GSR) 信号は デバイスのコンフィギュレーション終了時にアクティブになる非同期のグローバル信号です GSR を使用すると Spartan-6 デバイスの初期状態をいつでも復元できます GSR により 出力ラッチは INIT ( シンプルデュアルポート ) または INIT_A および INIT_B の値 ( 完全デュアルポート ) に初期化されます 詳細は ブロック RAM の属性 を参照してください GSR 信号により 内部メモリの内容が変わることはありません GSR はグローバル信号なので ファンクションレベル ( ブロック RAM プリミティブ ) の入力ピンはありません 未使用の入力 未使用のデータ入力またはアドレス入力は Low に接続する必要があります 22 japan.xilinx.com Spartan-6 FPGA ブロック RAM リソースユーザーガイド

ブロック RAM のアドレスマップ ブロック RAM のアドレスマップ 表 8 : ポートアドレスマップ 各ポートは 9Kb RAM であるか 18Kb RAM であるかによって異なるアドレス指定方法を使用して 同じ 9,216 個または 18,432 個のメモリセルにアクセスします 特定のポート幅で指定される物理的な RAM の位置は 次の式によって決定されます (2 つのポートが異なる比率の場合のみ参照 ) END = ((ADDR + 1) Width) -1 START = ADDR Width 表 8 に 各ポート幅の下位のアドレスマップを示します ポート 幅 パリティ 位置 データ位置 1 なし 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9876543210 2 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 4 7 6 5 4 3 2 1 0 8 + 1 3 2 1 0 3 2 1 0 16 + 2 1 0 1 0 32 + 4 0 0 ブロック RAM の属性 すべての属性コード例は ブロック RAM の初期化 に記載されています これらの属性の使用については ブロック RAM プリミティブの設計上の追加注意事項 で詳細に説明しています データおよびアドレス幅 - DATA_WIDTH_A DATA_WIDTH_B 各ポートのデータバスとアドレスバスの幅を定義します リストされているデータ幅の有効な組み合わせは 0 ( デフォルト ) 1 2 4 9 18 および 36 で 9 18 36 にはパリティビットが含まれます シンプルデュアルポートモードの 9Kb ブロック RAM では DATA_WIDTH に設定可能な値は 36 のみです シンプルまたは完全デュアルポートモードの 18Kb ブロック RAM あるいは完全デュアルポートモードの 9Kb ブロック RAM では DATA_WIDTH を任意の組み合わせに設定できます データ幅に基づくアドレス幅は 表 4 のようになります メモリ内容の初期化 - INIT_xx メモリの初期内容を定義します デフォルトでは ブロック RAM メモリはデバイスのコンフィギュレーションシーケンス中にすべて 0 に初期化されます 9Kb ブロック RAM の INIT_00 ~ INIT_1F 初期化属性 18Kb ブロック RAM の INIT_00 ~ INIT_3F 初期化属性は 通常のメモリ内容を指定します パリティメモリの内容は INITP 属性を使用して初期化します 各 INIT_xx は 16 進数で表した 64 桁のビットベクタです メモリは一部だけを初期化することも可能です この場合 初期値を指定した部分以外は自動的に 0 になります 各 INIT_xx 属性のビット位置は 次の式で決定されます 16 進数 (xx) を 10 進数に変換した値を yy とすると INIT_xx は次のメモリセルに対応します 開始セル : [(yy + 1) 256] 1 終了セル : (yy) 256 Spartan-6 FPGA ブロック RAM リソースユーザーガイド japan.xilinx.com 23

ブロック RAM の属性 たとえば 属性 INIT_1F の場合は次のようになります yy = 16 進数 (xx) 1F を 10 進数に変換した値 = 31 開始セル : [(31+1) 256] 1 = 8191 終了セル : 31 256 = 7936 その他の例を表 9 に示します 表 9 : ブロック RAM の初期化属性 メモリ位置 属性 開始位置 終了位置 INIT_00 255 0 INIT_01 511 256 INIT_02 767 512 INIT_0E 3839 3584 INIT_0F 4095 3840 INIT_10 4351 4096 INIT_1F 8191 7936 INIT_20 8447 8192 INIT_2F 12287 12032 INIT_30 12543 12288 INIT_3F 16383 16128 パリティメモリ内容の初期化 - INITP_xx パリティビットに対応するメモリセルの初期内容を定義します デフォルトでは これらのメモリセルもすべて 0 に初期化されます 初期化属性で パリティビットのメモリ内容を指定します 初期化属性は 9Kb ブロック RAM では INITP_00 ~ INITP_03 18Kb ブロック RAM では INIT_00 ~ INITP_07 です 各 INITP_xx は 16 進数で表した 64 桁のビットベクタで INIT_xx 属性と同様に機能します 特定の INITP_xx 属性で初期化するビット位置も 同じ式で計算されます 出力ラッチの初期化 - INIT_A INIT_B コンフィギュレーション後の出力ラッチまたは出力レジスタの値を定義します これらの属性は 16 進数のビットベクタで デフォルトは 0 です TDP モードの場合 INIT_A がポート A に INIT_B がポート B になり SDP モードの場合は INIT_A が下位出力ビットに INIT_B が上位出力ビットになります 24 japan.xilinx.com Spartan-6 FPGA ブロック RAM リソースユーザーガイド

ブロック RAM の属性 出力ラッチ / レジスタの同期セット / リセット - SRVAL_A SRVAL_B RST 入力がアサートされた際の出力ラッチの値を定義します これらの属性の幅がポート幅になります これらの属性は 16 進数のビットベクタで デフォルト値は 0 です オプションの出力レジスタ属性が設定されている場合は 出力レジスタ値を指定します レジスタが未使用のときは ラッチが SRVAL に指定されます パリティを使用する場合は 最上位ビット (MSB) がそのパリティビットになります TDP モードの場合 SRVAL_A がポート A に SRVAL_B がポート B になります SDP モードの場合 SRVAL_A が下位 18 ビット ( パリティ 2 ビットを含む ) に SRVAL_B が上位ビット ( パリティ 2 ビットを含む ) になります RAM モード - RAM_MODE この属性は RAMB8BWER に対してのみ必要で ブロック RAM を完全デュアルポート RAM ( 読み出しおよび書き込み用にバスが 2 つ ) またはシンプルデュアルポート RAM ( ポート B が読み出し専用 ポート A は書き込み用 ) のどちらとして使用するかを指定します 有効な値は TDP ( デフォルト ) または SDP です リセットと CE の優先度 - RST_PRIORITY_A RST_PRIORITY_B 出力レジスタを使用する場合は この属性で RST と REGCE のどちらを優先するかを指定できます レジスタの代わりに出力ラッチを使用する場合は RST と EN のどちらを優先するかを指定できます 有効な値は SR ( デフォルト ) または CE です データラッチリセット - EN_RSTRAM_A EN_RSTRAM_B RST ポートでブロック RAM 出力のラッチをリセットするかどうかを指定します 有効な値は TRUE または FALSE ( デフォルト ) です リセットタイプ - RSTTYPE ブロック RAM 出力を同期でリセットするか 非同期でリセットするかを指定します 値は SYNC ( デフォルト ) または ASYNC に設定できますが 非同期リセットよりも同期リセットを使用することをお勧めします 詳細は リセットの動作 を参照してください オプションの出力レジスタ切り替え - DO[A B]_REG ブロック RAM の A/B 出力でのパイプラインレジスタをイネーブルにするかどうかを指定します 有効な値は 0 ( デフォルト ) または 1 です 書き込みモード - WRITE MODE_A WRITE_MODE_B A/B 入力ポートの書き込みモードを指定します 有効な値は WRITE_FIRST READ_FIRST および NO_CHANGE で デフォルト値は WRITE_FIRST です 書き込みモードの詳細は 書き込みモード を参照してください Spartan-6 FPGA ブロック RAM リソースユーザーガイド japan.xilinx.com 25

ブロック RAM の初期化 ブロック RAM のロケーション制約 ブロック RAM のインスタンスに LOC プロパティを指定すると 配置を制約できます ブロック RAM の配置位置の表記方法は CLB 位置の表記方法とは異なり LOC プロパティを別の配列でも容易に使用できるようになっています 18Kb ブロック RAM では RAMB16 のロケーション識別を使用して パリティビットを含まない RAM の容量を示します 9Kb ブロック RAM では 次のような RAMB8 の表記を使用します LOC プロパティは 次の形式で指定します LOC = RAMB16_X#Y#; LOC = RAMB8_X#Y#; RAMB16_X0Y0 は デバイスの左下にある 18 Kb ブロック RAM の位置です 18 Kb RAM が RAMB16_X0Y0 に制約される場合 9Kb RAM はこれと位置を共有するので RAMB8_X0Y0 または RAMB8_X0Y1 に制約できません ブロック RAM の初期化 ブロック RAM メモリの属性および内容は インスタンシエートされたコンポーネント内で generic map (VHDL) または defparam (Verilog) を使用して 合成およびシミュレーション用に VHDL または Verilog コードで初期化できます generic map または defparam の値を変更すると シミュレーションビヘイビアとインプリメンテーション結果に影響します Spartan-6 のライブラリガイドには 18Kb および 9Kb ブロック RAM を初期化するためのコードが記載されています ブロック RAM プリミティブの設計上の追加注意事項 出力レジスタ ( オプション ) オプションの出力レジスタは RAMB16BWER および RAMB8BWER の A B 出力ポートのいずれか または両方に使用できます 使用ポートは DO[A B]_REG 属性を使用して指定します 独立した 2 つのクロックイネーブルピンは REGCE[A B] です ポート [A B] でオプションの出力レジスタを使用する場合 ポート [A B] の同期セット / リセット (RST) ピンをアサートすると 属性 SRVAL で指定された値がレジスタを介して出力されます 図 5 にオプションの出力レジスタを示します RAMB16BWER および RAMB8BWER ポートのマップ規則 Spartan-6 FPGA ブロック RAM は さまざまなポート幅とサイズにコンフィギュレーションできます コンフィギュレーションによっては 一部のデータピンとアドレスピンが未使用となります 表 4 は さまざまなコンフィギュレーションで使用されるピンを示しています 表 4 の情報に加え 次の規則に基づいてブロック RAM のポート接続を決定します RAMB16BWER を使用していて DI[A B] ピンの幅が 32 ビット未満の場合 (32 - DI_BIT_WIDTH) の数のロジック 0 を DI[A B] の前に連結します RAMB8BWER を使用していて DI[A B] ピンの幅が 16 ビット未満の場合 (16 - DI_BIT_WIDTH) の数のロジック 0 を DI[A B] の前に連結します RAMB16BWER を使用していて DIP[A B] ピンの幅が 4 ビット未満の場合 (4 - DIP_BIT_WIDTH) の数のロジック 0 を DIP[A B] の前に連結します RAMB8BWER を使用していて DIP[A B] ピンの幅が 2 ビット未満の場合 (2 - DIP_BIT_WIDTH) の数のロジック 0 を DIP[A B] の前に連結します 26 japan.xilinx.com Spartan-6 FPGA ブロック RAM リソースユーザーガイド

ブロック RAM のアプリケーション RAMB16BWER を使用する場合 DO[A B] ピンの幅は 32 ビットにする必要があります ただし (DO_BIT_WIDTH - 1) から 0 までのピンのデータのみが有効です RAMB16BWER を使用する場合 DOP[A B] ピンの幅は 4 ビットにする必要があります RAMB8BWER を使用する場合 DOP[A B] ピンの幅は 2 ビットにする必要があります ただし (DOP_BIT_WIDTH - 1) から 0 までのピンのデータのみが有効です DOP[A B] を使用していない場合は 未接続のままにできます RAMB16BWER を使用する場合 ADDR[A B] ピンの幅は 14 ビットにする必要があります RAMB8BWER を使用する場合 ADDR[A B] ピンの幅は 13 ビットにする必要があります アドレス幅は 表 4 に記載されています リセットの動作 ブロック RAM のラッチまたはレジスタの初期値は RSTTYPE = ASYNC の場合は SR_VAL で RSTTYPE = SYNC の場合は INIT で定義されます リセットタイプが ASYNC で INIT 値が使用されている場合 コンフィギュレーション後に GSR を適用する必要があります バイト幅書き込みイネーブル バイト幅書き込みイネーブルを使用する場合は 次の規則に従ってください x36 モードの場合 WE[3:0] を 4 つのユーザー WE 入力に接続します x18 モードの場合 WE[0] および WE[2] はユーザー WE[0] で駆動し WE[1] および WE[3] はユーザー WE[1] で駆動します x9 x4 x2 x1 モードの場合 WE[3:0] はすべて 1 つのユーザー WE に接続されます ブロック RAM のアプリケーション 大型 RAM 構造の作成 CORE Generator では 複数のブロック RAM インスタンスを使用して ビット数およびワード数の多いメモリ構造を簡単に生成できます このツールでは VHDL または Verilog のインスタンシエーションテンプレートやシミュレーションモデル デザインに含める EDIF ファイルが出力されます Spartan-6 FPGA ブロック RAM リソースユーザーガイド japan.xilinx.com 27

ブロック RAM のアプリケーション レジスタモードのブロック RAM の RST ブロック RAM の RST をレジスタモードで使用すると 出力レジスタをブロック RAM から独立したパイプラインレジスタとして制御できます 図 10 は ブロック RAM の読み出しおよび書き込みが レジスタイネーブルまたはセット / リセットとは独立して実行されているところを示しています レジスタモードでは RST により DO が SRVAL に設定され ブロック RAM から DBRAM へのデータ読み出しが可能です DBRAM でのデータは 次のサイクルでクロック出力 (DO) に送信できます 図 11 および図 12 のタイミング図は 別の RST の例を示しています X-Ref Target - Figure 10 DI EN BRAM_RAMEN DBRAM DO BRAM_RST REGCE RST 図 10 : レジスタモードのブロック RAM の RST ug383_c1_09_042209 X-Ref Target - Figure 11 CLK EN REGCE RST DBRAM D0 D1 D2 D3 DO D0 SRVAL D1 SRVAL D2 図 11 : レジスタモードでの RST 動作 (REGEN = High) ug383_c1_10_042209 28 japan.xilinx.com Spartan-6 FPGA ブロック RAM リソースユーザーガイド

ブロック RAM のアプリケーション X-Ref Target - Figure 12 CLK EN REGCE RST DBRAM D0 D1 D2 D3 DO D0 SRVAL D1 D2 ug383_c1_11_042209 図 12 : レジスタモードでの RST 動作 (REGEN = 変数 ) Spartan-6 FPGA ブロック RAM リソースユーザーガイド japan.xilinx.com 29

ブロック RAM のタイミングモデル ブロック RAM のタイミングモデル ここでは Spartan-6 デバイスのブロック RAM に関連するタイミングパラメータについて説明します ( 図 13 を参照 ) Spartan-6 FPGA データシートのスイッチ特性のセクションや ザイリンクスソフトウェアの Timing Analyzer (TRACE) から出力されるレポートも参考にしてください ブロック RAM のタイミングパラメータ 表 10 は Spartan-6 FPGA のブロック RAM のタイミングパラメータを示しています 表 10 : ブロック RAM のタイミングパラメータパラメータファンクション制御信号説明クロック (CLK) に対するセットアップとホールド T RxCK_x = セットアップタイム ( クロックエッジ前 ) および T RCKx_x = ホールドタイム ( クロックエッジ後 ) T RCCK_ADDR T RCKC_ADDR アドレス入力 ADDR クロック前までに ブロック RAM の ADDR 入力で アドレス信号が安定している必要のある時間 (1) クロック後に ブロック RAM の ADDR 入力で アドレス信号が安定している必要のある時間 (1) T RDCK_DI T RCKD_DI データ入力 DI クロック前に ブロック RAM の DI 入力で データが安定している必要のある時間 クロック後に ブロック RAM の DI 入力でデータが安定している必要のある時間 T RCCK_EN T RCKC_EN イネーブル EN クロック前に ブロック RAM の EN 入力で イネーブル信号が安定している必要のある時間 クロック後に ブロック RAM の EN 入力でイネーブル信号が安定している必要のある時間 T RCCK_RST T RCKC_RST 同期セット / リセット RST クロック前に ブロック RAM の RST 入力で 同期セット / リセット信号が安定している必要のある時間 クロック後に ブロック RAM の RST 入力で同期セット / リセット信号が安定している必要のある時間 T RCCK_WE T RCKC_WE 書き込みイネーブル WE クロック前に ブロック RAM の WE 入力で 書き込みイネーブル信号が安定している必要のある時間 クロック後に ブロック RAM の WE 入力で書き込みイネーブル信号が安定している必要のある時間 T RCCK_REGCE T RCKC_REGCE 出力レジスタイネーブル ( オプション ) REGCE クロック前までに ブロック RAM の REGCE 入力でレジスタイネーブル信号が安定している必要のある時間 クロック後に ブロック RAM の REGCE 入力でレジスタイネーブル信号が安定している必要のある時間 Clock-to-Out 遅延 T RCKO_DO ( ラッチモード ) クロックから出力 CLK から DO クロック後に ブロック RAM の DO 出力で出力データが安定するまでの時間 ( 出力レジスタを使用しない場合 ) 30 japan.xilinx.com Spartan-6 FPGA ブロック RAM リソースユーザーガイド

ブロック RAM のタイミングモデル 表 10 : ブロック RAM のタイミングパラメータ ( 続き ) パラメータファンクション制御信号説明 T RCKO_DO_REG ( レジスタモード ) クロックから出力 CLK から DO クロック後に ブロック RAM の DO 出力で出力データが安定するまでの時間 ( 出力レジスタを使用した場合 ) メモ : 1. WE が非アクティブでも EN がアクティブの場合は セットアップ / ホールドタイム中は ADDR 入力が安定している必要があります この要件に違反すると ブロック RAM でデータが破損する可能性があります ADDR タイミングが指定した要件に反する場合 EN は非アクティブ ( ディスエーブル ) にする必要があります ブロック RAM のタイミング特性 図 13 のタイミング図は オプションの出力レジスタを使用しない WRITE_FIRST モードのシングルポートブロック RAM を示しています READ_FIRST モードと NO_CHANGE モードのタイミングは WRITE_FIRST モードと類似しています オプションの出力レジスタを使用すると DO ピンでクロックレイテンシが追加されます ここに示す波形は オプションの出力パイプラインレジスタを使用しないラッチモードの場合のものです X-Ref Target - Figure 13 1 2 3 4 5 CLK ADDR DI DO EN RST WE Disabled T RCCK_ADDR 00 T RDCK_DI DDDD T RCKO_DO MEM (00) T RCCK_EN T RCCK_WE 0F 7E 8F 20 CCCC BBBB AAAA 0000 CCCC (1) MEM (7E) 0101 (2) T RCCK_RST Read Write Read Reset Disabled Note 1: Write Mode = WRITE_FIRST Note 2: SRVAL = 0101 ug383_c1_12_042209 0 の時点では EN ( イネーブル ) は Low であるため ブロック RAM はディスエーブルです クロックイベント 1 読み出し 図 13 : ブロック RAM のタイミング図 読み出しでは ADDR 入力のアドレス位置のメモリ内容は変更しません クロックイベント 1 より T RCCK_ADDR 時間前に アドレス 00 がブロック RAM の ADDR 入力で有効になります クロックイベント 1 より T RCCK_EN 時間前に イネーブルがブロック RAM の EN 入力で High になり 読み出しを実行できるようにメモリがイネーブルになります クロックイベント 1 より T RCKO_DO 時間後に アドレス 00 のメモリ内容がブロック RAM の DO ピンで安定します Spartan-6 FPGA ブロック RAM リソースユーザーガイド japan.xilinx.com 31

ブロック RAM のタイミングモデル EN がアサートされている場合は常に すべてのアドレス変更が指定のセットアップおよびホールド仕様を満たす必要があります 非同期でのアドレス変更は メモリ内容およびブロック RAM の機能に予想外の影響を与える可能性があります クロックイベント 2 書き込み 書き込みでは 書き込みイネーブル (WE) が High になると ADDR 入力のアドレスで指定された位置のメモリ内容が DI ピンの値に置き換えられ すぐに出力ラッチに反映されます (WRITE_FIRST モード ) クロックイベント 2 より T RCCK_ADDR 時間前に アドレス 0F がブロック RAM の ADDR 入力で有効になります クロックイベント 2 より T RDCK_DI 時間前に データ CCCC がブロック RAM の DI 入力で有効になります クロックイベント 2 より T RCCK_WE 時間前に 書き込みイネーブルが WE で有効になります クロックイベント 2 より T RCKO_DO 時間後に データ CCCC がブロック RAM の DO 出力で有効になります クロックイベント 4 RST ( 同期セット / リセット ) 同期セット / リセットでは 初期化パラメータの値 SRVAL がブロック RAM の出力ラッチに読み込まれます RST はメモリの内容を変更しません また ADDR および DI 入力の影響も受けません クロックイベント 4 より T RCCK_RST 時間前に 同期セット / リセット信号がブロック RAM の RST 入力で有効 (High) になります クロックイベント 4 より T RCKO_DO 時間後に SRVAL の 0101 がブロック RAM の DO 出力で有効になります クロックイベント 5 ディスエーブル イネーブル信号 EN をディアサートすると 書き込み 読み出し または RST が実行できなくなります ディスエーブルにしても メモリの内容 および出力ラッチの値は変わりません クロックイベント 5 より T RCCK_EN 時間前に イネーブル信号がブロック RAM の EN 入力で無効 (Low) になります クロックイベント 5 後は ブロック RAM の DO 出力のデータは変化しません 32 japan.xilinx.com Spartan-6 FPGA ブロック RAM リソースユーザーガイド

ブロック RAM のタイミングモデル ブロック RAM のタイミングモデル 図 14 は ブロック RAM のインプリメンテーションに関連した遅延パスを示しています 記述されているのは オン / オフチップの最もシンプルなパスです ( パスはデザインにより大きく異なります ) このタイミングモデルは ブロック RAM のタイミングパラメータの使用法および使用場所を示しています NET = 可変インターコネクト遅延 T IOPI = パッドから IOB の I 出力までの遅延 T IOOP = IOB の O 入力からパッドまでの遅延 T BUFG = BUFG 遅延 X-Ref Target - Figure 14 FPGA Block RAM Data Address Write Enable Enable [T IOPI + NET] + T RDCK_DI [T IOPI + NET] + T RCCK_ADDR [T IOPI + NET] + T RCCK_WE [T IOPI + NET] + T RCCK_EN DI ADDR WE EN Set/Reset [T IOPI + NET] + T RCCK_RST RST [T BUFG + NET] CLK DO T RCKO_DO + [NET + T IOOP ] Data BUFG Clock [T IOPI + NET] ug383_c1_13_012610 図 14 : ブロック RAM のタイミングモデル Spartan-6 FPGA ブロック RAM リソースユーザーガイド japan.xilinx.com 33

ブロック RAM のタイミングモデル 34 japan.xilinx.com Spartan-6 FPGA ブロック RAM リソースユーザーガイド