<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns="http://purl.org/rss/1.0/"
 xmlns:content="http://purl.org/rss/1.0/modules/content/"
 xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/"
 xmlns:dc="http://purl.org/dc/elements/1.1/"
 xmlns:syn="http://purl.org/rss/1.0/modules/syndication/"
 xmlns:admin="http://webns.net/mvcb/"
>
<channel rdf:about="http://blog.livedoor.jp/hardyboy/">
<title>まごころせいじつ堂 - Verilog</title>
<link>http://blog.livedoor.jp/hardyboy/</link>
<description>浜町庄金　研究開発
　マイコンで遊んでばっかりで

</description>
<dc:language>ja</dc:language>
<admin:generatorAgent rdf:resource="http://blog.livedoor.com/?v=2.0" />
<items>
 <rdf:Seq>
  <rdf:li rdf:resource="http://blog.livedoor.jp/hardyboy/archives/6502144.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/hardyboy/archives/6496440.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/hardyboy/archives/6491829.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/hardyboy/archives/6325824.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/hardyboy/archives/6318209.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/hardyboy/archives/6316283.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/hardyboy/archives/6314365.html" />
 </rdf:Seq>
</items>
</channel>

<item rdf:about="http://blog.livedoor.jp/hardyboy/archives/6502144.html">
<title>バレルシフタ　２段にして改善(お詫び　大きな間違いあり)</title>
<link>http://blog.livedoor.jp/hardyboy/archives/6502144.html</link>
<description>追記：@ikwzmさんから。https://gist.github.com/ikwzm/5558633　バイト単位でシフトすべきところを4bit単位でやってました。あああご指摘ありがとうございました。※前段の 8byteシフト間違ってる気がしてきた。多分3bit分を&lt;&lt;5した時点ですべて'0'になってしまってるはず(1...</description>
<dc:creator>hardyboy</dc:creator>
<dc:date>2013-05-09T02:06:18+09:00</dc:date>
<dc:subject>Verilog</dc:subject>
<content:encoded><![CDATA[追記：@ikwzmさんから。<a target="_blank" href="https://gist.github.com/ikwzm/5558633">https://gist.github.com/ikwzm/5558633</a>　<br />バイト単位でシフトすべきところを4bit単位でやってました。あああ<br />ご指摘ありがとうございました。<br /><br />※前段の 8byteシフト間違ってる気がしてきた。多分3bit分を&lt;&lt;5した時点ですべて'0'になってしまってるはず<br /><br />(1)組み合わせ回路のシフトについて、下xx bitを削っていくような間違いをしていました。書きなおしたのは以下。<br /><a href="https://gist.github.com/houmei/5555418" target="_blank">https://gist.github.com/houmei/5555418</a><br /><br />(2)＜＜演算子を使ったbyte shiftは、いったん幅[6:0]の下位3bitを'000'とし、上位にシフト量を入れることで書き直しました。<br /><div>比較結果：<br />349LE/214.92MHz (Megafunction)</div><div>343LE/214.55MHz (シフト演算子)</div><div>291LE/335.46MHz (組み合わせ回路)</div><div>ただし、組み合わせ回路によるものは(1)の間違いあり。<br /><br />反省：見積もりに検証していない回路を軽い気持ちで使うと大失敗<br /><br />以下は間違いありです。</div><br /><br />　扱うbit幅が大きくなるとLE数は増え動作周波数は落ちていくバレルシフタ。ここでシフト量を制限したらどうなるか傾向を見てみた。例えば1bitシフトする/しないだけなら大幅にセレクタ数が減るはず。<br />以下の様なコードでシフト量を1,2,4,8...と変えながら試してみる。上位モジュールからは<br />sll64_partial #6 SLL(source,value,sftout); // partial shift<br />の様に呼び出す。<br />
<code><pre>module sll64_partial (indata,val,outdata);
	parameter width=6; //[6:0]
	input [63:0] indata;
	input [width:0] val;
	output [63:0] outdata;
	assign outdata=indata&lt;&lt;val;
endmodule
</pre></code>結果は以下のとおり。<br />&nbsp;64bitを部分シフト<div>[0:0] 129LE/615.38MHz</div><div>[1:0] 136LE/413.56MHz</div><div>[2:0] 143LE/357.65MHz</div><div>[3:0] 210LE/270.71MHz</div><div>[4:0] 285LE/250.38MHz</div><div>[5:0] 384LE/223.31MHz</div><div>[6:0] 390LE/220.17MHz</div><div><br />では、最初にバイト単位でシフトして次にビット単位で8つまでシフトするようにしてみる。<br />シフト量のnnnnxxxのうち、nnnnはバイトでのシフト量、xxxはビットのシフト量とする。nnnnについてはシフトする量がデータ幅をあふれたらall0とする。<br /><br /><br /><strike>ソースはこちら：<a href="https://gist.github.com/houmei/5541783" target="_blank">https://gist.github.com/houmei/5541783</a></strike>&nbsp;<br /><br /><strike>コンパイル結果は207LE/284.41MHzとなった。組み合わせ回路でべたに書いた283LE/105.06MHzよりよい。</strike><br /><br />※以下も怪しい<br />　もし、もっと追求するとしたらbit幅の組み合わせを変える(4-3を3-4)、段数を増やす(2-2-3)、一部組み合わせ回路にしてみる、など。やりだすときりがなくなるけど構造的な改善である程度の性能が出たらしばらく放置して他に着手したほうがいいかも。<br /><br />　あと、QuartusIIにはMagawizard Plugin Managerというのがあって、用途に合わせたライブラリが使える。今回の用途にはGates→LPMCLSHIFTというのが使えた。verilogやVHDLのインターフェース部分がソースとして出力されるのでこれを呼び出して使用する。</div>]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/hardyboy/archives/6496440.html">
<title>QuartusII 12.1 バレルシフタの記述比較</title>
<link>http://blog.livedoor.jp/hardyboy/archives/6496440.html</link>
<description>　前回、メモ：QuartusII 12.1 バレルシフタの記述とTimeQuestによる速度評価の続き。　バレルシフタの入力、出力を64bitとすると、シフト量は0～64になる。つまりシフト量の指定に6bit＋1必要。これらをfunction文による自前の組み合わせ回路と＜＜演算子による記述で比較し...</description>
<dc:creator>hardyboy</dc:creator>
<dc:date>2013-05-06T08:08:31+09:00</dc:date>
<dc:subject>Verilog</dc:subject>
<content:encoded><![CDATA[　前回、<a style="font-family: 'Hiragino Kaku Gothic Pro', 'ヒラギノ角ゴ Pro W3', 'ＭＳ Ｐゴシック', sans-serif; font-size: 18px; word-break: break-all; color: rgb(51, 51, 51); text-decoration: none;" rel="bookmark" href="http://blog.livedoor.jp/hardyboy/archives/6491829.html">メモ：QuartusII 12.1 バレルシフタの記述とTimeQuestによる速度評価</a>の続き。<br /><br />　バレルシフタの入力、出力を64bitとすると、シフト量は0～64になる。つまりシフト量の指定に6bit＋1必要。これらをfunction文による自前の組み合わせ回路と＜＜演算子による記述で比較してみた。<br /><br />ソースはこちら：<a target="_blank" href="https://gist.github.com/houmei/5522404">https://gist.github.com/houmei/5522404</a>&nbsp;<br /><br />　function文によるRTLはこのようになる。(8bit幅)<br /><a target="_blank" title="sll8_15LE3" href="http://livedoor.blogimg.jp/hardyboy/imgs/a/6/a6b6ad36.png"><img align="left" class="pict" hspace="5" alt="sll8_15LE3" border="0" height="310" width="480" src="http://livedoor.blogimg.jp/hardyboy/imgs/a/6/a6b6ad36-s.png"></a>&nbsp;
<br clear="all">
　コンパイル結果は以下。27LEで3段。<br /><a target="_blank" title="62MHz" href="http://livedoor.blogimg.jp/hardyboy/imgs/4/3/43164038.png"><img align="left" class="pict" hspace="5" alt="62MHz" border="0" height="310" width="480" src="http://livedoor.blogimg.jp/hardyboy/imgs/4/3/43164038-s.png"></a><br clear="all"><br />
<br />　＜＜演算子によるRTLはこんな表示。<br />
<a href="http://livedoor.blogimg.jp/hardyboy/imgs/9/c/9c4aa7d1.png" title="sll8shiftop" target="_blank"><img src="http://livedoor.blogimg.jp/hardyboy/imgs/9/c/9c4aa7d1-s.png" width="480" height="310" border="0" alt="sll8shiftop" hspace="5" class="pict" align="left"></a>
<br clear="all">
<br />

　コンパイル結果。32LE4段。<br clear="all">
<a href="http://livedoor.blogimg.jp/hardyboy/imgs/8/9/89bf215d.png" title="33MHz" target="_blank"><img src="http://livedoor.blogimg.jp/hardyboy/imgs/8/9/89bf215d-s.png" width="480" height="310" border="0" alt="33MHz" hspace="5" class="pict" align="left"></a><br />

<br clear="all">
<br />　このような感じで4～64bitまでの組み合わせ回路によるバレルシフタと演算子によるバレルシフタについて、LE数と動作周波数で比較した。<br />&nbsp;
<a target="_blank" title="barrel" href="http://livedoor.blogimg.jp/hardyboy/imgs/8/e/8e065200.png"><img align="left" class="pict" hspace="5" alt="barrel" border="0" height="685" width="480" src="http://livedoor.blogimg.jp/hardyboy/imgs/8/e/8e065200-s.png"></a><br clear="all"><br />　横軸は4,8,16,24,32,48,64が等間隔に並んでいるのに注意。組み合わせ回路はLE数が少なくて済むが、8～16bitのあたりで速度が逆転する。これを配置配線後の回路でみると、こうなっている。<br /><br />組み合わせ回路によるもの：<br /><a target="_blank" title="06MHz" href="http://livedoor.blogimg.jp/hardyboy/imgs/e/2/e2b4d601.png"><img align="left" class="pict" hspace="5" alt="06MHz" border="0" height="310" width="480" src="http://livedoor.blogimg.jp/hardyboy/imgs/e/2/e2b4d601-s.png"></a><br clear="all"><br />＜＜演算子によるもの：<br />


<a target="_blank" title="05MHz" href="http://livedoor.blogimg.jp/hardyboy/imgs/8/1/816fb583.png"><img align="left" class="pict" hspace="5" alt="05MHz" border="0" height="310" width="480" src="http://livedoor.blogimg.jp/hardyboy/imgs/8/1/816fb583-s.png"></a><br clear="all">　＜＜演算子でコンパイラに任せたほうが、LEがまんべんなく散らばっているようにみえる。LE自体のディレイよりも配線のディレイが大きいように思える。<br />16bitくらいの大きさまでなら組み合わせ回路で手書きしたほうがいいが、回路をケチる必要がなければコンパイラに任せたほうがいい。<br /><br /><br />　＜＜の演算子で書くならparameter文で指示したら良さそうと思うでしょう？実験した。上位モジュールからは<br />&nbsp;sllp #(63) SLL(source,value,sftout);<br />の様に書いてparameter文を使ったsllp.vを呼び出すようにコンパイルしてみる。すると、24bitで以下の様な結果となった。&nbsp;<br />24bitでの＜＜演算子 / parameter文によるもの<br />128LE,295.33MHz / 133LE,280.74MHz<br /><br />　bit幅によってはまったく同じではないことがあり得る。なんでわざわざこれを試したかというと、20年くらい前に論理合成ツールを使った時に怪しい挙動を経験したため。なので、ギチギチに詰める必要がある場合はいろいろ疑ってみたほうがいいかもしれない。<br /><br />追記：@ikwzmさんにfor文を使った書き方を教えてもらいました。<a target="_blank" href="https://gist.github.com/ikwzm/5523178">https://gist.github.com/ikwzm/5523178</a>　<span style="color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Arial, 'Hiragino Kaku Gothic Pro', Meiryo, 'MS PGothic', sans-serif; font-size: 14px; line-height: 18px; white-space: pre-wrap; background-color: rgb(245, 245, 245);">398LE/199.76MHz<br /></span>ちょっと8byteシフト＆8bitシフトの組み合わせで64biシフタを構成したら<span style="color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Arial, 'Hiragino Kaku Gothic Pro', Meiryo, 'MS PGothic', sans-serif; font-size: 14px; line-height: 18px; white-space: pre-wrap; background-color: rgb(245, 245, 245);">210LE/310.95MHz</span><br /><br />]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/hardyboy/archives/6491829.html">
<title>メモ：QuartusII 12.1 バレルシフタの記述とTimeQuestによる速度評価</title>
<link>http://blog.livedoor.jp/hardyboy/archives/6491829.html</link>
<description>　ALTERAのFPGA開発環境 QuartusII 12.1、Verilog HDLでバレルシフタを記述し、組み合わせ回路の動作速度をQuartusIIの機能であるTimeQuestで計ってみた。ターゲットはCycloneIII EP3C16F484C6(Terasic DE0)。I/Oのアサインはせずコンパイルのみ。　バレルシフタは組み合わ...</description>
<dc:creator>hardyboy</dc:creator>
<dc:date>2013-05-04T01:31:40+09:00</dc:date>
<dc:subject>Verilog</dc:subject>
<content:encoded><![CDATA[　ALTERAのFPGA開発環境 QuartusII 12.1、Verilog HDLで<a target="_blank" href="http://ja.wikipedia.org/wiki/%E3%83%90%E3%83%AC%E3%83%AB%E3%82%B7%E3%83%95%E3%82%BF">バレルシフタ</a>を記述し、組み合わせ回路の動作速度をQuartusIIの機能であるTimeQuestで計ってみた。ターゲットはCycloneIII&nbsp;EP3C16F484C6(Terasic DE0)。I/Oのアサインはせずコンパイルのみ。<br /><br />　バレルシフタは組み合わせ回路なので、最初はI/Oから入出力をとってそのまま接続していた。しかしこれではTimeQuestで評価されない。前後をFFではさむとfmaxが計算された。<br />&nbsp;<br /><a target="_blank" title="sll64_rtl" href="http://livedoor.blogimg.jp/hardyboy/imgs/8/3/832a1ff6.png"><img align="center" class="pict" hspace="5" alt="sll64_rtl" border="0" height="310" width="480" src="http://livedoor.blogimg.jp/hardyboy/imgs/8/3/832a1ff6-s.png"><br /></a><br />　これに気づいたのは<a href="http://monoist.atmarkit.co.jp/mn/articles/0903/13/news119.html" target="_blank">TimeQuestによるタイミング解析を学ぶ (1/3)</a>&nbsp;、<a target="_blank" href="http://monoist.atmarkit.co.jp/mn/articles/0711/30/news150.html">FPGAの動作スピードを改善するポイントとは？ (1/2)</a>を読んでから。ディレイ計算はゲートの出力側から入力側に向けて積算して求めるものと思っていた。<br /><br />ソースはこちら：<a target="_blank" href="https://gist.github.com/houmei/5510474">https://gist.github.com/houmei/5510474</a>　

<br /><br />　コンパイル後、[Tools]→[Netlist Viewers]以下のツールで回路を見ることができる。<br />→[RTL Viewer]でRTLの、→[Technology Map Viewer(Post-Fitting)]で配置配線後の回路を表示する。<br /><br />[RTL Viewer]<br /><a href="http://livedoor.blogimg.jp/hardyboy/imgs/6/e/6e7834c7.png" title="sll4_rtl" target="_blank"><img src="http://livedoor.blogimg.jp/hardyboy/imgs/6/e/6e7834c7-s.png" width="480" height="310" border="0" alt="sll4_rtl" hspace="5" class="pict" align="left"></a>&nbsp;
<br clear="all">
<br />
[Technology Map Viewer(Post-Fitting)]<br /><a href="http://livedoor.blogimg.jp/hardyboy/imgs/6/2/6242cdce.png" title="76MHz" target="_blank"><img src="http://livedoor.blogimg.jp/hardyboy/imgs/6/2/6242cdce-s.png" width="480" height="310" border="0" alt="76MHz" hspace="5" class="pict" align="left"></a><br clear="all">
<br />
　Compilation ReportのTimeQuest Timing Analyzerの項目に最大動作周波数が載っている。ここのSlow 1200mV 85C Modelを開く(電圧が低く、温度が高い方が厳しい条件となる)。
ここのFmax Summaryを見ると712.76MHzとあり、これが最大動作周波数。]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/hardyboy/archives/6325824.html">
<title>CADR 回路図 SPC MEMORY AND POINTER</title>
<link>http://blog.livedoor.jp/hardyboy/archives/6325824.html</link>
<description>CADRマシンの回路図を見ていきます。簡単そうな所から。http://www.unlambda.com/download/cadr/CADR4_schematic.pdf49ページは18bit+パリティ、32個のメモリでスタック(SPC)を構成。-WCLKに同期。SPC POINTERは同期式アップダウンカウンタ 74S159を2個。CLK4Fに同期。SPC PO...</description>
<dc:creator>hardyboy</dc:creator>
<dc:date>2013-02-26T17:59:23+09:00</dc:date>
<dc:subject>Verilog</dc:subject>
<content:encoded><![CDATA[CADRマシンの回路図を見ていきます。簡単そうな所から。<br /><a target="_blank" href="http://www.unlambda.com/download/cadr/CADR4_schematic.pdf">http://www.unlambda.com/download/cadr/CADR4_schematic.pdf<br /></a><br />49ページは18bit+パリティ、32個のメモリでスタック(SPC)を構成。-WCLKに同期。<br />SPC POINTERは同期式アップダウンカウンタ 74S159を2個。CLK4Fに同期。<br />SPC POINTERはパワーオンでは不定だが、ポインタの出力SPCPTR4〜SPCPTR0は読めるのでソフトで初期化しろということだろう。スタックのオーバーフロー/アンダーフローはチェックしないので、ソフトの責任で使用しろと書いてある。<br /><br />　ところで、TTLのみで96ページもある回路図を読むのはなかなかつらいので、信号の生成元とそれを使っている箇所についてのクロスリファレンスが必要かな。気合が足らんと言われそうだが。<br /><br /><a target="_blank" title="cadr" href="http://livedoor.blogimg.jp/hardyboy/imgs/b/8/b818d284.jpg"><img align="left" class="pict" hspace="5" alt="cadr" border="0" height="640" width="480" src="http://livedoor.blogimg.jp/hardyboy/imgs/b/8/b818d284-s.jpg"></a>&nbsp;<br />&nbsp;&nbsp;]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/hardyboy/archives/6318209.html">
<title>CADRソース調査　メモリについて</title>
<link>http://blog.livedoor.jp/hardyboy/archives/6318209.html</link>
<description>CADRマシンの回路図をたよりに中で使われているメモリについて調べた。Retrocomputing - MIT CADR Lisp Machines@natsutanさんのブロック図を参照してください。制御パス データパス以下はPROMだけど組み合わせ回路で実現：part_32x32prom_maskright i_MSKR A[4:0] D[31:0]...</description>
<dc:creator>hardyboy</dc:creator>
<dc:date>2013-02-22T23:45:59+09:00</dc:date>
<dc:subject>Verilog</dc:subject>
<content:encoded><![CDATA[CADRマシンの回路図をたよりに中で使われているメモリについて調べた。<br /><a href="http://www.unlambda.com/cadr/" target="_blank">Retrocomputing - MIT CADR Lisp Machines</a><br /><br />@natsutanさんのブロック図を参照してください。<br /><a href="http://f.hatena.ne.jp/natsutan/20100824233749" target="_blank">制御パス</a>&nbsp;<br /><a href="http://f.hatena.ne.jp/natsutan/20100804221043" target="_blank">データパス<br /></a><br />以下はPROMだけど組み合わせ回路で実現：<br />part_32x32prom_maskright i_MSKR A[4:0] D[31:0]&nbsp;<br />part_32x32prom_maskleft i_MSKL A[4:0] D[31:0]<br />part_32x8prom i_DMASK A[4:0] D[7:0]<br />part_512x49prom i_PROM0 A[8:0] D[48:0]&nbsp;<br /><br />このうち512ワードのi_PROM0はデータbit46が欠けている。元々のPROMには[48:47,45:0]の48bitが割り付けられている。74S472×12個。<br /><br />以下はRAM、caddr.vでのソースではメモリ上のパリティはすでに取り除いてある：<br />part_32x19ram i_SPC A[4:0] D[18:0]　SPC STACK<br />元は32x2bit 82S21 ラッチ×10個(パリティ付き)<br /><br />part_32x32ram i_MMEM A[4:0] D[31:0]　B-MEMORY(M-MEMORY)<br />元は32x2bit 82S21 ラッチ×17個(パリティ付き)&nbsp;<br /><br />part_2kx5ram i_VMEM0 A[10:0] D[4:0]　VMAP STAGE0<br />元はRAM 1k×1bit 93425A×12個<br /><br />part_1kx24ram i_VMEM1_2 A[9:0] D[23:0] VMAP STAGE1,2<br />元はRAM 1k×1bit 93425A×25個<br /><br />part_1kx32ram i_PDL、i_AMEM A[9:0] D[31:0] PDL MEMORY、A-MEMORY<br />元はRAM 1k×1bit 93425A×33個(パリティ付き)が2セット<br /><br />part_2kx17ram i_DRAM A[10:0] D[16:0]　DISPATCH MEMORY<br />元はRAM 1k×1bit 93425A×36個<br /><br />part_16x49ram i_IRAM A[13:0] D[48:0]　INSTRUCTION MEMORY<br />元はRAM 4k×1bit IN2147×196個<br /><br />部品としてのRAMは3種類。うちラッチと書いたものはパススルーができる？<br />INSTRUCTION MEMORYがいちばん大きい。次いでDISPATCH MEMORYで、このあたりを外に追い出せばいけるか。VMAP関連についてはSTAGE0,1,2とcaddr.vソースとの対応付けが今のところはっきりしない。(CADRマシンの前身、CONSマシンのブロック図を参照しているのでその違いかもしれない)<br /><br />SPC STACK、B-MEMORYのみ中身があるものにしてDE0(CycloneIII EP3C16F484C6)ターゲットで合成してみたら約１時間で4,229/15,408LE (27%)だった。まだ行けそうね。<br /><br />]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/hardyboy/archives/6316283.html">
<title>QuartusIIでCADRのソースをコンパイル　２</title>
<link>http://blog.livedoor.jp/hardyboy/archives/6316283.html</link>
<description>QuartusIIでCADRのソースをコンパイル　続きi_DRAMの中身をカラ(reg 宣言を削りassign DO=DI; とする)にして再度コンパイルしてみた今回は５時間を越えてどんどん進むが停まる気配がない。１０時間で打ち切り、すべてのRAMについて同様に中身をカラにしてみた。どうもreg宣言...</description>
<dc:creator>hardyboy</dc:creator>
<dc:date>2013-02-22T02:18:18+09:00</dc:date>
<dc:subject>Verilog</dc:subject>
<content:encoded><![CDATA[<a target="_blank" href="http://blog.livedoor.jp/hardyboy/archives/6314365.html">QuartusIIでCADRのソースをコンパイル</a>　続き<br />i_DRAMの中身をカラ(reg 宣言を削りassign DO=DI; とする)にして再度コンパイルしてみた今回は５時間を越えてどんどん進むが停まる気配がない。１０時間で打ち切り、すべてのRAMについて同様に中身をカラにしてみた。どうもreg宣言ばかりで明にRAMに割り当てていないようで、これがLE数を消費する原因と思われた。<br />結果は以下のとおり。<blockquote>Flow Status<span style="white-space: pre;">	</span>Successful - Fri Feb 22 01:17:37 2013</blockquote><blockquote>Quartus II 64-Bit Version<span style="white-space: pre;">	</span>12.1 Build 177 11/07/2012 SJ Web Edition</blockquote><blockquote>Revision Name<span style="white-space: pre;">	</span>caddr</blockquote><blockquote>Top-level Entity Name<span style="white-space: pre;">	</span>caddr</blockquote><blockquote>Family<span style="white-space: pre;">	</span>Cyclone IV GX</blockquote><blockquote>Device<span style="white-space: pre;">	</span>EP4CGX150DF31I7AD</blockquote><blockquote>Timing Models<span style="white-space: pre;">	</span>Final</blockquote><blockquote>Total logic elements<span style="white-space: pre;">	</span>2,929 / 149,760 ( 2 % )</blockquote><blockquote>Total combinational functions<span style="white-space: pre;">	</span>2,860 / 149,760 ( 2 % )</blockquote><blockquote>Dedicated logic registers<span style="white-space: pre;">	</span>471 / 149,760 ( &lt; 1 % )</blockquote><blockquote>Total registers<span style="white-space: pre;">	</span>471</blockquote><blockquote>Total pins<span style="white-space: pre;">	</span>27 / 508 ( 5 % )</blockquote><blockquote>Total virtual pins<span style="white-space: pre;">	</span>0</blockquote><blockquote>Total memory bits<span style="white-space: pre;">	</span>0 / 6,635,520 ( 0 % )</blockquote><blockquote>Embedded Multiplier 9-bit elements<span style="white-space: pre;">	</span>0 / 720 ( 0 % )</blockquote><blockquote>Total GXB Receiver Channel PCS<span style="white-space: pre;">	</span>0 / 8 ( 0 % )</blockquote><blockquote>Total GXB Receiver Channel PMA<span style="white-space: pre;">	</span>0 / 8 ( 0 % )</blockquote><blockquote>Total GXB Transmitter Channel PCS<span style="white-space: pre;">	</span>0 / 8 ( 0 % )</blockquote><blockquote>Total GXB Transmitter Channel PMA<span style="white-space: pre;">	</span>0 / 8 ( 0 % )</blockquote><blockquote>Total PLLs<span style="white-space: pre;">	</span>0 / 8 ( 0 % )<br /></blockquote>&nbsp;　2929LEですと？ちょっと少なすぎるみたいだけどもここからRAMを盛っていく。<br />i_DRAM については外付けのDRAMと勘違いしていたのだがDispatchRAMで17bit幅☓11bitアドレスのStaticRAMだった。主記憶はCADRマシンの外にある。caddrではすでにパリティ用の1bitについては削減してあった。<br />　あとはクロック周り。osc50mhzを外部からの入力として、以下の接続。<br />osc50mhz--＞○--osc0--＞○--hifreq1,hifreq2--＞○--hfdlyd--＞○--hftomm(未使用)<br />hifreq1,hifreq2は実質同じ、hfdlydはさらに位相の遅れたクロックのつもり。<br />これらを元にディレイラインで30ns,70nsの遅れを作りRAMのサイクル用などに使っている。<br />また、NAND2個のたすきがけで制御を行なっている場所が５箇所あり、図面のCLOCK DISTRIBUSIONとMASTER CLOCKはPLLを使用したクロック制御モジュールとして起こしてやらなければならないだろう。これに合わせて非同期SRAM部分も合わせるか。<br />]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/hardyboy/archives/6314365.html">
<title>QuartusIIでCADRのソースをコンパイル</title>
<link>http://blog.livedoor.jp/hardyboy/archives/6314365.html</link>
<description>LISPマシンCADRの回路図とVerilog-HDLに変換されたソースリストを見て、これ今のFPGAに収まりそうじゃないかなと思って試しにコンパイルしてみた。もともとはすべてTTLで構成されていて、それをそのままVerilogの記述に変換したものと、きちんと書きなおされたものがある。後...</description>
<dc:creator>hardyboy</dc:creator>
<dc:date>2013-02-21T00:23:21+09:00</dc:date>
<dc:subject>Verilog</dc:subject>
<content:encoded><![CDATA[LISPマシンCADRの回路図とVerilog-HDLに変換されたソースリストを見て、これ今のFPGAに収まりそうじゃないかなと思って試しにコンパイルしてみた。もともとはすべてTTLで構成されていて、それをそのままVerilogの記述に変換したものと、きちんと書きなおされたものがある。後者はCADDR Reviced CADR Verilogとして公開されているのでこちらを使った。<br /><a href="http://www.unlambda.com/cadr/" target="_blank">Retrocomputing - MIT CADR Lisp Machines</a><br />　すでに@natsutanさんが三年前に試されているけど、最近のはどうかな？<br /><a href="http://d.hatena.ne.jp/natsutan/20100715/1279156638" target="_blank">[Lisp][Verilog][FPGA]cadrのVerilogソースのコンパイル その1<br /></a><br />環境：Windows7 PRIMERGY TX100S1(Core2Quad 2.67GHzに差し替えたもの)<br />QuartusII 12.1 Build 177 64-bit<br /><br />新規プロジェクトを作成し、ターゲットデバイスを一番LE数の大きそうなものにする。今回はCycloneIV GXにした。制約条件などのオプション指定はなにもなし。コンパイルにかかった時間は4時間23分、結果はFittingに失敗(113%)、LE数は169,005と出た。<br /><br /><blockquote><blockquote>Flow Status<span style="white-space: pre;">	</span>Flow Failed - Wed Feb 20 18:15:59 2013</blockquote><blockquote>Quartus II 64-Bit Version<span style="white-space: pre;">	</span>12.1 Build 177 11/07/2012 SJ Web Edition</blockquote><blockquote>Revision Name<span style="white-space: pre;">	</span>caddr</blockquote><blockquote>Top-level Entity Name<span style="white-space: pre;">	</span>caddr</blockquote><blockquote>Family<span style="white-space: pre;">	</span>Cyclone IV GX</blockquote><blockquote>Device<span style="white-space: pre;">	</span>EP4CGX150DF31I7AD</blockquote><blockquote>Timing Models<span style="white-space: pre;">	</span>Final</blockquote><blockquote>Total logic elements<span style="white-space: pre;">	</span>169,055 / 149,760 ( 113 % )</blockquote><blockquote>Total combinational functions<span style="white-space: pre;">	</span>109,428 / 149,760 ( 73 % )</blockquote><blockquote>Dedicated logic registers<span style="white-space: pre;">	</span>136,714 / 149,760 ( 91 % )</blockquote><blockquote>Total registers<span style="white-space: pre;">	</span>136714</blockquote><blockquote>Total pins<span style="white-space: pre;">	</span>27 / 508 ( 5 % )</blockquote><blockquote>Total virtual pins<span style="white-space: pre;">	</span>0</blockquote><blockquote>Total memory bits<span style="white-space: pre;">	</span>787,040 / 6,635,520 ( 12 % )</blockquote><blockquote>Embedded Multiplier 9-bit elements<span style="white-space: pre;">	</span>0 / 720 ( 0 % )</blockquote><blockquote>Total GXB Receiver Channel PCS<span style="white-space: pre;">	</span>0 / 8 ( 0 % )</blockquote><blockquote>Total GXB Receiver Channel PMA<span style="white-space: pre;">	</span>0 / 8 ( 0 % )</blockquote><blockquote>Total GXB Transmitter Channel PCS<span style="white-space: pre;">	</span>0 / 8 ( 0 % )</blockquote><blockquote>Total GXB Transmitter Channel PMA<span style="white-space: pre;">	</span>0 / 8 ( 0 % )</blockquote><blockquote>Total PLLs<span style="white-space: pre;">	</span>0 / 8 ( 0 % )</blockquote></blockquote><br />ソースは以下の修正が必要。<br /><br />・caddr.v 74181.v 74182.v busint.v &nbsp;memory.v rom.v を新規ファイルとしてプロジェクトに追加。（New Files... でVerilog-HDLを指定してコピペ）　lm2clock.vは多分いらない。<br /><br />・caddr.vのソース修正 `includeをすべてコメントアウト。プロジェクト内のモジュールを多重に読み込むことになるので。<br />・memory.vのソース修正　initial begin~end部分をコメントアウト。<br />・busint.vのソース修正　initial begin~end部分をコメントアウトし、always@(posedge clk)部分とalways@(rst_n)部分をalways@(posedge clk or negedge rst_n)として合体させる。<br /><br />　あとはメモリを外に出す、caddr.vが大きすぎるのである程度のモジュールに分割し面積を減らせるか検討。特にパリティ回路はまるっと削除しても問題なさそう。あとはALUをまとめてしまう、など。<br /><br />]]>
</content:encoded>
</item>

</rdf:RDF>
