ようこそゲストさん

とんずら雑記R

2008/11/18(火) EDKサンプル"picture_viewer"

2008/11/18 10:55 FPGA::NiosII

EDKサンプル"picture_viewer"を参照する

制約ファイルの確認

cycloneIII_embedded_evaluation_kit_picture_viewer_settings.tcl

set_instance_assignment -name TCO_REQUIREMENT "3.3 ns" -from * -to ssram_adsc_n
set_instance_assignment -name TCO_REQUIREMENT "3.3 ns" -from * -to ssram_bw_n
set_instance_assignment -name TCO_REQUIREMENT "3.3 ns" -from * -to ssram_bwe_n
set_instance_assignment -name TCO_REQUIREMENT "3.3 ns" -from * -to ssram_ce_n
set_instance_assignment -name TCO_REQUIREMENT "3.3 ns" -from * -to ssram_oe_n
set_instance_assignment -name TCO_REQUIREMENT "3.3 ns" -from * -to flash_ssram_a

SyncronusSRAMのアドレス,Byte enbale,ChipEnable,OutputEnableは3.3nSecのtCOを設定する.制御信号の全てのclockに対する出力遅延を定義している.(一定にそろえたい?)

set_instance_assignment -name TSU_REQUIREMENT "6 ns" -from * -to flash_ssram_d

SRAMのデータ用FFのSetupTimeを6nSecとしている?.

TCO_REQUIREMENTとTSU_REQUIREMENTを記述するのは,I/Oタイミング制約を課すことで,QuartusIIに対してレジスタつきI/Oピンの使用を促すためだろう*1



cycloneIII_embedded_evaluation_kit_picture_viewer.sdc

他のところでも制約がある.SDCファイルで規定されているアレゲな何を理解する.参照するリファレンスは,主にTclScriptManual("TclScriptRefMnl.pdf").

## Creating and setting variables for clock paths to make code look cleaner
set System_Clock_int *|the_pll|the_pll|altpll_component|auto_generated|pll1|clk[0]
set SSRAM_Clock_ext *|the_pll|the_pll|altpll_component|auto_generated|pll1|clk[1]
set Slow_Clock_int *|the_pll|the_pll|altpll_component|auto_generated|pll1|clk[2]
set Remote_Update_Clock *|the_pll|the_pll|altpll_component|auto_generated|pll1|clk[3]
set DDR_Local_Clock *|the_ddr_sdram|ddr_sdram_controller_phy_inst|alt_mem_phy_inst|ddr_sdram_phy_alt_mem_phy_ciii_inst|clk|pll|altpll_component|auto_generated|pll1|clk[1]
set DDR_Controller_Clock *|the_ddr_sdram|ddr_sdram_controller_phy_inst|alt_mem_phy_inst|ddr_sdram_phy_alt_mem_phy_ciii_inst|clk|pll|altpll_component|auto_generated|pll1|clk[0]

まずは,clockに対する制約を記述するため,clockコレクションを得るためのワイルドカード記述を定義している.名称の変更やPLLの出力端子番号等により変化するでしょう.


##SSRAM Constraints
set_output_delay -clock [get_clocks $SSRAM_Clock_ext] -reference_pin [get_ports {ssram_clk}] 2.4 [get_ports {ssram_adsc_n ssram_bw_n* ssram_bwe_n ssram_ce_n ssram_oe_n flash_ssram_a* flash_ssram_d*}]
set_input_delay -clock [get_clocks $SSRAM_Clock_ext]  -reference_pin [get_ports {ssram_clk}] 4.1 [get_ports {flash_ssram_d*}]
set_multicycle_path -from [get_ports {flash_ssram_d*} ] -setup -end 2

starter kitのSSRAMは,"IS61LPS25636A"(8Mbit,36bit x 256k)です.ただしparity pbitは配線されていません.latency 2cycle,setup/holdは1.4/0.4[nSec]となっています.

