[Q2HB] SPI Core

[Altera][Q2HB][IP] SPI Core

refer to:"Volume 5: Embedded Peripherals","Section I. Off-Chip Interface Peripherals","7. SPI Core"

Core Overview

(略)SPIインタフェースは,よう使われている.SPI core with Avalon-interfaceは,SPIプロトコルを実装し,バックエンドでAvalon-MMインタフェースを提供する.

SPI coreは,SPIマスタかSPIスレーブのどちらかを実装できる.マスタとして設定したときは,SPI coreは32個までの独立したSPIスレーブを制御できる.送受信のレジスタ幅は,1~32ビットの間で設定可能です.より長い転送長はソフトルーチンでサポートされます.SPI coreは,転送が完了するごとにフラグする割込み出力を提供します.



Functional Description

SPI coreは以下の信号で同期通信を行います(SPIプロトコル)

Signal symbol description
Master Out Slave Inmosiマスタからのデータ出力,スレーブへのデータ入力
Master In Slave Outmisoスレーブからのデータ出力,マスタへのデータ入力
Serial Clocksclkマスタに駆動される,スレーブへのクロック.データビットの同期に使う
Slave Selectss_nマスタに駆動される,個別のスレーブへのSelect信号(active Low).対象となるスレーブを選択するのに使う

このコアには,ユーザに見える柿のリソースがあります.

  • MemoryMapped register\rxdata, txdata,status, control, slaveselect
  • 4つのSPIインタフェースポート\sclk, ss_n, mosi, and miso

Instantiating the SPI Core in SOPC Builder

(なんともはやふつー過ぎて省略)


Software Programming Model

alt_avalon_spi_command()

int alt_avalon_spi_command(
	alt_u32 base, alt_u32 slave,
	alt_u32 write_length,
	const alt_u8* wdata,
	alt_u32 read_length,
	alt_u8* read_data,
	alt_u32 flags)

データ長8bit以下のSPIマスタ向けに設計されている.現状,データ長8bit以上のハードには対応していない.
この関数を一度呼ぶと,MOSIからデータを吐いて,MISOからデータを受け取ります.

  1. slaveの指定されたslave chipselect信号をアサートします.IDはゼロオリジンです.
  2. write_lengthバイトだけwdataから読み出して出力します.MISOからのデータは捨てます.
  3. read_lengthバイトだけ,read_dataへデータを格納します.MOSIにはゼロを吐き続けます.
  4. スレーブのselect信号をデアサートします.

コードは,以下のファイルを見ると把握できます.リード時の吐き捨てがマスタ出力ゼロで決めうちですね.
C:\altera\81\ip\altera\sopc_builder_ip\altera_avalon_spi\HAL\src\altera_avalon_spi.c

※SDカードへのアクセスの際には,1'b1での出力が必要と思う(ELMより...SD Spec.見たほうがいいか?)



問題点

SPIマスタのとき,動作クロックをWizardで定義することになるが,動的な変更が効かない
(ELM) MMCの使い方 より,

SPIモードの場合は、速度を制限する状態(OD駆動)が無いので、クロック切り替えなしで最初から20/25MHzでもOKです。

20MHz固定でもいいか...


SDカードをSPIモードで使うときの結論

IPコアは流用できるが,HAL・ドライバは使用できない.自前で制御レジスタをたたくべし.ソースコードの流用はできるだろう(あまりおいしく無いけれど)
→ よそのIPを拾ってこよう….

[Q2HB] Performance Counter Core

[Altera][Q2HB][IP] Performance Counter Core

refer to:"Volume 5: Embedded Peripherals","Section V. Test and Debug Peripherals", "29. Performance Counter Core"

注意
performance counterは,複数clockを使用するシステム上では,CPU clockと同じdomainに配置すること.異なる場合はサイクル数から実時間へ正しく変換できない.(p.2453 "Multiple Clock Domain Considerations")

Core Overview

高精度パフォーマンスカウンタを提供するらしい.GNU profiler, gprofでも使得る模様.通常のInterval timerを利用することも可能.
3種類の測定方法については,"AN 391: Profiling Nios II Systems."にて述べる.

機能としては,クロックサイクルの計数と,イベント回数の記録である.それぞれ64bit/32bit精度を有す.


Software Programming Model

便利なマクロや関数が用意されている.カウンタの初期化,開始,停止,測定対象セクションの開始・終了を行う.測定結果についても,テキストベースで表を出力する関数を用意してある.

