ハードウェア記述言語の今と未来natu.txt-nifty.com/natsutan/files/_.pdfverilogの特徴...
TRANSCRIPT
アジェンダ
o 自己紹介o Verilogの紹介n VHDLn OpenSparcだ!
o ちょっと未来の言語n SystemVerilogn SystemC
o 未来の言語n HW記述n リコンフィグn CPUカスタマイズn コプロの自動生成n ルールベースn 成功事例
自己紹介
o なつたんn FPGA系プログラマn マイコンも好きn 長門有希も好きn ココログ(http://natu.txt-nifty.com/)n ぱた☆へね(http://d.hatena.ne.jp/natsutan/)
o 仕事n 半導体のプロトタイピングn 「ぼくのかんがえたすーぱーこんぴゅーた」を作るお手伝い
アジェンダ
o 自己紹介o Verilogの紹介n VHDLn OpenSparcだ!
o ちょっと未来の言語n SystemVerilogn SystemC
o 未来の言語n HW記述n リコンフィグn CPUカスタマイズn コプロの自動生成n ルールベースn 成功事例
Verilogと仲間たちの紹介o Verilog(正確には、Verilog HDL)n HDLはHardware Description Languageの略n 標準化o IEEE 1364-1995o IEEE 1364-2001
o VHDLn VHSIC(Very High Speed Integrated Circuits)
Hardware Description Languagen 標準化o IEEE 1076-1987o IEEE 1164
VHDLについてもう少し
o Adaに似た文法o HDLとして見た場合、「現状」
できることはVerilogと同じo http://ja.wikipedia.org/
wiki/VHDL から
Verilogが使われるところ
o デジタル回路の動作を記述するための言語n プロセッサ
n ネットワークコントローラ
n GPUn ゲーム機や携帯の中にいろいろ
n デジカメやTVの中にも
o 最終生成物(実行ファイル相当)は半導体
夢のデバイスFPGAo コンパイル済みのデータをダウンロードすると、専用ハードウェアになるn ファミコン、MSXn MIPS、Sparc、ARMn デジタル回路なら何でもOK
o Verilog修正から実記動作までのサイクルが数時間o LSIのプロトタイプとしても使用されるo 欠点n 単価が高いn 速度が遅いn 消費電力が多い
Verilogの特徴
o 並列動作を記述できる
o シミュレーション可能な記述と合成可能な記述n 抽象度の高い表現は合成できない
o 知名度低いn ユーザー数は国内数万人
n 先に規格化ありき
n ユーザーからの情報がほとんど無い
n 製品レベルで公開されているのはOpenSparcくらい
OpenSPARCだ!n UltraSPARC T1/T2プロセッサo 4つのスレッドを同時実行できる。n 例えば ’define TREHAD 4 を変えたら8つ同時とかできそう!
OpenSPARC. T1 Microarchitecture Specificationのp2-7
Verilogの紹介まとめ
o 規格がしっかりあります
o LSI作るの大変ですn FPGAならなんでもできる
o 並列動作が記述できる
o OpenSPARCもほとんど決め打ち
抽象度が高い記述ができないから、開発大変だよ!
アジェンダ
o 自己紹介o Verilogの紹介n VHDLn OpenSparcだ!
o ちょっと未来の言語n SystemVerilogn SystemC
o 未来の言語n HW記述n リコンフィグn CPUカスタマイズn コプロの自動生成n ルールベースn 成功事例
ちょっと未来の言語の紹介
o SystemVerilogn IEEE Standard 1800-2005n Verilog2005からの差分で約586ページo Verilog2005はVerilog2001からの差分で441ページ
o Verilog2001は778ページ
o SystemCn IEEE Std. 1666™-2005n C++からの差分で約400ページ
SystemVerilog(ちょっと未来)o オブジェクト指向(Javaっぽい)o 基本的にはシミュレーション部分の強化o string データ型をサポート!o 乱数生成の標準化 約50ページn Section 12 Random Constraintsn ランダム検証で使用
o アサーションの標準化 約60ページn Section 17 Assertionsn Section 28 SystemVerilog Assertion APIn もともと別言語を標準に取り込む
o カバレッジの標準化 約30ページn Section 20 Coverage.n Section 29 SystemVerilog Coverage API
ランダム検証o 入力をランダムに行い、期待値との比較を行う。
n 数値演算系n 通信系n マルチタスク
Prog1 Prog2 Prog3
数値計算
通信ポートの制御
画像処理
アクセスをランダムに混ぜる
SystemVerilogの乱数
class Bus;
rand bit[15:0] addr;
rand bit[31:0] data;
constraint word_allign {addr[1:0] == 2’b0;}
endclass
bus.randomize();
bus.randomize() with {10 <= addr && addr <= 20};
bus.randomize() with {data & (data – 1) == 0}; //dataが2のべき乗
o 基本動作
SytemVerilogの乱数o 重み(distribution)n x dist {100 := 1, 200:= 2, 300 := 5}o 100 200 300 の比率が 1:2:5
n x dist {[100:102] := 1, 200 := 2, 300 := 5}o 100 101 102 200 300 の比率が1:1:1:2:5
n x dist {[100:102] :/ 1, 200 := 2, 300 := 5}o 100 101 102 200 300 の比率が 1/3:1/3:1/3:2:5
o 周期(random-cyclice)n randc bit[1:0] y;o [0→3 →2 →1] → [2→1→3→0] → [2→0→1→3]o 全パターンを発生させてから、次のパターンに移る
SystemVerilogの乱数o 常に大きくなる乱数
n constraint sort { if (next != null) n < next.n;}o 配列の乱数生成にforeach
n rand int A[];n constraint c1 {foreach (A[i]) A[i] > 2 * i;}
o 配列の各要素は、インデックスの2倍より大きいo 複雑な制約
n constraint c1 { (x < y || a.x > b.x || a.x == 5) -> x+y == 10;}
o 仕様では、解が存在する場合必ず乱数の組を返すことを処理系に求めている。
乱数を入力した結果の確認はどうするの?
SystemVerilogのアサーションo 即時アサーションn assert(a>0);
o 並列アサーションn assert property (@(posedge clk) a ##1 b);o aが1になって、次のクロックでbも1になる。
n assert property (@(posedge clk) a |=> b ##2 c)o aが1になって、次のクロックでbが1になり、2クロック後にcが1になる。
n assert property (@(posedge clk) a |=> b ## [2:5] c);o aが1になって、次のクロックでbが1になり、2から5クロック後にcが1になる。
o disable iffでアサーションを無効にできる。o $past()で過去の値を参照できる
SystemVerilogのアサーション
o アサーションに名前をつけられるn sequence qAB2 (x, y); x ##1 y; endsequenceo sequence endsequenceで囲むo 引数も使用できる
o アサーション同士の演算が定義されているn S1 ##1 S2 S1が終わった次のクロックでS2がスタートn S1 or S2 S1またはS2のどちらかが成立する。n S1 and S2 S1とS2が両方発生するn S1 intersect S2 長さが同じS1とS2が両方発生する。
SystemC(ちょっと未来)
o C++のクラスライブラリとして提供n 実態はシミュレータoシステムの性能評価をいち早くできる。
oVerilogを知らなくてもシステム設計ができる。o高価なシミュレータ不要
n 未来言語への大きな一歩
n SystemCはシミュレーションがはやーい!n 検証系は言語仕様とは別にライブラリとして提供
【軍曹が】携帯電話開発の現状【語る】@プログラマ板 後編に登場
o 397 名前:YRP常駐from群馬 投稿日:04/08/03 02:5
画期的なシミュレーション・システムは、半年後にハードディスクを増設してから利用する事になり、暫くの間はその存在を忘れる事ができた。ハード部門の中尉が「半年後にはSystem-Cを使ったハード・ソフト協調設計を是非とも提案したいと思います」と言っていたが、誰も耳を傾けなかった。ハード屋に読めるようにC言語を歪めるつもりなのだろう、と俺は解釈した。
俺たちはICEの増設を求めていたが、半年後にUNIXマシンのハードディスクを100GB程度増設する計画の前に、ICEのレンタル費用が早くも削減されてしまった。長引く開発の中で、ハード部門とソフト部門の勢力争いがろくな結果をもたらさない。
結局、俺たちは低レベルなICEの奪い合いに明け暮れるのであった。そして、昨年の長かった夏が過ぎ、秋を迎えた。依然、帰れる見通しは立たない。上等兵達は半年以上も里に帰っていなかった。
Verilogは変数が4値
o 普通の言語は1bitが2値(1 or 0)o Verilogは4値(1,0,X,Z)nZはHi-Z(ハイインピーダンス)o電気的に切り離された状態
oLSIの外側のシミュレーションで使用する。oPCIバスとか
nXは不定o初期化していない状態
oXを代入することもできる
ちょっと未来の言語まとめ
o SystemVerilogn オブジェクト指向
n 検証用の機能が充実o乱数生成、アサーション、カバレッジ
o SystemCn C++でHWの動作を記述できるn シミュレーションが安い!速い!
アジェンダ
o 自己紹介o Verilogの紹介n VHDLn OpenSparcだ!
o ちょっと未来の言語n SystemVerilogn SystemC
o 未来の言語n HW記述n リコンフィグn CPUカスタマイズn コプロの自動生成n ルールベースn 成功事例
未来の言語 HW生成
o Cでアルゴリズムを書くとVerilogに変換する。o Verilogの置き換えを目標o 検証の手間が大幅に削減できるn ランダムの生成n テキスト処理n OS/アプリの機能が使える。o 動画の表示o ネットワークのモニタリングo FPGAプロトとの接続
o 人的リソースを集めやすい
未来の言語 リコンフィグプロセッサ
o 動作中に自分自身のHWを書き換えるプロセッサ
o CPUとの組み合わせで使用する。n CPUによって処理が重たい所をHW化する。n HWで処理しにくいところをCPUが担当する。
o ソフトとハードウェアの分担は手で行う
DFC Compilero HPEC 2005での発表資料
n C-Based Hardware Design Platform for a Dynamically Reconfigurable Processor
n 「DFC compiler」 で検索
未来の言語 CPUカスタマイズ
o Cソースに合わせて、自動的にCPUをカスタマイズする。
n アプリケーションに特化した専用命令の追加
n カスタマイズされたCPU専用のgccが自動的に作られる。
私のプログラムに最適なパイプラインを作りなさい。
未来の言語 Xtensa LX
http://www.tensilica.co.jp/html/xpres.htmlVerilog ISS
gcc
未来の言語:コプロの自動生成
o Cソースの一部を自動的にHW化n アクセラレータの自動生成
n HW化しなくてもそのままCPUで実行出来る
o FPGAをターゲットにしている物が多く、若干安い。n IDE上でしか使用できないn 作成されたコプロに移植性無し
未来の言語 Triton tools
http://www.poseidon-systems.com/interface_xilinx.pdf
未来の言語 Triton tools
http://www.poseidon-systems.com/builder_xilinx.pdf
未来言語 ルールベース
o そもそもCはHW記述向きではないo どんな言語が良いのかn 変数とか無い方が良いよ!o 代入が無いとパイプライン組みやすい
n プログラムカウンターも無い方が良いよ!
n 見た目よりも複雑な事をやっているのも駄目
n 再帰も嫌です><o 繰り返しは固定長で。
o 終了の判断はCPUでするとか・・・・
例えばErlang
http://ffdic.wikiwiki.jp/?%A5%AD%A5%E3%A5%E9%A5%AF%A5%BF%A1%BC%2F%A4%B5%B9%D4
Erlang
SystemC
ErlangのプログラミングモデルはHWにかなり近い。
AutoESLに注目!
o http://www.autoesl.com/o C/C++/SystemCに対応o Intelが採用/Microsoftも注目n パーサの質が高く、C++の機能をかなり使えるらしい。
o 求む情報><
未来のHW記述言語が普及する条件o CPUで変更無しで動くことn 自動分割は大事n 最悪CPUでそのまま動くn 人的リソースを確保しやすい
o C/C++以外でブレークするか?n 背景にある理論のアルゴリズムが、別の言語で書かれていたら・・・
n MatlabやらMathmaticaから直接変換ができたら・・・n いろんな言語になれている人たちが、決裁権を持つようになったら・・・
o 今の所Cが無難かな・・・
未来言語が切り開く夢
専用計算機の将来――GRAPEの挑戦http://grape.mtk.nao.ac.jp/~makino/papers/grape_comptoday02
09web/node6.html
o FPGAによって少なくともコスト的には小規模な専用計算機の開発は多くの人の手の届くものになったにもかかわらず、なかなか科学技術計算への応用は進んでいないように思う。上にみたように、専用計算機が有効であるためには様々 な条件があることは確かだが、そういった条件を満たす問題は決して少なくはない。これを読んで、やってみようと思う人がでれば幸いである。