制御信号等の出力遅延として,setup時間にマージンを1[nSec]加えて,2.4[nSec]としています(イメージ:ssram_clkに対して2.4nSec以上早く信号が出るように合成される).

toeq(Output Enable to Output Valid)が3.1[nSec]なので,データの入力遅延としてマージンを1[nSec]とって,4.1[nSec]としている(イメージ:ssram_clkに対して,setup timeが4.1[nSec]加えられる.).


## Cutting the paths between the system clock and ddr controller clock since there is a clock crossing bridge between them (FIFOs)
set_false_path -from [get_clocks {osc_clk}] -to [get_clocks $Slow_Clock_int]
set_false_path -from [get_clocks $Slow_Clock_int] -to [get_clocks {osc_clk}]

## Cutting the paths between the system clock and ddr controller clock since there is a clock crossing bridge between them (FIFOs)
set_false_path -from [get_clocks $Slow_Clock_int] -to [get_clocks $System_Clock_int]
set_false_path -from [get_clocks $System_Clock_int] -to [get_clocks $Slow_Clock_int]

## Cutting the paths between the system clock and ddr controller clock since there is a clock crossing bridge between them (FIFOs)
set_false_path -from [get_clocks $Slow_Clock_int] -to [get_clocks $DDR_Controller_Clock]
set_false_path -from [get_clocks $DDR_Controller_Clock] -to [get_clocks $Slow_Clock_int]

## Cutting the paths between the system clock and ddr controller clock since there is a clock crossing bridge between them (FIFOs)
set_false_path -from [get_clocks {osc_clk}] -to [get_clocks $DDR_Controller_Clock]
set_false_path -from [get_clocks $DDR_Controller_Clock] -to [get_clocks {osc_clk}]

## Cutting the paths between the system clock and ddr controller clock since there is a clock crossing bridge between them (FIFOs)
set_false_path -from [get_clocks $System_Clock_int] -to [get_clocks $DDR_Controller_Clock]
set_false_path -from [get_clocks $DDR_Controller_Clock] -to [get_clocks $System_Clock_int]

## Cutting the paths between the system clock and ddr local clock since there is a clock crossing bridge between them (FIFOs)
set_false_path -from [get_clocks $System_Clock_int] -to [get_clocks $DDR_Local_Clock]
set_false_path -from [get_clocks $DDR_Local_Clock] -to [get_clocks $System_Clock_int]

## Cutting the paths between the external oscillator clock and the system clock since there is an asyncronous clock crosser between them
set_false_path -from [get_clocks {osc_clk}] -to [get_clocks $System_Clock_int]
set_false_path -from [get_clocks $System_Clock_int] -to [get_clocks {osc_clk}]

## Cutting the paths between the external oscillator clock and the system clock since there is an asyncronous clock crosser between them
set_false_path -from [get_clocks {osc_clk}] -to [get_clocks $DDR_Local_Clock]
set_false_path -from [get_clocks $DDR_Local_Clock] -to [get_clocks {osc_clk}]

## Cutting the paths between the external oscillator clock and the remote update clock since there is an asyncronous clock crosser between them
set_false_path -from [get_clocks {osc_clk}] -to [get_clocks $Remote_Update_Clock]
set_false_path -from [get_clocks $Remote_Update_Clock] -to [get_clocks {osc_clk}]

コメントにあるように,clock domain間に対してfalse pathを設定しています.
双方向に影響がないことを示すため,from/toを入れ替えて記述する必要があります.
また,clock5種全ての組み合わせが必要なわけではなく,あるmoduleを通してclockが隣接するものだけで良いです*2



set_false_path -from [get_clocks tx_clk_to_the_tse_mac] -to [get_clocks $System_Clock_int]
set_false_path -from [get_clocks $System_Clock_int] -to [get_clocks tx_clk_to_the_tse_mac]

set_false_path -from [get_clocks rx_clk_to_the_tse_mac] -to [get_clocks $System_Clock_int]
set_false_path -from [get_clocks $System_Clock_int] -to [get_clocks rx_clk_to_the_tse_mac]