パフォーマンスカウンタの名称を"performance counter"とした場合で,section counterは1番目を用いる例である.

    PERF_RESET( PERFORMANCE_COUNTER_BASE );
    PERF_START_MEASURING( PERFORMANCE_COUNTER_BASE );
    PERF_BEGIN( PERFORMANCE_COUNTER_BASE, 1);
	// 測定対象となる処理 //
    PERF_END(PERFORMANCE_COUNTER_BASE, 1);
    PERF_STOP_MEASURING(PERFORMANCE_COUNTER_BASE) ;
    printf("%qu cycle \n", perf_get_section_time(PERFORMANCE_COUNTER_BASE, 1));

注意点としては,section timeのみを図りたい場合でも,total counterも起動する必要があること.また,printfでalt_u64の表示を行う場合には,書式装飾子"q"*1を付与する必要がある.


*1 : gcc方言:long long 型の書式."qu"で"unsigned long long"型である.

注意事項

英語力の弱い人が適当に訳して抜粋,補強しています.
あやしいな,と思ったらご指摘いただけますと幸いです.
なお,オリジナルの英文を参照されることを強く推奨いたします.

[UG] DDR and DDR2 SDRAM High-Performance Controller User Guide

[SOPC][UG][IP] DDR_SDRAM_HP

refer to:"DDR and DDR2 SDRAM High-Performance Controller User Guide (ug_ddr_ddr2_sdram_hp.pdf)"

注意事項(document内部から場所を問わず抜粋)

論理合成時には,あらかじめTcl制約スクリプトを実行しておく必要がある.

_pin_assignments.tcl.


ライセンス制約

OpenCore Plus Evaluationの場合:
time-limited device programming fileを生成する.このため,"Tethered"または"Untethered"による実行となる.時間制限にのみ縛られる場合*1か,JTAGケーブルにより接続されている状態が維持されている必要があります.


Functional Description

Signals
Symbol説明
global_reset_n input)DDRSDRAMコントローラへの非同期リセット入力.全てのリセット信号は,この信号を同期化したものからなる.この信号がローレベルの間は,完全にALTMEMPHY megafunction(PLLも含む)をリセット状態にする.
pll_ref_clk (Input)PLLへのリファレンスクロック入力.
phy_clk (Output)megafunctionのユーザ向けシステムクロック.DDR high-performance controllerとの入出力信号は,このクロックに同期して行う必要がある.
reset_phy_clk_n (Output)ユーザへのリセット信号.この信号は,phy_clkクロックドメインに同期してアサート・デアサートされる.
aux_full_rate_clk (Output)ALTMEMPHY megafunctionがユーザに提供している代替クロック(alternative clock).このクロックは,外部メモリインタフェースのように常に同じ周波数で走ります.\half-rate modeでは,このクロックはphy_clkの2倍の周波数で,2x clockが必要なときはいつも使えます.\full-rate modeでは,このクロックはphy_clk信号と同じPLL出力で駆動されます.
aux_half_rate_clk (Output)ユーザ向け代替クロック.このクロックは常に外部メモリの半分の周波数で走っています.\フルレートモードのとき,このクロックはphy_clkの周波数の半分として使うことができます.例えば,half-rate bridge側に使うことができます.\ハーフレートモードのとき,このクロックはphy_clk信号のように,PLL出力と同じもので駆動されます.
dll_reference_clk (Output)外部でインスタンス化されるDLLに引き込まれる基準クロック.
reset_request_n (Output)PLL出力がロックしていないときに示すリセット要求信号.他のシステムレベルリセットコントローラへの入力の,リセット要求としてこの信号を使う.PLLがロックしていない間は,この信号は常にローレベルです.\コレを使うどんなリセット回路も,レベル検出よりは立下りエッジでリセット要求を検出すべきではない.(=レベルでやれ?)
soft_reset_n (Input)SOPC Builderのためのエッヂ検出リセット入力で,使用するか,他のシステムリセット回路によって制御される.この信号は,PHYに対して完全なリセットをアサートする要因となるが,PHYで使われているPLLには使われない.
oct_ctl_rs_value (Input)ALTMEMPHY信号は,シリアル終端の値を与えます.ALT_OCT megafunction出力"Seriesterminationcontrol"に接続されるべきです.
oct_ctl_rt_value (Input)ALTMEMPHY信号は,パラレル終端の値を与えます.ALT_OCT megafunction出力"Parallelterminationcontrol"に接続されるべきです.
dqs_delay_ctrl_import (Input)このALTMEMPHYインスタンス内で,他のALTMEMPHYインスタンスのDLLを使うことを許可します.DLLつきのALTMEMPHYインスタンスの外部ポートを,他のALTMEMPHYインスタンスの入力ポートへ接続してください.




