07. Circuit言語げんご

方針ほうしん

二値にち固定幅こていはば同期離散時間どうきりさんじかん回路かいろ正式せいしき意味領域いみりょういきとする。構文木こうぶんき回路かいろgraph、回路生成かいろせいせい信号しんごう実行値じっこうち定義ていぎ再利用さいりよう状態じょうたい共有きょうゆう分離ぶんりする。

1. surfaceとかた

Designはmodules、entryめい、tests。Moduleはname、入力列にゅうりょくれつ宣言列せんげんれつ出力列しゅつりょくれつ入力にゅうりょく/出力しゅつりょく/stateのはばせいのNat。upper boundは構成上こうせいじょうのLimitsでまり、暗黙あんもくの32/64bitに制限せいげんしない。

bit-vectorは (width, unsigned value)0 <= value < 2^widthbits width valueの範囲外はんいがいはエラーで、literalの切捨きりすてをしない。true/falseは1bit。

信号名しんごうめいはinput/wire/stateの共通空間きょうつうくうかんinstanceめいはInstance空間くうかん、moduleめいはDesignないのModule空間くうかん、outputめいかくmoduleのOutput空間くうかんおな空間くうかん重複ちょうふくはエラー。outputは内部ないぶはだか名前参照なまえさんしょうとして再利用さいりようしない。共有きょうゆうしたいしきはwireで宣言せんげんする。

Name leafは信号参照しんごうさんしょうat instance outputは、そのinstanceが参照さんしょうするmoduleのoutputを参照さんしょうする。definition linkにはinstance siteとoutput definitionの双方そうほう提示ていじできる。

2. 各宣言かくせんげん

3. 演算えんざん

notはbitwise。and/or/xor/nor/addは等幅とうはばの2入力にゅうりょくaddはmod 2^widthの加算かさん符号付ふごうつ解釈かいしゃくはしない。

muxは1bit selectと等幅とうはばのyes/no。select=1ならyes。

concat a bはaを上位じょうい、bを下位かいき、はばはwa+wb。

slice value lo widthはLSB=0として [lo,lo+width)す。width>0かつlo+width<=入力幅にゅうりょくはば全加算ぜんかさん・index計算けいさんをcheckedにする。

4. 検査けんさとelaboration

  1. Designないのmodule signatureを収集しゅうしゅうする。entryとかくinstanceのmoduleを解決かいけつする。

  2. module-instantiation graphがDAGであることを検査けんさする。再帰さいきinstantiationは有限ゆうげん回路かいろにならないので拒否きょひする。

  3. かくinstanceを独立どくりつした階層かいそうpathへ展開てんかいし、信号参照しんごうさんしょう状態じょうたいむすぶ。未使用みしようmoduleも単独たんどく検査けんさし、不正ふせい定義ていぎ放置ほうちしない。

  4. かくstate readを組合くみあわせgraphの入力にゅうりょくとしてあつかい、next assignmentをべつのsinkにする。state readからnext exprへぎゃく依存いぞんedgeをくわえない。

  5. その実際じっさいのgraphで組合くみあわせcycleを検査けんさする。instanceの全入力ぜんにゅうりょく全出力ぜんしゅつりょく依存いぞんすると近似きんじしてはいけない。内部ないぶstateで遮断しゃだんされるfeedbackを誤拒否ごきょひしない。

  6. DAGの順序じゅんじょでwidthを推論すいろん検査けんさする。input/state/constantが既知幅きちはばのroot。かくoutput/state-next/instance-inputの要求幅ようきゅうはば照合しょうごうする。

共有きょうゆうwireはおなじsignal identity。再利用さいりようmoduleはことなるinstance identity。instance pathはowner module instanceと宣言せんげんordinalで一意いちいにし、表示名ひょうじめい連結れんけつだけでIDをつくらない。

5. stepと時間じかん

状態じょうたいq_k、入力にゅうりょくu_kにたいし、組合くみあわせgraphからy_kとnext計算けいさんし、結果けっかとして(q_{k+1},y_k)をかえす。ぜんstateは同時更新どうじこうしんstateを逐次上書ちくじうわがきして後続こうぞくのnext計算けいさん影響えいきょうさせない。