set_false_path -from [get_clocks tx_clk_to_the_tse_mac] -to [get_clocks $Slow_Clock_int]
set_false_path -from [get_clocks $Slow_Clock_int] -to [get_clocks tx_clk_to_the_tse_mac]

set_false_path -from [get_clocks rx_clk_to_the_tse_mac] -to [get_clocks $Slow_Clock_int]
set_false_path -from [get_clocks $Slow_Clock_int] -to [get_clocks rx_clk_to_the_tse_mac]

Ethernet Phy-moduleのclockについて,false path設定を行っている模様(MAC-phyは追いかけてないのでスルー).


#Constrain MAC network-side interface clocks
create_clock -period "125 MHz" -name tx_clk_to_the_tse_mac [ get_keepers HC_TX_CLK]
create_clock -period "125 MHz" -name rx_clk_to_the_tse_mac [ get_keepers HC_RX_CLK]

(MAC-phyは追いかけてないのでスルー).


#Constrain timing for half duplex logic
set_multicycle_path -setup 4 -from [ get_keepers *|altera_tse_top_w_fifo:U_MAC|altera_tse_tx_min_ff:U_TXFF|altera_tse_altsyncram_dpm_fifo:U_RTSM|altsyncram*] -to [ get_keepers *]
set_multicycle_path -setup 4 -from [ get_keepers *|altera_tse_top_w_fifo:U_MAC|altera_tse_tx_min_ff:U_TXFF|altera_tse_retransmit_cntl:U_RETR|*] -to [ get_keepers *]
set_multicycle_path -setup 4 -from [ get_keepers *] -to [ get_keepers *|altera_tse_top_w_fifo:U_MAC|altera_tse_tx_min_ff:U_TXFF|altera_tse_retransmit_cntl:U_RETR|*]
set_multicycle_path -setup 4 -from [ get_keepers *|altera_tse_top_w_fifo:U_MAC|altera_tse_tx_min_ff:U_TXFF|half_duplex_ena_reg2] -to [ get_keepers *]
set_multicycle_path -hold 4 -from [ get_keepers *|altera_tse_top_w_fifo:U_MAC|altera_tse_tx_min_ff:U_TXFF|altera_tse_altsyncram_dpm_fifo:U_RTSM|altsyncram*] -to [ get_keepers *]
set_multicycle_path -hold 4 -from [ get_keepers *|altera_tse_top_w_fifo:U_MAC|altera_tse_tx_min_ff:U_TXFF|altera_tse_retransmit_cntl:U_RETR|*] -to [ get_keepers *]
set_multicycle_path -hold 4 -from [ get_keepers *] -to [ get_keepers *|altera_tse_top_w_fifo:U_MAC|altera_tse_tx_min_ff:U_TXFF|altera_tse_retransmit_cntl:U_RETR|*]
set_multicycle_path -hold 4 -from [ get_keepers *|altera_tse_top_w_fifo:U_MAC|altera_tse_tx_min_ff:U_TXFF|half_duplex_ena_reg2] -to [ get_keepers *]
set_max_delay 7 -from [get_registers *|altera_tse_top_w_fifo:U_MAC|altera_tse_tx_min_ff:U_TXFF|dout_reg_sft*] -to [get_keepers *|altera_tse_top_w_fifo:U_MAC|altera_tse_top_1geth:U_GETH|altera_tse_mac_tx:U_TX|*]
set_max_delay 7 -from [get_registers *|altera_tse_top_w_fifo:U_MAC|altera_tse_tx_min_ff:U_TXFF|eop_sft*] -to [get_keepers *|altera_tse_top_w_fifo:U_MAC|altera_tse_top_1geth:U_GETH|altera_tse_mac_tx:U_TX|*]
set_max_delay 7 -from [get_registers *|altera_tse_top_w_fifo:U_MAC|altera_tse_tx_min_ff:U_TXFF|sop_reg*] -to [get_keepers *|altera_tse_top_w_fifo:U_MAC|altera_tse_top_1geth:U_GETH|altera_tse_mac_tx:U_TX|*]

