<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0">
<channel>
	<title>とんずら雑記R</title>
	<link>http://www.ujiya-denshi.com/adiary/adiary.cgi</link>
	<language>ja</language>
	<description></description>
	<copyright>Copyright 2008</copyright>
	<pubDate>Sun, 28 Dec 2008 16:46:51 GMT</pubDate>
	<lastBuildDate>Sun, 28 Dec 2008 16:46:51 GMT</lastBuildDate>
	<generator>http://adiary.abk.nu/#2.02</generator>
	<docs>http://blogs.law.harvard.edu/tech/rss</docs> 
	<item>
		<title>年末進行</title>
		<link>http://www.ujiya-denshi.com/adiary/adiary.cgi/0126#tm1230482811</link>
		<guid>http://www.ujiya-denshi.com/adiary/adiary.cgi/0126</guid>
		<category>雑談</category>
		<pubDate>Sun, 28 Dec 2008 16:46:51 GMT</pubDate>
		<author>ぉゅぅ</author>
		<description><![CDATA[<div class="section">
<h3><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/0126#k126p1" name="k126p1"><span class="sanchor">■</span></a><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/&amp;search?all=2&amp;word=%5b%bb%a8%5d" class="sectioncategory" title="見出し検索 ">[雑]</a> 年末</h3><p>ビッグサイトロンでのサークル参加を止めて久しいですが，この冬は帝都にも向かいません...<br>少々私用で忙しかったのと，現状のタスクで手一杯なので，これ以上ネタを仕入れないようにしたかったてのもあります(笑</p>
</div>

<div class="section">
<h3><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/0126#k126p2" name="k126p2"><span class="sanchor">■</span></a><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/&amp;search?all=2&amp;word=%5bQuartusII%5d" class="sectioncategory" title="見出し検索 ">[QuartusII]</a></h3><p>さておき，先日のFatFsの件，NEEKに持ってきて，サンプルプログラムも持ってきてみたのだけれど，SD初期化処理をミスします（Idleへの遷移要求に対してOK返ってこない）．<br>SDの端子に出ている波形を観測していないので，どこまでが正しいのかも不明瞭です．シミュレーションしようにもVHDLという罠が(笑．VerilogHDLに移植しようと誓ったところで止まっています..</p>
<p>借り物だけに勝手にハンダを盛るのも申し訳ないですしネ☆</p>
<p>そして周りの年末大掃除の話題に吊られて，PC部屋の片付けに着手してしまいました．数ヶ月で取り込みたい書類もそれなりに増えるもんですなぁ．保管書類もゴタゴタになっているので，一度本腰を入れてファイリングしてタグを打ってしまおうと思います．部品在庫リストは... ある程度進んで，コーナン箱１つちょっとと工作机まわりの部品が残といったところですね．</p>
<p>作業時間にすると結構なボリュームだと認識しております...ということで，実家への帰省も考慮すると，年内にFatFs動いたーってのはなさそうです．申し訳ございません...</p>
<p>年末の挨拶には少し早いので，また後日...</p>

</div>

<hr>
<h4><a href="/adiary/adiary.cgi/0126#c">■コメント（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
<h4><a href="/adiary/adiary.cgi/0126#tb">■トラックバック（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
]]></description>
	</item>
	<item>
		<title>[QuartusII] WEB editionでJTAGクロックにremoval error</title>
		<link>http://www.ujiya-denshi.com/adiary/adiary.cgi/0125#tm1229976920</link>
		<guid>http://www.ujiya-denshi.com/adiary/adiary.cgi/0125</guid>
		<category>FPGA::QuartusII</category>
		<pubDate>Mon, 22 Dec 2008 17:35:08 GMT</pubDate>
		<author>ぉゅぅ</author>
		<description><![CDATA[<div class="section">
<h3><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/0125#k125p1" name="k125p1"><span class="sanchor">■</span></a><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/&amp;search?all=2&amp;word=%5bQuartusII%5d" class="sectioncategory" title="見出し検索 ">[QuartusII]</a> WEB editionでJTAGクロックにremoval error</h3><p>前回，<a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/0124" class="tag adiary-key" title="記事指定 ">[QuartusII] TimeQuestのaltera_reserved_tckのremoval error</a>ということで，<a href="http://www001.upp.so-net.ne.jp/syrius/index.html">長船さん</a>にコメントをいただいた件を検証してみた．<br>タイトルに答えを書いている気がしないでもないが...(汗;</p>
<h4><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/0125#k125p1.1" name="k125p1.1"><span class="sanchor">▲</span></a>Subscription Licenseが有効な場合</h4>
<p>各種IPもライセンスvalidateされている状態なので，JTAG接続の必要は無い．<br>結果としては，SRからの回答もあったように，removal timing errorの発生も無い．<br>むしろ，<span style="color:#FF0000;">altera_reserved_tckがclockとしてリストアップされない</span>．Technology MapViewerにて，PostMapping後の該当回路周辺を見てみると，以下のようになっていた．</p>
<p><a title="Q2_TMV_01.png" href="http://www.ujiya-denshi.com/adiary/public/image/xoxyuxu/200812/Q2_TMV_01.png" class="tag image small"><img alt="Q2_TMV_01.png" src="http://www.ujiya-denshi.com/adiary/public/image/xoxyuxu/200812/.thumbnail/Q2_TMV_01.png.jpg"></a></p>
<p>なんかaltera_internal_jtagのポートが記憶と異なる...</p>
<br>
<h4><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/0125#k125p1.2" name="k125p1.2"><span class="sanchor">▲</span></a>Subscription Licenseが無効な場合（WEB edition）</h4>
<p>いわゆるWEB editionでも見てみた．</p>
<p><a title="Q2_TMV_02.png" href="http://www.ujiya-denshi.com/adiary/public/image/xoxyuxu/200812/Q2_TMV_02.png" class="tag image small"><img alt="Q2_TMV_02.png" src="http://www.ujiya-denshi.com/adiary/public/image/xoxyuxu/200812/.thumbnail/Q2_TMV_02.png.jpg"></a></p>
<p>どうだろうか．赤枠で囲った３つのポートが増えていることがわかるだろう．</p>
<ul>
	<li>SHIFTUSER</li>
	<li>CLKDRUSER</li>
	<li>UPDATEUSER</li>
</ul>
<p>timing errorを出していたのはこの余計な信号生成とかが絡んでいるせいと思われる．また，発生する条件も，これら追加された信号のあたりと推定するため，通常動作中には悪影響はなく，JTAG切断時やtime out時にタイミング違反となる可能性があるのかもしれない．</p>
<p>したがって，本件は問題ナシとしてcloseする．</p>
<p>この辺りを見てしまうと，NiosIIライセンスなしでQuartus II/SOPC Builderを使い続けるのは，色々とライセンス問題で泣かされそうな予感がしてくる．</p>
<p>評価に影響がないように... と考えるとあれか，30日の機能評価版を使えということか．WEBで情報が少ない理由はココにあるのかもしれないな...</p>
<p>儂はどう動くべきなんだろうかな．</p>
<p>Nios IIコアを捨てて，テキトウなCPUコアを持ってくるのも一つだろう．SOPC BuilderのGUIは捨てるのが惜しいので，Avalonシステムは継承したいところだな...</p>
<p>とりあえずもう少し何かカタチができるまでは続けよう...</p>
<p><span style="color:#0000FF;">いただいたIPを使ってファイルアクセスを試したいところですが，中間フォロー資料を先に作らせていただきたく．今週中には第一報を出します．</span><span class="footnote"><a title="期限切るのがお約束．でも，守れない期限を吐き捨てるのは見積もり誤り．" href="http://www.ujiya-denshi.com/adiary/adiary.cgi/0125#fk125n1" name="k125n1">*1</a></span></p>

</div>
<div class="footnote">
	<p class="footnote"><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/0125#k125n1" name="fk125n1">*1</a> : 期限切るのがお約束．でも，守れない期限を吐き捨てるのは見積もり誤り．</p>
</div>

<hr>
<h4><a href="/adiary/adiary.cgi/0125#c">■コメント（1件）</a></h4>
<div style="margin-left: 1em;">
長船『OpenCorePlusのIPキーパーはIPコアライセンスが無いと発生するので、３０日フル評価版でも出ると思います。  ただ、そ...』(2008/12/23 5:15)</span><br>
</div>
<h4><a href="/adiary/adiary.cgi/0125#tb">■トラックバック（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
]]></description>
	</item>
	<item>
		<title>[QuartusII] TimeQuestのaltera_reserved_tckのremoval error</title>
		<link>http://www.ujiya-denshi.com/adiary/adiary.cgi/0124#tm1229959541</link>
		<guid>http://www.ujiya-denshi.com/adiary/adiary.cgi/0124</guid>
		<category>FPGA::QuartusII</category>
		<pubDate>Sat, 20 Dec 2008 18:18:27 GMT</pubDate>
		<author>ぉゅぅ</author>
		<description><![CDATA[<div class="section">
<h3><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/0124#k124p1" name="k124p1"><span class="sanchor">■</span></a>altera_reserved_tckのremoval error</h3>
<p>Nios IIのCPUコアを使ったときの話．<br>いつものようにWarningが大量に出てきているので，自動生成ファイルを含めて中身を眺めていた．ふと，<strong>cpu.sdc</strong>を見るとこのようなコメントが見つかる．</p>
<pre>
#**************************************************************
# Timequest JTAG clock definition
#   Uncommenting the following lines will define the JTAG
#   clock in TimeQuest Timing Analyzer
#**************************************************************
</pre>
<p>確かに，clockが１つだけunconstraintになっていた．これのせいですな．<br>で，これをコメントインするとですね，表題の問題にぶちあたるわけです．</p>
<p>※画像は"新規ウィンドウで開く"を推奨</p>
<h4><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/0124#k124p1.1" name="k124p1.1"><span class="sanchor">▲</span></a>前提条件</h4>
<p><del>折角会社で(ry</del>ServiveRquestで問い合わせて見ていますが，未解決．アドバイスをいただいたのもコミで，とりあえず下記の設定で試しています．</p>
<h5>cpu.sdc</h5>
<p>以下をコメントインする．</p>
<pre>
create_clock -period 10MHz {altera_reserved_tck}
set_clock_groups -asynchronous -group {altera_reserved_tck}
</pre>
<p>そして，以下の一行をgenerated clockも制約に追加（SRにより追記OK）</p>
<pre>
set_clock_groups -asynchronous -group {altera_internal_jtag|tckutap}
</pre>
<h5>setting</h5>
<p><strong>Project右クリック→setting</strong>を開く．で，hold timingを保障するように頑張ってくれるらしい．<br><a title="Q2_Set_FS_cfg.png" href="http://www.ujiya-denshi.com/adiary/public/image/xoxyuxu/200812/Q2_Set_FS_cfg.png" class="tag image small"><img alt="Q2_Set_FS_cfg.png" src="http://www.ujiya-denshi.com/adiary/public/image/xoxyuxu/200812/.thumbnail/Q2_Set_FS_cfg.png.jpg"></a></p>
<h4><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/0124#k124p1.2" name="k124p1.2"><span class="sanchor">▲</span></a>結果</h4>
<p>Quartus II WEB editionを使うと，こうなった．家と会社の自前PCと師のPCでも同様．</p>
<p><a title="Q2_TQ_removal_err.png" href="http://www.ujiya-denshi.com/adiary/public/image/xoxyuxu/200812/Q2_TQ_removal_err.png" class="tag image small"><img alt="Q2_TQ_removal_err.png" src="http://www.ujiya-denshi.com/adiary/public/image/xoxyuxu/200812/.thumbnail/Q2_TQ_removal_err.png.jpg"></a></p>
<p>コレに対して，同じプロジェクトを送付してあるのだけれど，errorはでないというコメントであった．<br>とりあえず，サブスクリブ版でも試してみようかと思う．試してもらう，が正解か(縛</p>
<p>申し訳ないが，コレの確認ができるまではcloseできない...？</p>
<br>
<p>デフォルトでコメントアウトされていたので，無視していたのだけれど，特に問題なく動いてそうなんですよね．JTAG-UARTが入ってるとまずいかと思ってみたりもしたのだけれど，抜いても同じだった．<br>QuartusIIがFitting（配置配線）を諦めたと考えるべきなのだろうか．そのわりにはそんなWarningらしきものは出てないようだしなぁ．この手のTipsてどこかに落ちてないのだろうか...</p>
<p>Warningゼロは不可能に近いことは承知しているが，SOPC Builderだけでペタペタ作ってこれだけWarningが出てくるのも怖いわけですよ．HDL真面目に触りだして短いのもあるけれど，CでいうならばWarningの理由を全て把握した上でないと，安心して出荷できないじゃないですか．</p>
<p>PerlでHDL記述を自動生成したりしているようだけれど，Verilogのビット幅指定を端折っていたりする．これでもWarningは出てくるのだけれど，こういう感じで理解しているものは無視できる．しかし，Timing errorを無視するわけにはいかないだろう…．</p>
</div>

<div class="section">
<h3><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/0124#k124p2" name="k124p2"><span class="sanchor">■</span></a>妄想～要因の追求</h3>
<p>ちなみに．<br>今回の発生箇所周辺を<strong>Technology Map Viewer(Post-Fitting)</strong>で覗いてみた．エラー発生箇所は，外部からのJTAG信号を，ALTERAが開示していないIP（TAP controllerかな？）を介した後の信号で発生しているように見える．</p>
<p>removal timing errorの絵も理解できないので，それも問題なわけだが．hold time相当という理解なのだけれど，図示させてみるとこんな感じ．<a title="TQ_removal_err.png" href="http://www.ujiya-denshi.com/adiary/public/image/xoxyuxu/200812/TQ_removal_err.png" class="tag image small"><img alt="TQ_removal_err.png" src="http://www.ujiya-denshi.com/adiary/public/image/xoxyuxu/200812/.thumbnail/TQ_removal_err.png.jpg"></a><br></p>
<p>launch edge/latch edgeともに，altera_reserved_tckなのだけれど，slack計算がわからん．<br>Data Arrival Pathが，非同期クリアに入っているので，Data Required Pathが入るときにhold timeが必要ということなのですよね．</p>
<p>tckのクロックは100nSec（10MHz）としているのだが，この8.808nSecというのは，非同期クリアのためのhold timeというわけか．<br>で，<strong>altera_internal_jtag</strong>の中身が全く見えないのが問題を切り分けられない要因．たしかにtckが入ってきているが，updateuser信号へも伝播しているのか．遅延時間が出ているからこのとおりか...だとすると，この部分の非同期リセットは保障されないということでF.A.？</p>
<p>では，何故Quartus IIは頑張ってFittingしようとしてくれないのか．つーか，制約満たせなくてもエラーで止まらないのか．</p>
<p>という感じで，ひきずりつつ今週終了＼(^o^)／</p>

</div>

<hr>
<h4><a href="/adiary/adiary.cgi/0124#c">■コメント（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
<h4><a href="/adiary/adiary.cgi/0124#tb">■トラックバック（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
]]></description>
	</item>
	<item>
		<title>[Q2HB] SPI Core</title>
		<link>http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/ALTERADOC/Q2HB/SPI-CORE#tm1229808683</link>
		<guid>http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/ALTERADOC/Q2HB/SPI-CORE</guid>
		<category>FPGA::ALTERA_IP_CORE</category>
		<pubDate>Mon, 15 Dec 2008 08:46:01 GMT</pubDate>
		<author>ぉゅぅ</author>
		<description><![CDATA[<div class="section">
<h3><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/ALTERADOC/Q2HB/SPI-CORE#k122p1" name="k122p1"><span class="sanchor">■</span></a><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/&amp;search?all=2&amp;word=%5bAltera%5d" class="sectioncategory" title="見出し検索 ">[Altera]</a><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/&amp;search?all=2&amp;word=%5bQ2HB%5d" class="sectioncategory" title="見出し検索 ">[Q2HB]</a><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/&amp;search?all=2&amp;word=%5bIP%5d" class="sectioncategory" title="見出し検索 ">[IP]</a> SPI Core</h3><p>refer to:"Volume 5: Embedded Peripherals"，"Section I. Off-Chip Interface Peripherals"，"7. SPI Core"</p>
<h4><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/ALTERADOC/Q2HB/SPI-CORE#k122p1.1" name="k122p1.1"><span class="sanchor">▲</span></a>Core Overview</h4>
<p>(略)SPIインタフェースは，よう使われている．SPI core with Avalon-interfaceは，SPIプロトコルを実装し，バックエンドでAvalon-MMインタフェースを提供する．</p>
<p>SPI coreは，SPIマスタかSPIスレーブのどちらかを実装できる．マスタとして設定したときは，SPI coreは３２個までの独立したSPIスレーブを制御できる．送受信のレジスタ幅は，１～３２ビットの間で設定可能です．より長い転送長はソフトルーチンでサポートされます．SPI coreは，転送が完了するごとにフラグする割込み出力を提供します．</p>
<br>
<br>
<h4><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/ALTERADOC/Q2HB/SPI-CORE#k122p1.2" name="k122p1.2"><span class="sanchor">▲</span></a>Functional Description</h4>
<p>SPI coreは以下の信号で同期通信を行います（SPIプロトコル）</p>
<table>
<tbody>
	<tr class="odd"><th> Signal</th><th> symbol</th><th> description</th></tr>
	<tr class="even"><td>Master Out Slave In</td><td>mosi</td><td>マスタからのデータ出力，スレーブへのデータ入力</td></tr>
	<tr class="odd"><td>Master In Slave Out</td><td>miso</td><td>スレーブからのデータ出力，マスタへのデータ入力</td></tr>
	<tr class="even"><td>Serial Clock</td><td>sclk</td><td>マスタに駆動される，スレーブへのクロック．データビットの同期に使う</td></tr>
	<tr class="odd"><td>Slave Select</td><td>ss_n</td><td>マスタに駆動される，個別のスレーブへのSelect信号（active Low）．対象となるスレーブを選択するのに使う</td></tr>
</tbody></table>
<p>このコアには，ユーザに見える柿のリソースがあります．</p>
<ul>
	<li>MemoryMapped register<br>rxdata, txdata,status, control, slaveselect</li>
	<li>４つのSPIインタフェースポート<br>sclk, ss_n, mosi, and miso</li>
</ul>
<br>
</div>

<div class="section">
<h3><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/ALTERADOC/Q2HB/SPI-CORE#k122p2" name="k122p2"><span class="sanchor">■</span></a>Instantiating the SPI Core in SOPC Builder</h3>
<p>（なんともはやふつー過ぎて省略）</p>
<br>
</div>

<div class="section">
<h3><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/ALTERADOC/Q2HB/SPI-CORE#k122p3" name="k122p3"><span class="sanchor">■</span></a>Software Programming Model</h3>
<h4><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/ALTERADOC/Q2HB/SPI-CORE#k122p3.1" name="k122p3.1"><span class="sanchor">▲</span></a>alt_avalon_spi_command()</h4>
<pre>
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)
</pre>
<p>データ長8bit以下のSPIマスタ向けに設計されている．現状，データ長8bit以上のハードには対応していない．<br>この関数を一度呼ぶと，MOSIからデータを吐いて，MISOからデータを受け取ります．</p>
<ol>
	<li>slaveの指定されたslave chipselect信号をアサートします．IDはゼロオリジンです．</li>
	<li>write_lengthバイトだけwdataから読み出して出力します．MISOからのデータは捨てます．</li>
	<li>read_lengthバイトだけ，read_dataへデータを格納します．MOSIにはゼロを吐き続けます．</li>
	<li>スレーブのselect信号をデアサートします．</li>
</ol>
<p>コードは，以下のファイルを見ると把握できます．リード時の吐き捨てがマスタ出力ゼロで決めうちですね．<br>C:\altera\81\ip\altera\sopc_builder_ip\altera_avalon_spi\HAL\src\altera_avalon_spi.c</p>
<p>※SDカードへのアクセスの際には，1'b1での出力が必要と思う（ELMより．．．SD Spec.見たほうがいいか？）</p>
<br>
<br>
</div>

<div class="section">
<h3><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/ALTERADOC/Q2HB/SPI-CORE#k122p4" name="k122p4"><span class="sanchor">■</span></a>問題点</h3>
<p>SPIマスタのとき，動作クロックをWizardで定義することになるが，動的な変更が効かない<br><a href="http://elm-chan.org/docs/mmc/mmc.html">(ELM) MMCの使い方</a> より，</p>
<blockquote>
<p>SPIモードの場合は、速度を制限する状態(OD駆動)が無いので、クロック切り替えなしで最初から20/25MHzでもOKです。</p>
</blockquote>
<p>20MHz固定でもいいか...</p>
<br>
</div>

<div class="section">
<h3><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/ALTERADOC/Q2HB/SPI-CORE#k122p5" name="k122p5"><span class="sanchor">■</span></a>SDカードをSPIモードで使うときの結論</h3>
<p>IPコアは流用できるが，HAL・ドライバは使用できない．自前で制御レジスタをたたくべし．ソースコードの流用はできるだろう（あまりおいしく無いけれど）<br>→ よそのIPを拾ってこよう…．</p>

</div>

<hr>
<h4><a href="/adiary/adiary.cgi/HDL/ALTERADOC/Q2HB/SPI-CORE#c">■コメント（3件）</a></h4>
<div style="margin-left: 1em;">
長船『AMETHYTSで使っているコアです。VHDLだけど。→http://haruka281.hp.infoseek.co.jp/l...』(2008/12/19 28:03)</span><br>
ぉゅぅ『&gt;長船 さまっ 　ありがとうございます!! Avalonインタフェースどころか，SOPC Builderのコアとして使えるようで...』(2008/12/20 26:07)</span><br>
長船『MMC_SPIはSoPC Builder用のコアですね。スクリプトもくっついてるので、プロジェクトフォルダ以下にフォルダごとコピ...』(2008/12/21 6:31)</span><br>
</div>
<h4><a href="/adiary/adiary.cgi/HDL/ALTERADOC/Q2HB/SPI-CORE#tb">■トラックバック（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
]]></description>
	</item>
	<item>
		<title>[SOPC] システムリセットについて</title>
		<link>http://www.ujiya-denshi.com/adiary/adiary.cgi/0121#tm1229327271</link>
		<guid>http://www.ujiya-denshi.com/adiary/adiary.cgi/0121</guid>
		<category>FPGA::QuartusII</category>
		<pubDate>Mon, 15 Dec 2008 04:08:38 GMT</pubDate>
		<author>ぉゅぅ</author>
		<description><![CDATA[<div class="section">
<h3><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/0121#k121p1" name="k121p1"><span class="sanchor">■</span></a><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/&amp;search?all=2&amp;word=%5bAltera%5d" class="sectioncategory" title="見出し検索 ">[Altera]</a><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/&amp;search?all=2&amp;word=%5bSOPC%5d" class="sectioncategory" title="見出し検索 ">[SOPC]</a><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/&amp;search?all=2&amp;word=%5bQ2HB%5d" class="sectioncategory" title="見出し検索 ">[Q2HB]</a> システムリセットについて</h3><p><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/0116" class="tag adiary-key" title="記事指定 ">シミュレーション実施時に不定値が伝播した</a>と書きましたが，SOPC上でのIPコアの設定が一部まずかったのが要因のようです．<br>結論に至る前に，そもそもPLLが安定するまでの間はどうなっているのかという疑問を払拭するために調べてみました．</p>
<p>そのメモをここに掲載しておきます．</p>
<p>前回の記事で注目していたのは，SOPC上でインスタンス化した，PLLとDDRSDRAM(HP)コントローラでした．それぞれについて確認しましょう．</p>
</div>

<div class="section">
<h3><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/0121#k121p2" name="k121p2"><span class="sanchor">■</span></a>PLL</h3>
<p>資料の読み取りは，<a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/ALTERADOC/Q2HB/PLL" class="tag adiary-key" title="記事指定 ">[Q2HB]PLL</a>を参照ください．<br>仕様書にSOPC全域にリセット要求を発します，と明記してありました．</p>
<br>
</div>

<div class="section">
<h3><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/0121#k121p3" name="k121p3"><span class="sanchor">■</span></a>DDRSDRAM(HP)</h3>
<p>DDRSDRAM(HP)のreset_request_n信号をどのように処理しているかを確認する．SOPC Builderが作ったファイルを開いて，DDR moduleのインスタンス化コードを参照し，そこから当該信号がどのnetにぶら下がっているかを確認する．<br></p>
<p><strong>ddrsdram_s1_arbitrator</strong>に入力されているだけだったので，該当モジュールを見る．</p>
<pre>
module ddrsdram_s1_arbitrator (
  input            ddrsdram_s1_resetrequest_n;
  output           ddrsdram_s1_resetrequest_n_from_sa;
  wire             ddrsdram_s1_resetrequest_n_from_sa;
  //assign ddrsdram_s1_resetrequest_n_from_sa = ddrsdram_s1_resetrequest_n
  // so that symbol knows where to group signals which may go to master only, which is an e_assign
  assign ddrsdram_s1_resetrequest_n_from_sa = ddrsdram_s1_resetrequest_n;
</pre>
<p><strong>ddrsdram_s1_resetrequest_n_from_sa</strong>へ常時代入されていることがわかる．インスタンス化しているところに戻ると，この出力信号を束ねているところがある．</p>
<pre>
  //reset sources mux, which is an e_mux
  assign reset_n_sources = ~(~reset_n |
    0 |
    0 |
    cpu_jtag_debug_module_resetrequest_from_sa |
    cpu_jtag_debug_module_resetrequest_from_sa |
    0 |
    ~ddrsdram_s1_resetrequest_n_from_sa |
    ~ddrsdram_s1_resetrequest_n_from_sa |
    0 |
    pll0_s1_resetrequest_from_sa |
    pll0_s1_resetrequest_from_sa);
</pre>
<p><strong>reset_n_sources</strong>が，システム全体のリセット要求が無いことを確認する信号になっている模様（未検証）．</p>
<pre>
  //reset is asserted asynchronously and deasserted synchronously
  Nios2_NoDDR_reset_SysClk_domain_synch_module Nios2_NoDDR_reset_SysClk_domain_synch
    (
      .clk      (SysClk),
      .data_in  (1'b1),
      .data_out (SysClk_reset_n),
      .reset_n  (reset_n_sources)
    );

  //reset is asserted asynchronously and deasserted synchronously
  Nios2_NoDDR_reset_osc_clk_domain_synch_module Nios2_NoDDR_reset_osc_clk_domain_synch
    (
      .clk      (osc_clk),
      .data_in  (1'b1),
      .data_out (osc_clk_reset_n),
      .reset_n  (reset_n_sources)
    );
</pre>
<p>osc_clk（FPGA外部からの唯一のクロック）を用いて，非同期リセット＋同期リセット解除の信号<strong>SysClk_reset_n</strong>・<strong>osc_clk_reset_n</strong>を生成する．clock domainが複数存在するが，それぞれで同期化して出力している．<br>このリセット信号を誰が使っているのかを見ていくと...</p>
<pre>
  ddrsdram the_ddrsdram (
      .soft_reset_n      (osc_clk_reset_n)

  pll0_s1_arbitrator the_pll0_s1
      .reset_n                                           (osc_clk_reset_n)

  Nios2_NoDDR_clock_0_out_arbitrator the_Nios2_NoDDR_clock_0_out
      .reset_n                                           (osc_clk_reset_n)
</pre>
<p>ということで，各IPのリセット要求が解除されるまではシステムが停止する仕様になっています．DDR-SDRAMについては，PLL安定するまではリセット要求を出します．また，PLLのリセットを行わない，PHYだけのリセット要求入力に，同期化したシステムリセット要求信号が入ります．リセット解除の同期化は，どちらが先になるのかわからないので，厳密には一番遅い周期にあわせたウェイトを入れてやる必要があるのかもしれません．FIFOにリクエストを積み上げるのであれば，リセットタイミングが多少ずれても，Power on reset直後の値さえ合致していれば，レイテンシが少しかさむだけで問題なく動くでしょう．</p>
<br>
</div>

<div class="section">
<h3><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/0121#k121p4" name="k121p4"><span class="sanchor">■</span></a>結論</h3>
<h4><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/0121#k121p4.1" name="k121p4.1"><span class="sanchor">▲</span></a>仕様解釈</h4>
<p>IP側でPLL発振安定までの間に不定値が伝播するような問題はない．<br>→PLL lock待ちの回路も自作は不要．<br></p>
<p>ただし，ALTPLLの"locked"信号を出力する設定にしておくことが必要!!そのほか，ResetRequest信号が出ているIPについては，その出力を有効にしておく必要があるでしょう（未確認）．</p>
<br>
<h4><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/0121#k121p4.2" name="k121p4.2"><span class="sanchor">▲</span></a><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/0116" class="tag adiary-key" title="記事指定 ">シミュレーション実施時に不定値が伝播した</a>問題について</h4><p>シミュレーション実施時には，PLL側の"locked"信号を出していなかったので，システムリセットがネゲートされていたと考えられます．<span class="footnote"><a title="DDR側のreset requestが入ってきていてもおかしくは無いのだが.." href="http://www.ujiya-denshi.com/adiary/adiary.cgi/0121#fk121n1" name="k121n1">*1</a></span></p>
<p>正しく？設定をすると，問題なくModelSIM WEB editionでFunction Simulationの実行ができました．</p>

</div>
<div class="footnote">
	<p class="footnote"><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/0121#k121n1" name="fk121n1">*1</a> : DDR側のreset requestが入ってきていてもおかしくは無いのだが..</p>
</div>

<hr>
<h4><a href="/adiary/adiary.cgi/0121#c">■コメント（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
<h4><a href="/adiary/adiary.cgi/0121#tb">■トラックバック（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
]]></description>
	</item>
	<item>
		<title>[Q2HB] Performance Counter Core</title>
		<link>http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/ALTERADOC/Q2HB/IP_Performance-Cnt-Core#tm1229314080</link>
		<guid>http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/ALTERADOC/Q2HB/IP_Performance-Cnt-Core</guid>
		<category>FPGA::ALTERA_IP_CORE</category>
		<pubDate>Mon, 15 Dec 2008 04:08:00 GMT</pubDate>
		<author>ぉゅぅ</author>
		<description><![CDATA[<div class="section">
<h3><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/ALTERADOC/Q2HB/IP_Performance-Cnt-Core#k120p1" name="k120p1"><span class="sanchor">■</span></a><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/&amp;search?all=2&amp;word=%5bAltera%5d" class="sectioncategory" title="見出し検索 ">[Altera]</a><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/&amp;search?all=2&amp;word=%5bQ2HB%5d" class="sectioncategory" title="見出し検索 ">[Q2HB]</a><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/&amp;search?all=2&amp;word=%5bIP%5d" class="sectioncategory" title="見出し検索 ">[IP]</a> Performance Counter Core</h3><p>refer to:"Volume 5: Embedded Peripherals"，"Section V. Test and Debug Peripherals", "29. Performance Counter Core"</p>
<p><strong>注意</strong><br>performance counterは，複数clockを使用するシステム上では，CPU clockと同じdomainに配置すること．異なる場合はサイクル数から実時間へ正しく変換できない．(p.2453 "Multiple Clock Domain Considerations")</p>
<h4><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/ALTERADOC/Q2HB/IP_Performance-Cnt-Core#k120p1.1" name="k120p1.1"><span class="sanchor">▲</span></a>Core Overview</h4>
<p>高精度パフォーマンスカウンタを提供するらしい．GNU profiler, gprofでも使得る模様．通常のInterval timerを利用することも可能．<br>３種類の測定方法については，"AN 391: Profiling Nios II Systems."にて述べる．</p>
<p>機能としては，クロックサイクルの計数と，イベント回数の記録である．それぞれ64bit/32bit精度を有す．</p>
<br>
</div>

<div class="section">
<h3><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/ALTERADOC/Q2HB/IP_Performance-Cnt-Core#k120p2" name="k120p2"><span class="sanchor">■</span></a>Software Programming Model</h3>
<p>便利なマクロや関数が用意されている．カウンタの初期化，開始，停止，測定対象セクションの開始・終了を行う．測定結果についても，テキストベースで表を出力する関数を用意してある．</p>
<p>パフォーマンスカウンタの名称を"performance counter"とした場合で，section counterは１番目を用いる例である．</p>
<pre>
    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));
</pre>
<p>注意点としては，section timeのみを図りたい場合でも，total counterも起動する必要があること．また，printfでalt_u64の表示を行う場合には，書式装飾子"q"<span class="footnote"><a title="gcc方言：long long 型の書式．&quot;qu&quot;で&quot;unsigned long long&quot;型である．" href="http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/ALTERADOC/Q2HB/IP_Performance-Cnt-Core#fk120n1" name="k120n1">*1</a></span>を付与する必要がある．</p>
<br>
</div>
<div class="footnote">
	<p class="footnote"><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/ALTERADOC/Q2HB/IP_Performance-Cnt-Core#k120n1" name="fk120n1">*1</a> : gcc方言：long long 型の書式．"qu"で"unsigned long long"型である．</p>
</div>

<div class="section">
<h3><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/ALTERADOC/Q2HB/IP_Performance-Cnt-Core#k120p3" name="k120p3"><span class="sanchor">■</span></a>注意事項</h3>
<p>英語力の弱い人が適当に訳して抜粋，補強しています．<br>あやしいな，と思ったらご指摘いただけますと幸いです．<br>なお，オリジナルの英文を参照されることを強く推奨いたします．</p>

</div>

<hr>
<h4><a href="/adiary/adiary.cgi/HDL/ALTERADOC/Q2HB/IP_Performance-Cnt-Core#c">■コメント（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
<h4><a href="/adiary/adiary.cgi/HDL/ALTERADOC/Q2HB/IP_Performance-Cnt-Core#tb">■トラックバック（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
]]></description>
	</item>
	<item>
		<title>[UG] DDR and DDR2 SDRAM High-Performance Controller User Guide</title>
		<link>http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/ALTERADOC/UG/DDR_SDRAM_HP#tm1229314044</link>
		<guid>http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/ALTERADOC/UG/DDR_SDRAM_HP</guid>
		<category>FPGA::ALTERA_IP_CORE</category>
		<pubDate>Mon, 15 Dec 2008 04:07:24 GMT</pubDate>
		<author>ぉゅぅ</author>
		<description><![CDATA[<div class="section">
<h3><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/ALTERADOC/UG/DDR_SDRAM_HP#k119p1" name="k119p1"><span class="sanchor">■</span></a><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/&amp;search?all=2&amp;word=%5bSOPC%5d" class="sectioncategory" title="見出し検索 ">[SOPC]</a><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/&amp;search?all=2&amp;word=%5bUG%5d" class="sectioncategory" title="見出し検索 ">[UG]</a><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/&amp;search?all=2&amp;word=%5bIP%5d" class="sectioncategory" title="見出し検索 ">[IP]</a> DDR_SDRAM_HP</h3><p>refer to:"DDR and DDR2 SDRAM High-Performance Controller User Guide (ug_ddr_ddr2_sdram_hp.pdf)"</p>
<h4><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/ALTERADOC/UG/DDR_SDRAM_HP#k119p1.1" name="k119p1.1"><span class="sanchor">▲</span></a>注意事項（document内部から場所を問わず抜粋）</h4>
<p>論理合成時には，あらかじめTcl制約スクリプトを実行しておく必要がある．</p>
<div>
<p>&lt;variation name&gt;_pin_assignments.tcl.</p>
</div>
<br>
<h4><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/ALTERADOC/UG/DDR_SDRAM_HP#k119p1.2" name="k119p1.2"><span class="sanchor">▲</span></a>ライセンス制約</h4>
<p><strong>OpenCore Plus Evaluation</strong>の場合：<br>time-limited device programming fileを生成する．このため，"Tethered"または"Untethered"による実行となる．時間制限にのみ縛られる場合<span class="footnote"><a title="この場合は全てのライセンスにおいてUntetheredもしくはライセンス有りである必要がある．" href="http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/ALTERADOC/UG/DDR_SDRAM_HP#fk119n1" name="k119n1">*1</a></span>か，JTAGケーブルにより接続されている状態が維持されている必要があります．</p>
<br>
<h4><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/ALTERADOC/UG/DDR_SDRAM_HP#k119p1.3" name="k119p1.3"><span class="sanchor">▲</span></a>Functional Description</h4>
<h5>Signals</h5>
<table>
<tbody>
	<tr class="odd"><th> Symbol</th><th>説明</th></tr>
	<tr class="even"><td>global_reset_n input)</td><td>DDRSDRAMコントローラへの非同期リセット入力．全てのリセット信号は，この信号を同期化したものからなる．この信号がローレベルの間は，完全にALTMEMPHY megafunction（PLLも含む）をリセット状態にする．</td></tr>
	<tr class="odd"><td>pll_ref_clk (Input)</td><td>PLLへのリファレンスクロック入力．</td></tr>
	<tr class="even"><td>phy_clk (Output)</td><td>megafunctionのユーザ向けシステムクロック．DDR high-performance controllerとの入出力信号は，このクロックに同期して行う必要がある．</td></tr>
	<tr class="odd"><td>reset_phy_clk_n (Output)</td><td>ユーザへのリセット信号．この信号は，phy_clkクロックドメインに同期してアサート・デアサートされる．</td></tr>
	<tr class="even"><td>aux_full_rate_clk (Output)</td><td>ALTMEMPHY megafunctionがユーザに提供している代替クロック（alternative clock）．このクロックは，外部メモリインタフェースのように常に同じ周波数で走ります．<br>half-rate modeでは，このクロックはphy_clkの２倍の周波数で，2x clockが必要なときはいつも使えます．<br>full-rate modeでは，このクロックはphy_clk信号と同じPLL出力で駆動されます．</td></tr>
	<tr class="odd"><td>aux_half_rate_clk (Output)</td><td>ユーザ向け代替クロック．このクロックは常に外部メモリの半分の周波数で走っています．<br>フルレートモードのとき，このクロックはphy_clkの周波数の半分として使うことができます．例えば，half-rate bridge側に使うことができます．<br>ハーフレートモードのとき，このクロックはphy_clk信号のように，PLL出力と同じもので駆動されます．</td></tr>
	<tr class="even"><td>dll_reference_clk (Output)</td><td>外部でインスタンス化されるDLLに引き込まれる基準クロック．</td></tr>
	<tr class="odd"><td>reset_request_n  (Output)</td><td>PLL出力がロックしていないときに示すリセット要求信号．他のシステムレベルリセットコントローラへの入力の，リセット要求としてこの信号を使う．PLLがロックしていない間は，この信号は常にローレベルです．<br>コレを使うどんなリセット回路も，レベル検出よりは立下りエッジでリセット要求を検出すべきではない．（＝レベルでやれ？）</td></tr>
	<tr class="even"><td>soft_reset_n (Input)</td><td>SOPC Builderのためのエッヂ検出リセット入力で，使用するか，他のシステムリセット回路によって制御される．この信号は，PHYに対して完全なリセットをアサートする要因となるが，PHYで使われているPLLには使われない．</td></tr>
	<tr class="odd"><td>oct_ctl_rs_value (Input)</td><td>ALTMEMPHY信号は，シリアル終端の値を与えます．ALT_OCT megafunction出力"Seriesterminationcontrol"に接続されるべきです．</td></tr>
	<tr class="even"><td>oct_ctl_rt_value (Input)</td><td>ALTMEMPHY信号は，パラレル終端の値を与えます．ALT_OCT megafunction出力"Parallelterminationcontrol"に接続されるべきです．</td></tr>
	<tr class="odd"><td>dqs_delay_ctrl_import (Input)</td><td>このALTMEMPHYインスタンス内で，他のALTMEMPHYインスタンスのDLLを使うことを許可します．DLLつきのALTMEMPHYインスタンスの外部ポートを，他のALTMEMPHYインスタンスの入力ポートへ接続してください．</td></tr>
</tbody></table>
<br>
<br>
<br>
<br>
<h4><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/ALTERADOC/UG/DDR_SDRAM_HP#k119p1.4" name="k119p1.4"><span class="sanchor">▲</span></a>Creating A Simulation Testbench Environment</h4>
<br>
<br>
</div>
<div class="footnote">
	<p class="footnote"><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/ALTERADOC/UG/DDR_SDRAM_HP#k119n1" name="fk119n1">*1</a> : この場合は全てのライセンスにおいてUntetheredもしくはライセンス有りである必要がある．</p>
</div>

<div class="section">
<h3><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/ALTERADOC/UG/DDR_SDRAM_HP#k119p2" name="k119p2"><span class="sanchor">■</span></a>注意事項</h3>
<p>英語力の弱い人が適当に訳して抜粋，補強しています．<br>あやしいな，と思ったらご指摘いただけますと幸いです．<br>なお，オリジナルの英文を参照されることを強く推奨いたします．</p>

</div>

<hr>
<h4><a href="/adiary/adiary.cgi/HDL/ALTERADOC/UG/DDR_SDRAM_HP#c">■コメント（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
<h4><a href="/adiary/adiary.cgi/HDL/ALTERADOC/UG/DDR_SDRAM_HP#tb">■トラックバック（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
]]></description>
	</item>
	<item>
		<title>[Q2HB] PLL</title>
		<link>http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/ALTERADOC/Q2HB/PLL#tm1229314004</link>
		<guid>http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/ALTERADOC/Q2HB/PLL</guid>
		<category>FPGA::ALTERA_IP_CORE</category>
		<pubDate>Mon, 15 Dec 2008 04:06:44 GMT</pubDate>
		<author>ぉゅぅ</author>
		<description><![CDATA[<div class="section">
<h3><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/ALTERADOC/Q2HB/PLL#k118p1" name="k118p1"><span class="sanchor">■</span></a><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/&amp;search?all=2&amp;word=%5bSOPC%5d" class="sectioncategory" title="見出し検索 ">[SOPC]</a><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/&amp;search?all=2&amp;word=%5bIP%5d" class="sectioncategory" title="見出し検索 ">[IP]</a> PLL</h3><p>refer to:"Volume 5: Embedded Peripherals"，"Section VI. Clock Control Peripherals", "31. PLL Core"</p>
<h4><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/ALTERADOC/Q2HB/PLL#k118p1.1" name="k118p1.1"><span class="sanchor">▲</span></a>Core Overview</h4>
<p>Avalon-MM I/Fをもつ，Stratixシリーズ/Cycloneシリーズ搭載のオンチップPLLコアである．PLLコンポーネントは，Mega FunctionのALTPLLを用いており，ラッパーコアとなる．SOPC Builderから実装するメリットとしては，status/control signalをMMレジスタからアクセス・参照することができる．</p>
<p>用途は，システム全域のクロック生成・モジュールの一部に供給するクロックの生成，である．</p>
<br>
<h4><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/ALTERADOC/Q2HB/PLL#k118p1.2" name="k118p1.2"><span class="sanchor">▲</span></a>Function Description</h4>
<h5>PLL Status and Control Signals</h5>
<p>ALTPLL Mega Fuctionはパラメタライズされていることから，ステータス・コントロール信号は可変長となる．所望のステータス信号・コントロール信号をSOPC Builder systemモジュール外に出すことができる．<strong>排他的に</strong>，Avalon-MM レジスタ経由でアクセスができる．</p>
<p>設定方法は，Instantiating the Core in SOPC Builderを参照のこと．</p>
<br>
<h5>System Reset Considerations</h5>
<p>FPGAのコンフィレグレーションにおいて，PLLコアは自動的にリセットします．PLLに与えられたリセット回路は，SOPC Builder systemモジュール全域へのリリースを解除する前に，PLLがロックすることを保障します．</p>
<p>注：PLLをリセットすることは，関連するSOPC Builder system moduleをリセットします．</p>
<br>
<h5>Instantiating the Core in SOPC Builder</h5>
<p>PLLコアは，ALTPLL Mega Functionを用いています．MegaWizardインタフェースを用いて，ユーザがステータス・コントロール信号の接続を指定します．<br>"<strong>PLL Setting</strong>"にて，ALTPLL MegaWizardを起動します．ここで，<strong>[1]Parameter Setting</strong>の"Inputs/Lock"ページで，"Lock output"グループに，<strong> Create "locked" output</strong>チェックボックスがあります．これにチェックを入れると，PLL lock状態の信号が，SOPC Buidlerシステムモジュールのtop level moduleに出力されます．</p>
<p>その後，"<strong>Interface Page</strong>"にて，それの信号を出力する先を選択することができます．（registerかexportか）</p>
<br>
<table>
<tbody>
	<tr class="odd"><th>ALTPLL Name</th><th>Input / Output</th><th>Avalon-MM PLL Wizard Name</th><th>Default Behavior</th><th>Description</th></tr>
	<tr class="even"><td>areset</td><td>input</td><td>PLL Reset Input</td><td>デバイスコンフィグレーション時のみPLL初期化</td><td>PLLおよびシステムモジュールをリセットする</td></tr>
	<tr class="odd"><td>pllena</td><td>input</td><td>PLL Enable Input</td><td>常にenable</td><td>PLLをenableにする信号..</td></tr>
	<tr class="even"><td>pfdena</td><td>input</td><td>PFD Enable Input</td><td>位相-周波数検出器は有効</td><td>検出器を有効にする．クロックリファレンスを切り替えるときに使う？</td></tr>
	<tr class="odd"><td>locked</td><td>output</td><td>PLL Locked Output</td><td>-</td><td>入力クロックにPLLがロックしたときにアサートされる</td></tr>
</tbody></table>
<p>※aresetは，PLLのみをリセットするのではなく，SOPC Builder system module全域をリセットします．</p>
<br>
</div>

<div class="section">
<h3><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/ALTERADOC/Q2HB/PLL#k118p2" name="k118p2"><span class="sanchor">■</span></a>注意事項</h3>
<p>英語力の弱い人が適当に訳して抜粋，補強しています．<br>あやしいな，と思ったらご指摘いただけますと幸いです．<br>なお，オリジナルの英文を参照されることを強く推奨いたします．</p>

</div>

<hr>
<h4><a href="/adiary/adiary.cgi/HDL/ALTERADOC/Q2HB/PLL#c">■コメント（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
<h4><a href="/adiary/adiary.cgi/HDL/ALTERADOC/Q2HB/PLL#tb">■トラックバック（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
]]></description>
	</item>
	<item>
		<title>[MAVA] Avalon-MMの仕様</title>
		<link>http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/ALTERADOC/MAVA/AVA_MM_ORVERVIEW#tm1229313939</link>
		<guid>http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/ALTERADOC/MAVA/AVA_MM_ORVERVIEW</guid>
		<category>FPGA::ALTERA_IP_CORE</category>
		<pubDate>Mon, 15 Dec 2008 04:05:39 GMT</pubDate>
		<author>ぉゅぅ</author>
		<description><![CDATA[<div class="section">
<h3><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/ALTERADOC/MAVA/AVA_MM_ORVERVIEW#k117p1" name="k117p1"><span class="sanchor">■</span></a><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/&amp;search?all=2&amp;word=%5bAltera%5d" class="sectioncategory" title="見出し検索 ">[Altera]</a><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/&amp;search?all=2&amp;word=%5bMAVA%5d" class="sectioncategory" title="見出し検索 ">[MAVA]</a>Avalon-MMの仕様</h3><p>referto: mnl_avalon_spec.pdf</p>
<h4><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/ALTERADOC/MAVA/AVA_MM_ORVERVIEW#k117p1.1" name="k117p1.1"><span class="sanchor">▲</span></a>Signals</h4>
<p>Avalonシステムでは，全ての信号はアクティブ-Highとなっている．postfixが"-n"と表記している信号は，アクティブ-Lowとして参照が可能な信号である．</p>
<h5>基本的な信号</h5>
<table>
<tbody>
	<tr class="odd"><th>Signal Type</th><th>Width</th><th>Dir</th><th>Description</th></tr>
	<tr class="even"><td>read，read_n</td><td>1</td><td>In</td><td>読み出し要求．アサートされていればreaddataを要求されている．</td></tr>
	<tr class="odd"><td>write，write_n</td><td>1</td><td>In</td><td>書き込み要求．writedataが有効．</td></tr>
	<tr class="even"><td>address</td><td>1-32</td><td>In</td><td>当該I/Fのデータ幅を１としてアドレッシングされる．<br>'1'であっても，16bit幅なら2byte目，32bit幅なら4byte目相当となる</td></tr>
	<tr class="odd"><td>readdata</td><td>8*2**N(N=0-7)</td><td>Out</td><td>slaveからmasterへ出力するデータ信号．</td></tr>
	<tr class="even"><td>writedata</td><td>8*2**N(N=0-7)</td><td>In</td><td>masterからslaveへ出力されるデータ信号．</td></tr>
	<tr class="odd"><td>byteenable，byteenable_n</td><td>2**N(N=0-7)</td><td>In</td><td>バイトレーンを指定する．<br>データ幅が複数バイトのときに，アサートされているビットに対応したバイト値が有効であることを示す．</td></tr>
	<tr class="even"><td>begintransfer</td><td>1</td><td>In</td><td>waitrequest信号にかかわらず，書く転送の最初のサイクルにアサートされる．</td></tr>
</tbody></table>
<h5>Wait-state信号</h5>
<table>
<tbody>
	<tr class="odd"><th>Signal Type</th><th>Width</th><th>Dir</th><th>Description</th></tr>
	<tr class="even"><td>waitrequest，waitrequest_n</td><td>1</td><td>Out</td><td>read/write要求に応答できないときに，slaveによってアサートされる．アサートされたとき，slaveへの制御信号（begintransferとbeginbursttransferを除く）は値を維持する．<br>Avalon-MM slaveは，アイドルサイクルの間，waitrequestをアサートすべきです．<br>Avalon-MM master mayは，waitrequestがアサートされたときにトランザクションを初期化すべきです．<br>Avalon-MM slaveのデザインは，この可能性を考慮に入れなければなりません．</td></tr>
</tbody></table>
<p>サンプルのチャートをみると，masterからのreadrequest/writerequestがアサートされたときに脊髄反射する必要があるみたい．コンポーネント自身がデータの準備ができていない場合に，デアサートしておいたほうが無難かもしれん．masterが常にwaitrequestを受けていても問題が無いかはわからんけど．</p>
<p># 参照していないだろうし大丈夫かなぁ</p>
<br>
<h5>Pipeline Signals</h5>
<table>
<tbody>
	<tr class="odd"><th>Signal Type</th><th>Width</th><th>Dir</th><th>Description</th></tr>
	<tr class="even"><td>readdatavalid，readdatavalid_n</td><td>1</td><td>Out</td><td>パイプライン読み出し転送の可変長レイテンシに使われます．readdata信号が，前の読み出し要求に対する応答の有効なデータを含んでいることを示すために，slaveによってアサートされます．<br>readdatavalidを有するslaveは，要求を受けたそれぞれの読み出しサイクルのために，読み出しの受領とreaddatavalidのアサートの間に，この信号を１サイクル以上のレイテンシだけアサートする必要があります．</td></tr>
</tbody></table>
<br>
<h5>Burst Signals</h5>
<table>
<tbody>
	<tr class="odd"><th>Signal Type</th><th>Width</th><th>Dir</th><th>Description</th></tr>
	<tr class="even"><td>burstcount</td><td>1-32</td><td>In</td><td>burstの１サイクル目の間，burstcountはバースト転送回数を示します．burstcountのポート幅がNの場合，サイズ2**(N-1)の最大バースト数がエンコードできます．<br>burstcount信号は全体の転送に一定のままで残っています．（Figureでは１ｓｔサイクルだけなんだが）</td></tr>
	<tr class="odd"><td>beginbursttransfer</td><td>1</td><td>In</td><td>burst転送の開始のとき，burstの１サイクル目のためにアサートされます．<br>この信号はwaitrequestの値に関係なく，１サイクル後にデアサートされます．</td></tr>
</tbody></table>
<br>
<h5>Flow Control Signals</h5>
<table>
<tbody>
	<tr class="odd"><th>Signal Type</th><th>Width</th><th>Dir</th><th>Description</th></tr>
	<tr class="even"><td>readyfordata</td><td>1</td><td>Out</td><td>ペリフェラルがwrite転送準備を整えたことを示します．</td></tr>
	<tr class="odd"><td>dataavailable</td><td>1</td><td>Out</td><td>ペリフェラルがread転送準備を整えたことを示します．</td></tr>
</tbody></table>
<br>
<h5>Reset Signals</h5>
<table>
<tbody>
	<tr class="odd"><th>Signal Type</th><th>Width</th><th>Dir</th><th>Description</th></tr>
	<tr class="even"><td>resetrequest，resetrequest_n</td><td>1</td><td>Out</td><td>ペリフェラルにAvalon-MMシステム全体をリセットすることを許可します．システムリセット信号を生成するために，全てのリセット信号が互いにORされます．</td></tr>
</tbody></table>
<br>
<h4><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/ALTERADOC/MAVA/AVA_MM_ORVERVIEW#k117p1.2" name="k117p1.2"><span class="sanchor">▲</span></a>Slave Interface Properties</h4>
<table>
<tbody>
	<tr class="odd"><th>Name</th><th>Def.Value</th><th>有効範囲</th><th>説明</th></tr>
	<tr class="even"><td>readLatency</td><td>0</td><td>0-63</td><td>読み出しレイテンシが固定の場合に使用されるレイテンシの値．<br>readdatavalid信号が含まれる場合は未使用となる．</td></tr>
	<tr class="odd"><td>writeWaitTime</td><td>0</td><td>0-1000</td><td>slaveがwriteを許容するまでのサイクル数を示す．タイミングは，slaveがwaitrequestをwriteWaitTimeサイクルだけアサートしたようになる．</td></tr>
</tbody></table>
<p>waitrequest信号が含まれる場合は未使用となる．|</p>
<table>
<tbody>
	<tr class="odd"><td>readWaitTime</td><td>1</td><td>0-1000</td><td>slaveがread応答するまでのサイクル数を示す．タイミングは，slaveがwaitrequestをreadWaitTimeサイクルだけアサートしたようになる．</td></tr>
	<tr class="even"><td>maximumPendingRead Transactions</td><td>1</td><td>1-64</td><td>slaveによってqueueに入れることができる最大のread要求数．</td></tr>
	<tr class="odd"><td>burstOnBurstBoundariesOnly</td><td>false</td><td>true/false</td><td>もしtrueにするならば，このインタフェースで提供されるburst転送が，burstサイズの倍数となるアドレスから始まることが保障される．<br>（使い手が保障するのか?よくわからん）</td></tr>
	<tr class="even"><td>linewrapBursts</td><td>false</td><td>true/false</td><td>tureの場合，slaveがインクリメンタルバーストに変えて，line wrapping burstを実装していることを示します．<br>wrapping burstについて，アドレスがburst境界に達したときに，下位のビットだけが，アドレシングに使用される必要があるように，以前のburst境界にラップバックします．<br>Ex.) burst境界が32byteで32bit幅のインタフェースがアドレス0x0Cにアクセスするwrapping burstは，次の順にアクセスを行う．（burst sizeより大きいビットは変化しないことに注意）<br>0xC, 0x10, 0x14, 0x18, 0x1C, 0x00, 0x04, 0x08</td></tr>
	<tr class="odd"><td>maxBurstSize</td><td>1</td><td>64</td><td>slaveが許容する最大burstサイズ</td></tr>
	<tr class="even"><td>bridgesToMaster</td><td>null</td><td>同じコンポーネントのAvalon－MM master</td><td>slaveとmasterから構成され，特定のbyteまたはbytesを要求するslaveへのアクセスで，masterは同じbyteまたはbytesを要求するような特徴を持つAvalon-MMブリッヂ．</td></tr>
	<tr class="odd"><td>associatedClock</td><td>-</td><td>-</td><td>このslave I/Fが同期化するクロックインタフェース名．</td></tr>
</tbody></table>
<br>
<br>
</div>

<div class="section">
<h3><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/ALTERADOC/MAVA/AVA_MM_ORVERVIEW#k117p2" name="k117p2"><span class="sanchor">■</span></a>注意事項</h3>
<p>英語力の弱い人が適当に訳して抜粋，補強しています．<br>あやしいな，と思ったらご指摘いただけますと幸いです．<br>なお，オリジナルの英文を参照されることを強く推奨いたします．</p>

</div>

<hr>
<h4><a href="/adiary/adiary.cgi/HDL/ALTERADOC/MAVA/AVA_MM_ORVERVIEW#c">■コメント（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
<h4><a href="/adiary/adiary.cgi/HDL/ALTERADOC/MAVA/AVA_MM_ORVERVIEW#tb">■トラックバック（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
]]></description>
	</item>
	<item>
		<title>[FPGA][ModelSIM] シミュレーションとライセンス</title>
		<link>http://www.ujiya-denshi.com/adiary/adiary.cgi/0116#tm1229314118</link>
		<guid>http://www.ujiya-denshi.com/adiary/adiary.cgi/0116</guid>
		<category>FPGA::QuartusII</category>
		<pubDate>Thu, 11 Dec 2008 04:13:30 GMT</pubDate>
		<author>ぉゅぅ</author>
		<description><![CDATA[<div class="section">
<h3><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/0116#k116p1" name="k116p1"><span class="sanchor">■</span></a><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/&amp;search?all=2&amp;word=%5bSOPC%5d" class="sectioncategory" title="見出し検索 ">[SOPC]</a> Model-Simによるシミュレーション</h3><h4><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/0116#k116p1.1" name="k116p1.1"><span class="sanchor">▲</span></a>設定～ModelSimのライセンス</h4>
<p>最初のインストールでQuartusIIしか入れていなかったため，ModelSim AlteraEditionを入れる．ライセンスが無いといわれたので，その追加方法についてメモを残しておく．</p>
<br>
<p>SOPC Builderにて，[System Generation]タブのOptionグループの"Simulation. Create project simulator files."をcheckする．<br></p>
<ol>
	<li>"Run Simulator"を押下するとModelSimが起動する模様．</li>
</ol>
<p>（ModelSimのインストール，ライセンスの取得は必須である．）</p>
<p>QuartusIIの，メニュー"Tool"→ "License Setup.." → "WebLicense Update"ボタンを押下すると，ALTERAのサイトに接続しにいきます．ALTERA WEB SITEのアカウントを取得しておき，LOGINします．<br>ユーザ情報を確認した後に，"ModelSim WEB edition"のライセンスも必要か問うているチェックボックスがあるので，忘れずにチェックを入れておきます．ライセンスファイルはメールで送られてきますので，コレを任意のフォルダに保存して，LM license managerがそれを参照するように設定します．<br>ユーザによっては，すでにxilinxやLM license managerを使用する製品を利用されているかもしれません．</p>
<p>マイコンピュータ→（右クリック）→ property → "詳細徹底"タブ → "環境変数"ボタン → ユーザの環境変数またはシステム環境変数<br>ここを参照して，下記の変数の値を修正します．存在しなければ新規に作成します．<br>QuartusIIに限れば，Option Dialogにて，"Use LM_LICENSE_FILE"の指定ができるチェックボックスが存在します．<br>ModelSimにはソレが無いため，環境変数の設定が必須となります．<br>ライセンスファイルが存在しない場合は，ここで記すような解決策の定時をダイアログで受けることになるでしょう．</p>
<br>
<p>環境変数</p>
<pre>
MGLS_LICENSE_FILE
LM_LICENSE_FILE
</pre>
<p>複数のファイルや，ライセンスサーバ（&lt;port-number&gt;@&lt;server-name&gt;）を参照する場合は，セミコロン';'で区切ります．</p>
<p>設定が正しくできているかどうかは，スタートメニューからたどって，"ModelSim-Altera 6.3g_p1 (Quartus II 8.1)"を実行します．<br>コマンド待ち受け画面（"transcript"）が出てくるので，ここで"lmutil lmdiag"と入力します．出力例を以下に示します．（IPやNETBIOS名を'x'で塗り替えています）</p>
<pre>
&gt;lmutil lmdiag

# 
# This license can be checked out
# -----------------------------------------------------
# 
# Enter &lt;CR&gt; to continue: "adwu" v1.31, vendor: armlmd
#   License server: xxxxxxxx
#   floating license no expiration date
# 
#   Requests from the same USER/HOST/DISPLAY do not consume a new license
# 
# This license can be checked out
# -----------------------------------------------------
# -----------------------------------------------------
# License file: 8224@xxxxxxxx
# -----------------------------------------------------
# -----------------------------------------------------
# License file: C:\altera\xxxxxxxxxxxx__0-xxxx3015308023.dat
# -----------------------------------------------------
# "quartus_lite" v2009.05, vendor: alterad
#   uncounted nodelocked license, locked to ethernet address "xxxxxxxxxxxx"  expires: 15-may-2009
# 
# This is the correct node for this node-locked license
# -----------------------------------------------------
# 
# Enter &lt;CR&gt; to continue: "alteramtiwe" v2009.05, vendor: mgcld
#   uncounted nodelocked license, locked to ethernet address "xxxxxxxxxxxx"  starts: 9-dec-2008,   expires: 15-may-2009
# 
# This is the correct node for this node-locked license
# -----------------------------------------------------
# -----------------------------------------------------
# License file: C:\altera\xxxxxxxxxxxx__0-xxxx42759966265.dat
# -----------------------------------------------------
# "quartus_lite" v2008.12, vendor: alterad
#   uncounted nodelocked license, locked to ethernet address "xxxxxxxxxxxx"  expires: 15-dec-2008
# 
# This is the correct node for this node-locked license
# -----------------------------------------------------
</pre>
<p>この例では，旧ファイルも残っているようで，複数のライセンスが見て取れます．<br>一部ライセンスサーバからも取得してきており，ADSのライセンスも見受けられます．（各種ツールの名称が並びますが，個々では無関係なので省略しました．）<br>ModelSimのライセンスは，"<strong>alteramtiwe</strong>"であると考えられます．QuartusIIは"<strong>quartus_lite</strong>"でしょう．これらの文字列が見えない，または，"License file: "で，取得したライセンスファイル名がない場合は，どこかの設定が誤っているか，設定終了後にアプリを起動していないのかもしれません．</p>
<br>
<br>
</div>

<div class="section">
<h3><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/0116#k116p2" name="k116p2"><span class="sanchor">■</span></a><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/&amp;search?all=2&amp;word=%5bSOPC%5d" class="sectioncategory" title="見出し検索 ">[SOPC]</a><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/&amp;search?all=2&amp;word=%5bModelSim%5d" class="sectioncategory" title="見出し検索 ">[ModelSim]</a> 不定値伝播</h3><p>気持ちよくシミュレーションを実行すると，不定値が伝播しており，testbenchモジュールで <strong>$stop</strong>コマンドが発令された．cpu coreのあたりで，ddr_sdramからの信号のようだ．タイミングはreset_nがネゲートされたあたりで，PLL unlock状態なのが問題のように思える．</p>
<p>現状は，system clockとddrclockの２系統があり，これらの安定化を待つようなシステムになっているのかは不明である．少なくともシミュレーションで不定値が伝播してきているので，下記のいずれかの問題が生じていると考えられる．</p>
<ul>
	<li>自動生成されるテストベンチが不正</li>
	<li>PLL lock状態までシステムをとめるような仕組みが存在しない<br>これはこれで問題な気がする．どこかのサンプルでPLLをSOPCからはずしていた理由はコレか...</li>
	<li>シミュレーション実行において手順が抜け落ちている？<br>ALTERAセミナ資料どおりにやってるはず...</li>
</ul>
<p>実機＋JTAGがぶら下がっている状態では動いているので，PLL安定後は正常動作する模様です．<br>初期起動時の不安定性がシミュレーションにより予見されたということでしょうかね．</p>
<p>妄想レベルでの対策は，すべてのPLL出力が安定（lock信号がアサートされるまで）は，NiosIIシステム全体をリセット状態にしておくことですね．SOPC builderにより生成されたモジュールへのリセット信号が，本当の全域リセットと，PLLブロックへ入っている?リセットと区別されていることが条件になりますねぇ．もしくはPLLブロックをSOPC Builderから離して生成するか．そうなるとdynamicなclock制御ができなくなるか．<br>そんなことするのは当面先のことになるし，clock domain境界の処理をどうすべきかを検討する必要がありますが．クロック・モジュールリセットの集中管理が必須となってくるでしょうねぇ．そんなことできるかな...</p>

</div>

<hr>
<h4><a href="/adiary/adiary.cgi/0116#c">■コメント（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
<h4><a href="/adiary/adiary.cgi/0116#tb">■トラックバック（1件）</a></h4>
<div style="margin-left: 1em;">
<a href="https://www.ujiya-denshi.com/adiary/adiary.cgi/0121" rel="nofollow">[SOPC] システムリセットについて</a> （とんずら雑記R） by ぉゅぅ<br>
</div>
]]></description>
	</item>
	<item>
		<title> LRM読解(Chap.11)</title>
		<link>http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/Verilog/LRM01101#tm1228896078</link>
		<guid>http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/Verilog/LRM01101</guid>
		<category>Verilog::文法</category>
		<pubDate>Wed, 10 Dec 2008 08:01:18 GMT</pubDate>
		<author>ぉゅぅ</author>
		<description><![CDATA[<div class="section">
<h3><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/HDL/Verilog/LRM01101#k115p1" name="k115p1"><span class="sanchor">■</span></a>11. 名前つきblockとtaskの無効化 ～ Disabling of named blocks and tasks</h3>
<p>'disable'文は，Verilog HDLの手続き上の記述の構造化された本質を維持している間，併発してアクティブな手続きの実行(activity)を終了することに関する能力を与えます．</p>
<p>disable文は，taskの命令を全て実行する前に終了させることや，loop文からのbreakすることや，loop文のほかの反復とともに連続するため命令をスキップすること，のメカニズムを与えます．ハードウェア割込みやglobal resetのような例外状態をハンドリングするのに有用です．</p>
<pre>
disable_statement ::= (From Annex A - A.6.5)
    disable hierarchical_task_identifier ;
  | disable hierarchical_block_identifier ;
</pre>
<p>それぞれの様式のdisable文は，taskまたは名前付けされたブロックを終了します．処理は，blockに続く命令から，または，後のtask enabling文により再開します．また，名前つきblock内や，task内で有効になった，全ての活動(activities)は，終えられるものとします．</p>
<p>task enable文がネストしていて（1つのtaskがほかのtaskをenableにするような場合），一方が他方をまだenbaleにしていないならば，連鎖の中でtaskをdisableにすることは，下位の連鎖全てのtaskをdisableにすることである．</p>
<pre>
If task enable statements are nested that is, one task enables another,
 and that one enables yet another
  then disabling a task within the chain
   shall disable all tasks downward on the chain.
</pre>
<p>taskが1回以上enableにされるならば，そのようなtaskを無効にすることは，そのtaskの全ての起動が無効にされるものとします．（disableのqueingされたものが全て消える，という意味かしら??）</p>
<pre>
If a task is enabled more than once, then disabling such a task shall disable all activations of the task.
</pre>
<p>taskがdisableにされるなら，taskによって開始されるかもしれない以下の活動（activities）の結果は定義されません:</p>
<ul>
	<li> output引数とinout引数の結果</li>
	<li> スケジューリングされたけれども実行されていないノンブロッキング代入</li>
	<li> 手続き型連続代入（assign文とforce文）</li>
</ul>
<p>disbale文は，disable文に含まれる，特殊なblockやtaskをdisableするのに，blockとtask内で使えます．disbale文は，function内の名前つきblockをdisableにすることができます．function内のdisable文があるところでは，blockかtaskをdisableにします．この挙動は未定義です．</p>
<p>automatic task中に，automatic taskまたはblockを無効化することは，タスクのすべての同時発生の実行のための通常のタスクのように続きます．（意味わからん）</p>
<pre>
Disabling an automatic task or a block inside an automatic task 
It proceeds as for regular tasks for all concurrent executions of the task.
</pre>
<p><strong>例1)</strong> 本例は，blockが自身をdisableする方法を示します．<br></p>
<pre>
begin : block_name
  rega = regb;
  disable block_name;
  regc = rega; // この代入は実行されることはない．
end
</pre>
<br>
<p><strong>例2)</strong> 本例は，disable文を，名前つきblockで，前方goto文と似たように使うことを示します(意訳)．disable文の後の，次の命令文は，名前つきblockに続くものとなります．<br></p>
<pre>
begin : block_name
  ...
  ...
  if (a == 0)
    disable block_name;
  ...
end // 名前つきblockの終端
// 名前つきblockの後のコードから継続実行する
  ...
</pre>
<br>
<p><strong>例3)</strong> この例は，taskからの早期returnのように使うdisable文を示します．しかし，diable文を使ってtask自身をdisableにすることは，プログラミング言語で見つけるようなreturn文のための速記（short-hand）ではありません．</p>
<pre>
task proc_a;
begin
  ...
  ...
  if (a == 0)
    disable proc_a; // trueであれば返る．
  ...
  ...
