O HAI THIS BLOG PURPZIEZ 2 B UZED AZ MAH PLESIOUS MEM. :)

2009/11/28

SUPER_COMPUTER >> DIV_UU

ニュースやらblogやらtwitterやらでゴチャゴチャ五月蝿ぇので暴言を吐いたら,masatomon先生にRTされちまったので除算器のVHDLを晒すと言うネタをやってみる.

仕様から説明するか.入力は符号無し整数の被除数と除数,ビット幅は双方同一とするが特に大きさは制限しない.出力は商と剰余,それから零除算インジケータ.スループットは1 division/CLK,入出力レイテンシは制限しない.本来はもっと考えるトコロがあるケド,メンドイので他には制限無し.ただし,合成出来て,あんまりデカくなくて,なおかつそれなりに早く動く事.

で,実装.冗長2進数だの高基数だのはメンドイのでやらない.算術シフトとコンパレータと減算をパイプラインで行う.ソースはバケツに突っ込んだ.イメージ的にはタダの筆算.

で,シミュレーション.ビット数をデカくするとたるいので,3bitでやったのが,これ.


で,合成.アルテラ謹製のくぉーたすつーでプロジェクトの設定はデフォルトのまま突っ込んだら,こうなった.ちなみにビット幅は32bitね.
Fitter Status : Successful - Sat Nov 28 02:29:38 2009
Quartus II Version : 9.0 Build 184 04/29/2009 SP 1 SJ Web Edition
Revision Name : DIV_UU
Top-level Entity Name : DIV_UU
Family : Stratix III
Device : EP3SL70F780I4L
Timing Models : Final
Logic utilization : 10 %
    Combinational ALUTs : 2,018 / 54,000 ( 4 % )
    Memory ALUTs : 0 / 27,000 ( 0 % )
    Dedicated logic registers : 3,235 / 54,000 ( 6 % )
Total registers : 3235
Total pins : 133 / 488 ( 27 % )
Total virtual pins : 0
Total block memory bits : 0 / 2,267,136 ( 0 % )
DSP block 18-bit elements : 0 / 288 ( 0 % )
Total PLLs : 0 / 4 ( 0 % )
Total DLLs : 0 / 4 ( 0 % )

Analysis and Synthesis Status : Successful - Sat Nov 28 02:28:35 2009
Quartus II Version : 9.0 Build 184 04/29/2009 SP 1 SJ Web Edition
Revision Name : DIV_UU
Top-level Entity Name : DIV_UU
Family : Stratix III
Logic utilization : N/A
    Combinational ALUTs : 2,006
    Memory ALUTs : 0
    Dedicated logic registers : 3,235
Total registers : 3235
Total pins : 133
Total virtual pins : 0
Total block memory bits : 0
DSP block 18-bit elements : 0
Total PLLs : 0
Total DLLs : 0

------------------------------------------------------------
TimeQuest Timing Analyzer Summary
------------------------------------------------------------

Type  : Slow 900mV 100C Model Setup 'iCLK'
Slack : -5.132
TNS   : -7413.304

Type  : Slow 900mV 100C Model Hold 'iCLK'
Slack : 0.541
TNS   : 0.000

Type  : Slow 900mV -40C Model Setup 'iCLK'
Slack : -5.259
TNS   : -7461.099

Type  : Slow 900mV -40C Model Hold 'iCLK'
Slack : 0.507
TNS   : 0.000

Type  : Fast 900mV -40C Model Setup 'iCLK'
Slack : -1.902
TNS   : -1922.378

Type  : Fast 900mV -40C Model Hold 'iCLK'
Slack : 0.229
TNS   : 0.000

------------------------------------------------------------

これだけやってもiCLKは159.77MHzでしか動かない.ディジタル回路なめんなよ.スパコンはもっともっと大変なブツだぞ!!1 :P

更新:200MHz行かないのが納得出来んので,カッとなってパイプラインを三倍にした.今は反省はしていない. :DDD


再合成してみたら198.89MHzで動く様になったらしい.やっぱこの除算アルゴリズムで200MHzは無理か. :P
Fitter Status : Successful - Sat Nov 28 12:54:15 2009
Quartus II Version : 9.0 Build 184 04/29/2009 SP 1 SJ Web Edition
Revision Name : DIV_UU
Top-level Entity Name : DIV_UU
Family : Stratix III
Device : EP3SL70F780I4L
Timing Models : Final
Logic utilization : 18 %
    Combinational ALUTs : 2,039 / 54,000 ( 4 % )
    Memory ALUTs : 0 / 27,000 ( 0 % )
    Dedicated logic registers : 9,288 / 54,000 ( 17 % )