Creating A Simulation Testbench Environment



*1 : この場合は全てのライセンスにおいてUntetheredもしくはライセンス有りである必要がある.

注意事項

英語力の弱い人が適当に訳して抜粋,補強しています.
あやしいな,と思ったらご指摘いただけますと幸いです.
なお,オリジナルの英文を参照されることを強く推奨いたします.

[Q2HB] PLL

[SOPC][IP] PLL

refer to:"Volume 5: Embedded Peripherals","Section VI. Clock Control Peripherals", "31. PLL Core"

Core Overview

Avalon-MM I/Fをもつ,Stratixシリーズ/Cycloneシリーズ搭載のオンチップPLLコアである.PLLコンポーネントは,Mega FunctionのALTPLLを用いており,ラッパーコアとなる.SOPC Builderから実装するメリットとしては,status/control signalをMMレジスタからアクセス・参照することができる.

用途は,システム全域のクロック生成・モジュールの一部に供給するクロックの生成,である.


Function Description

PLL Status and Control Signals

ALTPLL Mega Fuctionはパラメタライズされていることから,ステータス・コントロール信号は可変長となる.所望のステータス信号・コントロール信号をSOPC Builder systemモジュール外に出すことができる.排他的に,Avalon-MM レジスタ経由でアクセスができる.

設定方法は,Instantiating the Core in SOPC Builderを参照のこと.


System Reset Considerations

FPGAのコンフィレグレーションにおいて,PLLコアは自動的にリセットします.PLLに与えられたリセット回路は,SOPC Builder systemモジュール全域へのリリースを解除する前に,PLLがロックすることを保障します.

注:PLLをリセットすることは,関連するSOPC Builder system moduleをリセットします.


Instantiating the Core in SOPC Builder

PLLコアは,ALTPLL Mega Functionを用いています.MegaWizardインタフェースを用いて,ユーザがステータス・コントロール信号の接続を指定します.
"PLL Setting"にて,ALTPLL MegaWizardを起動します.ここで,[1]Parameter Settingの"Inputs/Lock"ページで,"Lock output"グループに, Create "locked" outputチェックボックスがあります.これにチェックを入れると,PLL lock状態の信号が,SOPC Buidlerシステムモジュールのtop level moduleに出力されます.

その後,"Interface Page"にて,それの信号を出力する先を選択することができます.(registerかexportか)


ALTPLL NameInput / OutputAvalon-MM PLL Wizard NameDefault BehaviorDescription
aresetinputPLL Reset Inputデバイスコンフィグレーション時のみPLL初期化PLLおよびシステムモジュールをリセットする
pllenainputPLL Enable Input常にenablePLLをenableにする信号..
pfdenainputPFD Enable Input位相-周波数検出器は有効検出器を有効にする.クロックリファレンスを切り替えるときに使う?
lockedoutputPLL Locked Output-入力クロックにPLLがロックしたときにアサートされる

※aresetは,PLLのみをリセットするのではなく,SOPC Builder system module全域をリセットします.


注意事項

英語力の弱い人が適当に訳して抜粋,補強しています.
あやしいな,と思ったらご指摘いただけますと幸いです.
なお,オリジナルの英文を参照されることを強く推奨いたします.

[MAVA] Avalon-MMの仕様

[Altera][MAVA]Avalon-MMの仕様

referto: mnl_avalon_spec.pdf

Signals

Avalonシステムでは,全ての信号はアクティブ-Highとなっている.postfixが"-n"と表記している信号は,アクティブ-Lowとして参照が可能な信号である.

基本的な信号
Signal TypeWidthDirDescription
read,read_n1In読み出し要求.アサートされていればreaddataを要求されている.
write,write_n1In書き込み要求.writedataが有効.
address1-32In当該I/Fのデータ幅を1としてアドレッシングされる.\'1'であっても,16bit幅なら2byte目,32bit幅なら4byte目相当となる
readdata8*2**N(N=0-7)Outslaveからmasterへ出力するデータ信号.
writedata8*2**N(N=0-7)Inmasterからslaveへ出力されるデータ信号.
byteenable,byteenable_n2**N(N=0-7)Inバイトレーンを指定する.\データ幅が複数バイトのときに,アサートされているビットに対応したバイト値が有効であることを示す.
begintransfer1Inwaitrequest信号にかかわらず,書く転送の最初のサイクルにアサートされる.
Wait-state信号
Signal TypeWidthDirDescription
waitrequest,waitrequest_n1Outread/write要求に応答できないときに,slaveによってアサートされる.アサートされたとき,slaveへの制御信号(begintransferとbeginbursttransferを除く)は値を維持する.\Avalon-MM slaveは,アイドルサイクルの間,waitrequestをアサートすべきです.\Avalon-MM master mayは,waitrequestがアサートされたときにトランザクションを初期化すべきです.\Avalon-MM slaveのデザインは,この可能性を考慮に入れなければなりません.