end
endtask
</pre>
<br>
<p><strong>例4)</strong> この例は，C言語のcontinue/break文の2つと同じように使うdisable文を示します．例は，名前つきblockが，ループカウンタがnに達するまで繰り返すか，変数aがbの値にセットされるまで実行される，制御コードを示します．名前つきブロック"break"は，a==bになるまで実行するようなコードを含んでいます．このポイントでは，"disable break;"文が，blockの実行を終了します．名前つきブロック"continue"は，for loopのそれぞれの繰り返しを実行するコードを含んでいます．毎回，このコードは"disable continue;"命令をh実行し，"continue"blockを終了します．そして，次のfor loopの反復処理へ移ります．</p>
<p>"continue"blockの反復制御には，命令文セットは，a!=0であれば実行する．他の命令セットは，a!=bであれば実行する．（訳注：要はこの文だけ．）</p>
<pre>
begin : break
  for (i = 0; i &lt; n; i = i+1) begin : continue
    @clk
      if (a == 0) // "continue" loop
        disable continue;
      &lt;statements&gt;
      &lt;statements&gt;
    @clk
      if (a == b) // "break" from loop
        disable break;
      &lt;statements&gt;
      &lt;statements&gt;
  end
end
</pre>
<br>
<p><strong>例5)</strong> この例は，resetイベントが起きたときの，タイミング制御とtask"action"を同時実行を無効にするdisable文を示します．？ being used to disable concurrently a sequence of timing controls and the task action,  when the reset event occurs.</p>
<p>例は，"event_expr"と名づけられたシーケンシャルブロックと，イベント"reset"の発生を待つdisable文とから成るfork/join blockを示します．シーケンシャルブロックと，reset待ちとは，並行して実行します．"event_expr"ブロックは，イベント"ev1"とイベント"trig"の三回の発生を待ちます．これら４つのイベントが生じて，さらに'd'時間単位経過したときに，task"action"が実行します．イベント"reset"がおきたとき，シーケンシャルブロック内のイベントにかかわらず，<strong>task"action"を含めて</strong>，fork/joinブロックは終了します．</p>
<pre>
fork
  begin : event_expr
    @ev1;
    repeat (3) @trig;
    #d action (areg, breg);
  end
  @reset disable event_expr;