initial(PreparedNetlist) は、entryをえらんでelaborateしたぜんinstanceのstate初期値しょきちをslotじゅんかえす。CheckedDesignとentryはelaborateの入力にゅうりょくであり、initialは階層展開かいそうてんかい組合くみあわせDAG・はば検査けんさませたあたいだけをける。step入力にゅうりょくstateを変更へんこうせずあたらしいあたいかえす。observe現在げんざい出力しゅつりょくだけをかえ純粋操作じゅんすいそうさ入力列にゅうりょくれつ出力列しゅつりょくれつじゅんはmodule宣言順せんげんじゅん

test name module ticksはそのtest開始時かいしじにinitial状態じょうたいもどす。tick inputs expectedOutputsはpre-edgeのy_kを比較ひかくしてからstateを更新こうしんする。おなじtestないのticksは連続時間れんぞくじかんべつtestでは状態じょうたい共有きょうゆうしない。期待列きたいれつかず/はば不一致ふいっちはtest失敗しっぱいべつのInvalidTestShape。

この仕様しよう非同期ひどうきlatch、伝播遅延でんぱちえん、X/Z、アナログ挙動きょどうをモデルしない。これらを適当てきとう二値にちつぶ変換へんかん許可きょかしない。べつmodelを導入どうにゅうするならschemaと操作そうさばんける。

6. NOR IRへの変換へんかん

正式せいしきなloweringさきは4しゅのnode(InputBit、StateBit、ConstBit、Nor2)と2しゅのsink(nextBits、outputBits)からるNorNetlist。vector-level演算えんざんをbit-levelへ展開てんかいする。NextBit/OutputBitという独立どくりつnode variantはつくらず、sink配列はいれつ各項かくこう既存きそんnodeのindexを参照さんしょうする。StateBitとnextBitsを維持いじするので順序回路じゅんじょかいろ表現ひょうげんできる。stateの初期しょきbitれつ、sinkのながさとLSBからの順序じゅんじょはモデル不変条件ふへんじょうけんしたがう。

not a = nor a a。or a b = not (nor a b)。and a b = nor (not a) (not b)。xor a b = nor (nor a b) (and a b)。mux = (select AND yes) OR ((NOT select) AND no)。addはLSBからcarryをつたえるfull-adderで最終さいしゅうcarryをてる。slice/concat/wireはbit参照さんしょう配線はいせんになる。

しき入力順にゅうりょくじゅん、bitじゅん生成せいせいnode ordinalを固定こていし、おな入力にゅうりょくからおなじIRをす。任意最適化にんいさいてきかをreference loweringへ混在こんざいさせない。最適化さいてきか提供ていきょうする場合ばあいべつoperationとして同値どうちテストとsource mapを要求ようきゅうする。

比較試験ひかくしけんもとのvector evaluatorとNOR evaluatorの両方りょうほうで、全小幅入力ぜんしょうはばにゅうりょく複数ふくすうtickを比較ひかくする。NOR evaluatorをもとのevaluatorとおなじコードへのたんなるaliasにしない。

7. SVG backendの配置はいち

elaborated vector-level graphを対象たいしょうに、入力にゅうりょく/stateをrank0、各組合かくくみあわせnodeを前提ぜんていnodeの最大さいだいrank+1、出力しゅつりょく最後さいご配置はいちする。どうrankない定義ていぎ/instance ordinalじゅん固定こていpaddingとlabelのscalarすうからはばめ、SVG textLengthを使つかって描画幅びょうがはば明示めいじする。font依存いぞんでSVG byteれつえない。

edgeはrankかんのlaneをordinalでてた直交線ちょっこうせんstateへのnext edgeは破線はせん表示ひょうじし、組合くみあわせedgeと区別くべつする。node/edgeにはEntityIdとOriginを対応付たいおうづけ、クリックでソースにもどせる。最小交差数さいしょうこうさすう最適配置さいてきはいち保証ほしょうする算法さんぽうとはしない。

ぜんラベルはescapeし、任意にんいscriptやURLを挿入そうにゅうしない。

8. 公開操作こうかいそうさ

lower、check、elaborate、initial、observe、step、run_tests、lower_nor、print、diagram。CheckedDesignは必要ひつようなmodule検査けんさふくむ。PreparedNetlistはinstance展開てんかい組合くみあわせDAG/幅検査済はばけんさずみ。sourceをparseしただけでsimulationを開始かいししない。