サンプルのチャートをみると,masterからのreadrequest/writerequestがアサートされたときに脊髄反射する必要があるみたい.コンポーネント自身がデータの準備ができていない場合に,デアサートしておいたほうが無難かもしれん.masterが常にwaitrequestを受けていても問題が無いかはわからんけど.

# 参照していないだろうし大丈夫かなぁ


Pipeline Signals
Signal TypeWidthDirDescription
readdatavalid,readdatavalid_n1Outパイプライン読み出し転送の可変長レイテンシに使われます.readdata信号が,前の読み出し要求に対する応答の有効なデータを含んでいることを示すために,slaveによってアサートされます.\readdatavalidを有するslaveは,要求を受けたそれぞれの読み出しサイクルのために,読み出しの受領とreaddatavalidのアサートの間に,この信号を1サイクル以上のレイテンシだけアサートする必要があります.

Burst Signals
Signal TypeWidthDirDescription
burstcount1-32Inburstの1サイクル目の間,burstcountはバースト転送回数を示します.burstcountのポート幅がNの場合,サイズ2**(N-1)の最大バースト数がエンコードできます.\burstcount信号は全体の転送に一定のままで残っています.(Figureでは1stサイクルだけなんだが)
beginbursttransfer1Inburst転送の開始のとき,burstの1サイクル目のためにアサートされます.\この信号はwaitrequestの値に関係なく,1サイクル後にデアサートされます.

Flow Control Signals
Signal TypeWidthDirDescription
readyfordata1Outペリフェラルがwrite転送準備を整えたことを示します.
dataavailable1Outペリフェラルがread転送準備を整えたことを示します.

Reset Signals
Signal TypeWidthDirDescription
resetrequest,resetrequest_n1OutペリフェラルにAvalon-MMシステム全体をリセットすることを許可します.システムリセット信号を生成するために,全てのリセット信号が互いにORされます.

Slave Interface Properties

NameDef.Value有効範囲説明
readLatency00-63読み出しレイテンシが固定の場合に使用されるレイテンシの値.\readdatavalid信号が含まれる場合は未使用となる.
writeWaitTime00-1000slaveがwriteを許容するまでのサイクル数を示す.タイミングは,slaveがwaitrequestをwriteWaitTimeサイクルだけアサートしたようになる.

waitrequest信号が含まれる場合は未使用となる.|

readWaitTime10-1000slaveがread応答するまでのサイクル数を示す.タイミングは,slaveがwaitrequestをreadWaitTimeサイクルだけアサートしたようになる.
maximumPendingRead Transactions11-64slaveによってqueueに入れることができる最大のread要求数.
burstOnBurstBoundariesOnlyfalsetrue/falseもしtrueにするならば,このインタフェースで提供されるburst転送が,burstサイズの倍数となるアドレスから始まることが保障される.\(使い手が保障するのか?よくわからん)
linewrapBurstsfalsetrue/falsetureの場合,slaveがインクリメンタルバーストに変えて,line wrapping burstを実装していることを示します.\wrapping burstについて,アドレスがburst境界に達したときに,下位のビットだけが,アドレシングに使用される必要があるように,以前のburst境界にラップバックします.\Ex.) burst境界が32byteで32bit幅のインタフェースがアドレス0x0Cにアクセスするwrapping burstは,次の順にアクセスを行う.(burst sizeより大きいビットは変化しないことに注意)\0xC, 0x10, 0x14, 0x18, 0x1C, 0x00, 0x04, 0x08
maxBurstSize164slaveが許容する最大burstサイズ
bridgesToMasternull同じコンポーネントのAvalon-MM masterslaveとmasterから構成され,特定のbyteまたはbytesを要求するslaveへのアクセスで,masterは同じbyteまたはbytesを要求するような特徴を持つAvalon-MMブリッヂ.
associatedClock--このslave I/Fが同期化するクロックインタフェース名.


注意事項

英語力の弱い人が適当に訳して抜粋,補強しています.
あやしいな,と思ったらご指摘いただけますと幸いです.
なお,オリジナルの英文を参照されることを強く推奨いたします.