ハードウェア記述言語の今と未来natu.txt-nifty.com/natsutan/files/_.pdfverilogの特徴...

48
ハードウェア記述言語の今と未来 未来言語2009

Upload: others

Post on 04-Mar-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

ハードウェア記述言語の今と未来

未来言語2009

アジェンダ

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 最終生成物(実行ファイル相当)は半導体

LSIができるまで

o 仕様決定

o Verilogコーディングo シミュレーション

o 論理合成(コンパイル)

o 配置配線

o 製造(1ヶ月、数千万~数億円)

夢のデバイス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くらい

VerilogのConcurrentについて

o VerilogのConcurrentは少し違う

a,bの両方が0になるか、両方が1になる。

clk

ab 0

00

00

11

11

1

パイプラインの例

o Nios2 の命令パイプライン

OpenSPARCだ!n UltraSPARC T1/T2プロセッサo 4つのスレッドを同時実行できる。n 例えば ’define TREHAD 4 を変えたら8つ同時とかできそう!

OpenSPARC. T1 Microarchitecture Specificationのp2-7

OpenSPARCのプログラムカウンター

o どう見てみても決め打ちです。ありがとうございました。

sparc_ifu_fdp.v

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が両方発生する。

カバレッジについて

Modelsim user’s manual 6.4a P50fsm:状態遷移

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の奪い合いに明け暮れるのであった。そして、昨年の長かった夏が過ぎ、秋を迎えた。依然、帰れる見通しは立たない。上等兵達は半年以上も里に帰っていなかった。

FPGAの早さo OpenSPARC Internals から

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 NOT

o AND

o OR

A Not A

X X

A B A and B

1 X X

0 X 0

A B A or B

1 X 1

0 X X

ちょっと未来の言語まとめ

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 成功事例

未来の言語

o HW生成o リコンフィグ

o CPUカスタマイズo コプロの自動生成

o ルールベース

o 成功事例

未来の言語 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 DAPDNAの記述ができる

n 公開されている資料は少ないn 1000speakers 第5回で発表あり

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にかなり近い。

未来の言語 Bluespec

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によって少なくともコスト的には小規模な専用計算機の開発は多くの人の手の届くものになったにもかかわらず、なかなか科学技術計算への応用は進んでいないように思う。上にみたように、専用計算機が有効であるためには様々 な条件があることは確かだが、そういった条件を満たす問題は決して少なくはない。これを読んで、やってみようと思う人がでれば幸いである。