(MAC-phyは追いかけてないのでスルー).

*1 : an311_j.pdf "ASICからFPGAへの移行に関するデザイン手法およびガイドライン"の"I/Oタイミング","配置配線"の項より類推

*2 : clockが隣接しない場合,そもそもTiming Checkが起こりえないので,false pathも発生しない.
仮に意図しない場合はwarningを見ることで設計と実装との齟齬を検出することができよう.

2008/11/11(火) NiosII関係メモ

2008/11/11 24:20 未分類

QuartusII v8.1をベースにいじっていこうと考えています.とりあえず,年内はKIT DEV NIOS II CYCLONE III ED.を借用できることになったので,いじり倒していこうかと思います.*1


*1 : しかしこれ,LCD綺麗だし,メモリもデバイスも十分でっかいし,5万なら買ってもいいかなぁ

参照資料

ALTERAサイトの, "ホーム > 製品情報 > 資料 > Nios II プロセッサ"から,資料を落としてきます.オンライン資料: Nios II プロセッサ(2008.Nov.11現在)から,一式拾っておきましょう.

QuartusIIからでも,ヘルプを押せばオンラインから章毎に分冊された資料やデータシートなどが開きますが,HandBook程度は拾って開いておくのがよいかと思います.

2008/11/11(火) [Nios2] 知っておいたほうが良さそうな事項

2008/11/11 24:14 未分類

はじめに

このコンテンツは,のちほど編集をかけることになるでしょう.とりとめもなくメモを貼り付けていきます.面倒なので参考文献の引用は雑にしますし,思い込みで書いている部分もありますので御注意ください….


AVALON BUS仕様

Avalon Memory Mapped Interface (Avalon-MM)

一般的な? device interface.メモリマップドI/Oとしてすべてを扱う.バスはセレクタのお化けになる模様.

  • 同期回路で構成した,一般的なADRs/DATAs/RD/WR/CLK/WAITによる読み書き制御.ByteEnableもついて,1〜4byteアクセス可能.
  • R/WのWait Timeは固定にもできる.
  • Burst転送も有効にすると,Burst Count信号が増設され,Burst転送モードが発生しうるようだ....
  • Burst DRAM/SRAM/FLASHをつなぐときに有効,か.

Avalon Streaming Interface (Avalon-ST)

データフローが一方通行なもの向けのinterface.

  • Interfaceのポート名 [Source] → [Sink] の方向にデータが流れる.
  • scheduler/primitive命から見ると,[Sink]で受けて[Source]から吐き出すイメージ.
  • moduleのクチは,[Souce]からデータを吐く,[Sink]でデータを受ける.(Figure6-1を見れ)

Avalon Memory Mapped Tristate Interface

tri-state出力のBUS.I/O Padの消費量削減のための,chipの外とのinterface用.

  • 外付けSRAM,ZBT RAMの接続が可能.Avalon-TriState MM - Slave.Masterは存在しない.(BridgeがMasterとして振舞う?.interconnectはsyncroだから関係ないってことかな...)

Avalon Clock

  • 特にかくことないかな...

Avalon Interrupt

  • 通常の? 割込みコントローラ.priority encoderつき.(優先度回転とか高機能なものはない."IRQの若い者が強い"仕様のようだ.)

Avalon Conduit (導管) - SOPCの外とのinterface規格?

  • System BUS(System Interconnect Fabricとは離れている.moduleと外との土管..?)

接続概念

AVALON BUSに接続するためのPortとして,MasterとSlaveが存在します.データ方向は基本的に一方向であり,双方向バスではないと思われる(未確認).

Masterが制御信号を主導し,Slaveに対して読み書きを促す.Slaveからはwait信号を受け付けることもできる(Masterが許容しないとダメか?).

テンプレートで,Master/Slave Portのコードは生成されるので,自作IP?も簡単に??繋ぐことができる.