Total registers : 9288
Total pins : 133 / 488 ( 27 % )
Total virtual pins : 0
Total block memory bits : 0 / 2,267,136 ( 0 % )
DSP block 18-bit elements : 0 / 288 ( 0 % )
Total PLLs : 0 / 4 ( 0 % )
Total DLLs : 0 / 4 ( 0 % )
Analysis and Synthesis Status : Successful - Sat Nov 28 12:52:15 2009
Quartus II Version : 9.0 Build 184 04/29/2009 SP 1 SJ Web Edition
Revision Name : DIV_UU
Top-level Entity Name : DIV_UU
Family : Stratix III
Logic utilization : N/A
    Combinational ALUTs : 2,039
    Memory ALUTs : 0
    Dedicated logic registers : 9,288
Total registers : 9288
Total pins : 133
Total virtual pins : 0
Total block memory bits : 0
DSP block 18-bit elements : 0
Total PLLs : 0
Total DLLs : 0
------------------------------------------------------------
TimeQuest Timing Analyzer Summary
------------------------------------------------------------

Type  : Slow 900mV 100C Model Setup 'iCLK'
Slack : -3.580
TNS   : -14902.996

Type  : Slow 900mV 100C Model Hold 'iCLK'
Slack : 0.466
TNS   : 0.000

Type  : Slow 900mV -40C Model Setup 'iCLK'
Slack : -4.028
TNS   : -14569.313

Type  : Slow 900mV -40C Model Hold 'iCLK'
Slack : 0.447
TNS   : 0.000

Type  : Fast 900mV -40C Model Setup 'iCLK'
Slack : -1.117
TNS   : -2389.571

Type  : Fast 900mV -40C Model Hold 'iCLK'
Slack : 0.202
TNS   : 0.000

------------------------------------------------------------

2009/11/25

MeasureSLOC(&AL9); /* 2009/09~ */

AでLで9なdiffstat,9月以降の終了まで.
bench/BENCH_CLDPCDOP.vhd      |    6 
bench/BENCH_FCO.vhd           |   53 +++
bench/BENCH_LDPCDDB.vhd       |   16 +
bench/BENCH_LDPCTX2LDPCRX.vhd |    4 
bench/BENCH_PE2RST.vhd        |    3 
bench/BENCH_SELDPCDIPM.vhd    |  141 ++++++++++
vhdl/AFIFO.vhd                |    7 
vhdl/BCBOOL.vhd               |   15 -
vhdl/BER_IF_REG.vhd           |   17 +
vhdl/CLDPCDOP.vhd             |   36 --
vhdl/COS_VLSX4_MEM.vhd        |   71 ++++-
vhdl/ELDPCDIP.vhd             |  103 +++++++
vhdl/FCOD-stub.vhd            |  166 ++++++++++++
vhdl/FCOD.vhd                 |   42 ++-
vhdl/FCO_NG.vhd               |  577 ++++++++++++++++++++++++++++++++++++++++++
vhdl/FP1_LDPCRX.vhd           |   53 +++
vhdl/FP1_LDPCTX.vhd           |    9 
vhdl/FP2_LDPCRX.vhd           |   15 +
vhdl/FP3_LDPCRX.vhd           |   34 +-
vhdl/FP4_LDPCRX.vhd           |   50 ++-
vhdl/LDPCD-stub.vhd           |    4 
vhdl/LDPCD.vhd                |  167 +++++++-----
vhdl/LDPCE.vhd                |   91 ++++--
vhdl/LDPCEDB.vhd              |   42 ++-
vhdl/PE2RST.vhd               |   58 ++++
vhdl/RX_LX_FEBE.vhd           |   17 +
vhdl/SELDPCDIPM.vhd           |   76 ++++-
vhdl/SFIFO.vhd                |    7 
vhdl/UACCUM.vhd               |    7 
vhdl/XDPRAM.vhd               |  125 ++++++---
30 files changed, 1767 insertions(+), 245 deletions(-)
2kSLOCくらいだったみたい.

FCO.vhdがアレだったのでrewriteしてFCO_NG.vhdっつーのを作った.実機にはぶっ込んでないけど,rewriteしただけあってかなりイイ線を逝っている,と個人的には思っている.「良く考えてから書けよ」とかいつも思うんだが,やっぱりcodeのpolish upにrewriteはとても良い.そう言う意味で片手間でrewrite出来る様なstyleであるTPは多いに有利に働いているぜよ.