join
</pre>
<br>
<p><strong>例6)</strong> 次の例は，再トリガ可能な単安定のビヘイビア記述の例です．名前がつけられた"retrig"イベントは，単安定時間周期で再開します．"retrig"が，250時間単位以内で起こり続けていると，Qは1となります．</p>
<pre>
always begin : monostable
  #250 q = 0;
end

always @retrig begin
  disable monostable;
  q = 1;
end
</pre>
<br>
<br>
<p>（個人的まとめ）<br>diable/continue文は，シミュレーションモデルで使うと効果的かもしれない．ハードウェア記述で使うのはナンセンスだろう．（合成できるかどうかも怪しいか．  パラメータを使ってコンパイル時にのみインスタンスを複数生成することなんかには使えそう．）</p>

</div>

<hr>
<h4><a href="/adiary/adiary.cgi/HDL/Verilog/LRM01101#c">■コメント（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
<h4><a href="/adiary/adiary.cgi/HDL/Verilog/LRM01101#tb">■トラックバック（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
]]></description>
	</item>
	<item>
		<title> 2008-12-04</title>
		<link>http://www.ujiya-denshi.com/adiary/adiary.cgi/0114#tm1229306553</link>
		<guid>http://www.ujiya-denshi.com/adiary/adiary.cgi/0114</guid>
		<category>雑談</category>
		<pubDate>Thu, 04 Dec 2008 15:41:33 GMT</pubDate>
		<author>ぉゅぅ</author>
		<description><![CDATA[<div class="section">
<h3><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/0114#k114p1" name="k114p1"><span class="sanchor">■</span></a>日記なのか？</h3>
<p>日記更新の頻度が落ちておりますが，wikiコンテンツは伸ばしております．ALTERAのNiosIIをいじろうとして，思った以上にいろんなところでハマってしまい，これは時間が作れないとつらいんじゃないか，ということで，なんとなく訳した資料を残しておきます．<br>まぁ，成果物としてのまとめも兼ねていますけれど(ぉ</p>
<br>
</div>

<div class="section">
<h3><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/0114#k114p2" name="k114p2"><span class="sanchor">■</span></a>ALTERA/NiosIIコンテンツ</h3>
<p>FPGAをまともに使うのも初めてであり，ALTERAデバイス自体も初めてだったりします．</p>
<p>CycloneIII評価キット（EEK）を使っていこうとしましたが，付録のプロジェクトはQuartus v7.2のものでした．<br>v8.1が新しいもので，これに乗せ変えようと考えました．特に自分で基板を起こす場合など，QuartusIIのプロジェクトを起こすのがつらいと判断したためです．</p>
<p>まぁ，案の定ハマってしまってえらいことになってますが…('A`</p>
<p>こんな感じでグダグダですが，NiosIIいじくっている間はコンテンツが伸びていきます．まとめページとか作る気力がないので，adiaryのwiki機能を使うことにしています．コンテンツ階層がうまくないかもしれません．これも修正したいけれど放置になる予感．</p>
<br>
</div>

<div class="section">
<h3><a href="http://www.ujiya-denshi.com/adiary/adiary.cgi/0114#k114p3" name="k114p3"><span class="sanchor">■</span></a>adiaryテーマ変更</h3>
<p>C74 special editionはアレゲで好きだったんですが，表や長ったらしい文章が多いので，少しでも横長に見せられるものに変更しました．サイドバーが延びすぎている感もありますが，ちょっと調整する気力が…．</p>

</div>

<hr>
<h4><a href="/adiary/adiary.cgi/0114#c">■コメント（2件）</a></h4>
<div style="margin-left: 1em;">
nabe『もうひとつ日記帳を開設して（管理メニューから）、特定の資料やジャンルを別の日記帳に分けるという手もありますよ。「システム管理」→...』(2008/12/13 27:39)</span><br>
ぉゅぅ『御助言ありがとうございます！ 大きくなりそうなコンテンツは，日記帳を分けたほうが見やすくなりそうですね．ローカルで試行錯誤してか...』(2008/12/15 11:02)</span><br>
</div>
<h4><a href="/adiary/adiary.cgi/0114#tb">■トラックバック（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
]]></description>
	</item>
</channel>
</rss>