ほかのfunction

[SOPC] SG-DMA(Scatter Gathering DMA)

丸カッコは,Master/Slave portの表記.

(S)CSRControl Status Register
(M)descriptor_readDescriptorをメモリにおいて,DMA moduleが値を読むのに使う(src/destなどがchain linkできる)
(M)descriptor_writeDescriptorをメモリにおいて,DMA moduleが値を書き込むのに使う(Status Areaがある)
(M)m_read/(M)write実際にデータをR/Wするためのクチ.(descriptorと共通にはならなかったようだ...)
(M)out/(S)inメモリから取ってきたデータを,別のモジュールへ吐き出すクチ.

[SOPC] Bridge

Master - Slaveのインターコネクトを途中で集約することで,大量の配線引き回しを抑制できる.

Bridgeを通すことで,信号強度も復帰するため,(レイテンシ増加はするが)fMaxをあげることが想像できる.

また,設定方法によって,以下の名称をもつようだ.

Pipeline Bridge

Burstを有効にしたとき?

Clock Crossing Bridge

ブリッジを挟んでクロックドメインが変わるとき.


FLASH ROM(P28F256)について

"cyclone3_handbook.pdf" Active Parallel の説明を参照されたい.

接続については,Active Parallel(AP)によるconfigurationを行うため,FPGAの規定の端子へデバイスを接続する必要がある模様.
また,configuration後は,ソレに従うので,この物理接続を踏襲するようなpin assignが必要となる.
Wait信号は,asyncで使う分には不要(AP configuration ignores the WAIT signal during configuration mode.)であり,asyncroで使う場合には無視すればよい.(配線されているのであればinputにして捨てておく必要がある.optimizeにも注意)

CLK should be tied to a valid VIH level,
WAIT signal can be floated 
ADV# must be tied to ground.

"cyclone3_handbook.pdf"の更新履歴(May 2008 v2.0)より,"Removed RDY pin and replaced with a normal I/O to monitor the WAIT signal"とある.
"CycloneIII_SB_3C25.pdf" sheet 6では,FLASH_WAITがRDY/DQ1R3(Bank6,H13@EP3C25F324C8)に接続されているが,実体は未使用ということだろう.

アドレス信号についても,256Mbit FLASHなので,A25は未使用.schematic上は接続されているが,デバイス側NCとなっています.上位互換で,容量の大きいものを刺したときを考慮しているのでしょう.

信号メモ