時間に追われて精神衛生上は良くないと感じるcodeを垂れる事はままある,大人の事情ってヤツね.それを除いても,書いているうちに具合が悪くなる傾向ってのはある.そして,大方のそーゆーcodeは何か良くないトコロがやっぱりある.それを設計の時点で気付けば良いのだけど,俺達ぁエスパーじゃないから,大抵はやらかした後に落ち着いて吟味した後に初めて気付く.

オレの数少ない経験から言うと,本来,抽象化されるべき機能は,要求される仕様の数層上のレイヤーにある.codeのrewriteは演繹でも帰納でもなく,自身の誤謬可能性を認めた上での合理主義に基づく妥当な行為である.そしてrewriteを躊躇する様なstyleならば,その様なstyleは邪悪である.

また別のブツを書き始めたのでクソcodeにならない様に気をつけようと思ふ. :D

2009/11/14

$((A \subset B) \land B) \subset A$

この前も書いたけど,個人的にはあんまりオレオレ形而上学的な事は言いたくないんだよなぁ.ヒキコモしながらエア思索する事は良くあるけど,その手の事はあんまり話題にはしないし,したくないんだよなぁ.まー,喋る相手も居ねぇが. :P

最近の流行の形而上学は知らねぇけど,フツーの大学の学部まで勉強したなら形而上学の歴史で出てくる人の中にカントが居るのは知っていると思う.リンク先にも書いてあるケド,カントもフツーの人とは哲学ちっくな話題を交えるのを露骨に嫌がってたらしい.その辺りの感覚は何となく分かるんだけど,今までキチンと納得出来てなかった.

最近,難しかったので積読して本棚のこやしになっていたカントのプロレゴーメナを発掘したので,もう一度挑戦してみたら,この手の不機嫌の理由を説明しやすい言い回しがある事に気付いた.
序説 一般的問題
いかにして純粋理性からの認識は可能か

(中略)

そこで,この上も無く重大である本来の課題は,厳格な正確さで言い表すと,次の様になる.

いかにしてア・プリオリな綜合的命題は可能か.

(中略)

ところで,形而上学の存亡,したがってその存在はまったくこの課題の解決にかかっている.だれにせよ形而上学において自分の主張をどんなにもっともらしく述べようとも,また息がつまるほどに,推論に推論を積み重ねようとも,もし彼が先の問いにまず十分に答えることができなければ,それはすべて空虚な,根拠のない哲学であり,偽った知恵であると私が言っても正当であろう.君は純粋理性によって語り,そしてただ与えられた概念を分析するだけではなく,矛盾律によらない,しかもまったくすべての経験から独立に君が見抜いたと思い込んでいる新しい結合を申し立てて,それでア・プリオリな認識をいわば創造したと君は誇らしげに言う.それなら,君はいかにしてこれに至ったのか.いかにして君はそういう自負について自分を正当化しようとするのか.常識の賛成に訴えることは君には許されない.なぜなら,常識という証人は,その尊敬が単に世評にもとづくものにすぎないからである.

君がそう私に示すすべてを,私は信ぜず,これを嫌う.

ホンの一部引用しただけだし,もちろんこれで終わりじゃあなくて,この先もかなりイイ事が書いてあるんだけど,引用すんのダルいし十分だろ.一番長ぇ所を蝶意訳してみるか.

つまり,オレオレ主張の価値は「なんでそーゆーオレオレ主張出来るのかと言う理由付けが出来るか?」に生命線が走っている.誰が唱えようと,どんなにもっともらしく聞こえようとそんな事ぁ,関係無い.首が絞まるくらい論理をこねくりまわしてもこの質問に答えられないなら,「何?そのオレオレ主張,マジウケる,腹痛ぇ.」とかミソクソに言われても仕方が無なくね?テメーはそれっぽく,かつ偉そーに自説を開陳しまくっている様だが,根拠はキチンとあるんだろうな?なんか分析した結果だとか,論理的に推論したとか,経験したとか,まして「常識だろ?」なんて言わせねーぞ.常識なんかは時が経てばコロコロ変わっちまうじゃねーか.

あー,説明すんのって面倒臭ぇなぁ. :DDD

2009/11/13

efficient++; /* wrong */

仕事でお得意様々に伺って仕様のレビューをしてもらいに行った電車の中で,いつも通りテキトーに上司と喋ってた.新しいプロジェクトでその上司の上司から「作業の効率化をしろや!」とか言われてどーすっかなーとか考えてるって話題があった.「ふーん,へー,ほー.じゃ,がんばってねー」とか返して終わらしても良かったし,あんまオレオレ形而上学的な事はなんとなく声高に言いたくなかったんだけど.道中暇なので年下の不良社員なのに偉そうな事を言ってみた.巧く伝わったかどうかわからんし,別に伝わってなくてもオレは全く構わねぇんだが,折角なので言いたかった事をまとめておこう.

よくあるよね,こう言う要求.オレ様の数少ない経験から言うと,大抵の短絡的で使えねぇマネージャとかはこう言う事良く言うんだぜ!!1「作業が計画通り旨く進まないのは作業の効率が悪いからだ.作業の効率化をしろ!そうすれば作業時間が短くなるじゃねーか?」そうね,その通り.だが,そうは問屋が卸さんぜよ. :D

言っちゃあ何だが,アンタってもしかして頭悪くね?「作業を効率化しろ!」って言うだけで効率が上がったらエンジニアは誰も苦労なんかしてねぇよ,カスめ.しかもそんだけしか言わないクセに,言外には悪意ある真意が隠されていると疑っちまうよなぁ,フツー.言っちまえよ,本音はこうだろ?「オレ様が計画してやった無茶な工程がウマい感じで事が運ぶ様にする為に,オレが具体的な効率化の方法を考えんのは面倒臭ぇから,テメーの作業がどう言うものかヨクワカランが何とかして作業を効率化しろ!そんでオレのマネージャとして評価が上がる様に精々汗水垂らして働くがいい!」ハイハイ,悪意満載,蝶ウケる,腹痛ぇ. :DDD

この手の無茶な要求はそう思っても言明しない場合に比べて悪影響を実働隊に与えると思うんよ,オレは.具体的な方法を提示せず,結果だけ楽観視して一見筋が通っていてマトモに聞こえるんだが,言外に利己的な本音が見え隠れする様に聞き手側にとられかねない様な言い回しだと顕著に.その最たる弊害は,その言明が実働隊に与える無意味なプレッシャーに起因するやる気の低下,横文字で言うと,incentiveが段々無くなっていっちまう訳だ.んーな事も分からんタコは豆腐の角に頭ぶつけてタンコブでも作ってなさい. :P

一応断っておくと,オレは大した事をやってるつもりは無いんだけど.最近,片手間ながら後輩が午前中いっぱいかけてロジアナで取ってきた実機のログをシミュレーション結果と比較するのにMS謹製のExcelで比較しようとしてデータ数キャパを超えてしまった事があった.しょーがないんでawkとかdiffとか使って一致確認を一分位でやったんよ.shellでコマンド打つ度に隣で後輩が「えー」とか言ってた.いや,別に驚く事って無くね?unixyな環境齧ってるヤツなら常識だろ?

上の例はあんま巧い例じゃないけど,所謂フツーの人達からはそう言う行為は奇異でtrickyに見えるかもしれんなー,と感じた.けど,そう言うちょっとした事を何気なく,しかも常識的に行える様になって初めて作業の効率化ってのは功を奏すと思うんよ,オレは.クソの役にもたたない楽観的指示ってのはincentiveの低下と言う的外れな結果しか生まない.だからって無い知恵を絞って無理矢理具体化した指示を出しても現実性に欠けたり,場当たり的な対処でしか無い場合が容易に想像出来る.

自分のやっている作業が本当は効率が悪いのではないか,と疑う所がスタートライン.効率化を図るスキルの獲得は必要な事であり欠かす事が出来ない,いわば呼吸をする様なモノ.そーゆーモノは日々過ごす環境から自ら,だがそれと意識しないで染み付いていってしまうモノなんだなぁ,と思った.勿論,やろうとするincentiveが憑いていれば,尚の事,良しなんだろうけど.取り敢えず,スーハースーハーと深呼吸でもして下さい. :P

「まー,すぐには巧くいかないと思うんで今のままゴリ押しでやれば?」ってちょいと冗談めかして上司とのこの話題は終わらしました.え,ツン?違ぇよ. :DDD

typo修正: THX 2 masayuko :)

2009/11/01

return KTHX;



晒していたNSのebuildが気に入られたらしい.
こう言うのにはやっぱ1337ishにKTHXで応答せねばなるまい. :D