control signals
	DCLK, clock(CLK)
	nRESET, active-low reset (RST#)
	FLASH_nCE, active-low chip enable (CE#)
	nOE, active-low output enable (OE#)
	nAVD, active-low address valid (ADV#)
	nWE, active-low write enable (WE#)
	general input, WAIT
adr/data signals
	DATA[15..0]
	PADD[23..0]

2008/11/11(火) [Altera][QSF] TSU_REQUIREMENT

2008/11/11 23:13 未分類

免責

英語力の弱い人が適当に訳しています.自分では意味がわかるようにとれたものと,そうでないものとがあります.概要理解の参考にしていただければ幸いですが,オリジナルの英文を参照されることを強く推奨いたします.

対象ファイル:"mnl_qsf_reference.pdf"


TSU_REQUIREMENT

入力(データ)端子に対する,許容される最大のclock setup時間を指定します.
"setup time"は,データ入力端子またはenable入力端子経由でレジスタに流れ込むデータで,clock端子にレジスタの時間を計るclock信号がアサートされる前に,入力端子に現れる必要があるようなデータの時間の長さです.

意訳) あるレジスタの,clockやdata信号が入力される必要のある時間(setup timeやね)

入力(データ)端子に対する,許容される最大の"clock setup time(tSU)"を指定します.
"setup time"は,データ入力端子またはenable入力端子経由でレジスタに流れ込むデータで,clock端子にレジスタの時間を計るclock信号がアサートされる前に,入力端子に現れる必要があるようなデータの時間の長さです.

あなたは,特定のsourceとdestinationまたは,wilodカードやtimegroupを含むすべての正しいノード間の"tsu Requirement timing assignment"を指定できます.


Type

Time (valueアイテムは時間指定となります.)


Device Support

この設定は,どのようなAlteraデバイスファミリー向けのプロジェクトでも使えます.


Notes

この指定は,ワイルドカードに対応します.
この指定は,どのような複製されたノードにもコピーされます.


Syntax

set_global_assignment -name TSU_REQUIREMENT <value>
set_instance_assignment -name TSU_REQUIREMENT -to <to> -entity <entityname> <value>
set_instance_assignment -name TSU_REQUIREMENT -from <from> -to <to> -entity<entity name> <value>

Example

set_instance_assignment -name tsu_requirement 3ns -from pin -to reg
set_instance_assignment -name tsu_requirement 3ns -to pin
set_instance_assignment -name tsu_requirement 3ns -from clk -to pin
set_instance_assignment -name tsu_requirement 3ns -to pin_bus*

See Also

"TH_REQUIREMENT" on page 19-78

"INPUT_MAX_DELAY" on page 19-35

"INPUT_MIN_DELAY" on page 19-37

別参照

National Instruments社のチュートリアルドキュメント.デジタル波形のタイミングにて基礎重充填...

2008/11/11(火) [Altera][QSF] TCO_REQUIREMENT

2008/11/11 23:10 未分類

免責

英語力の弱い人が適当に訳しています.自分では意味がわかるようにとれたものと,そうでないものとがあります.概要理解の参考にしていただければ幸いですが,オリジナルの英文を参照されることを強く推奨いたします.

対象ファイル:"mnl_qsf_reference.pdf"


TCO_REQUIREMENT

許容される最大の,出力端子への"clock to output delay"を指定します.
"clock to output delay"は,レジスタの時間を計る入力端子のクロック信号が遷移した後に,そのレジスタにより流れ込む(feed)出力端子が有効な出力を得るのに必要な時間です.この時間は,常に外部端子間の遅延として現れます.

許容される最大の,出力端子への"Clock-to-Output遅延(tco)"を指定します.
"Clock-to-Output遅延(tco)"は,レジスタの時間を計る入力端子のクロック信号が遷移した後に,この時間は,常に外部端子間の遅延として現れます.あなたは,特定のsourceとdestinationまたは,wilodカードやtimegroupを含むすべての正しいノード間のtco requirement timing assignmentを指定することができます.

訳注:
"clock to output" と "clock-to-output" とで差がある??
オリジナルで2節の違いはそこだけ..

Type

Time (valueアイテムは時間指定となります.)


Device Support

この設定は,どのようなAlteraデバイスファミリー向けのプロジェクトでも使えます.

Notes

この指定は,ワイルドカードに対応します.この指定は,どのような複製されたノードにもコピーされます.


Syntax

set_global_assignment -name TCO_REQUIREMENT <value>
set_instance_assignment -name TCO_REQUIREMENT -to <to> -entity <entityname> <value>
set_instance_assignment -name TCO_REQUIREMENT -from <from> -to <to> -entity<entity name> <value>

Example

# Specific clk to pin path
set_instance_assignment -name tco_requirement 5ms -from clk -to pin
# From clk to any output pin
set_instance_assignment -name tco_requirement 5ms -to clk
set_instance_assignment -name tco_requirement 5ms -from clk -to *
# From any clock to pin
set_instance_assignment -name tco_requirement 5ms -to pin
set_instance_assignment -name tco_requirement 5ms -from * -to pin

See Also

"MIN_TCO_REQUIREMENT" on page 19-49

"OUTPUT_MAX_DELAY" on page 19-62

"OUTPUT_MIN_DELAY" on page 19-64


別参照

海外の掲示板で,同期回路設計をしようとしている人の質問と回答.http://www.velocityreviews.com/forums/t22483-setup-vs-clocktooutput-time-vs-hold-time.html