verilog hdlによるシステム開発と設計 共立出版...
TRANSCRIPT
高橋隆一 :
Verilog HDLによるシステム開発と設計
共立出版 (2008)
講義用スライド(ppt) Ver1.0
第1章 ハードウエアを記述するということ
高橋隆一 :
Verilog HDLによるシステム開発と設計
共立出版 (2008)
DDL(1968)によるオートマトン記述
DDLは 1968にJ.R.Duley D.L.Dietmeyerによって提案されたオートマトン記述
P1への状態遷移<TE> REQ_PFU.<ST>
P0 : RAM(REQ_PFU=1), =>P1;P1 : ACK_PFU : OP<- DATA[11:9],ADR<-DATA[7:0],
↑PC,=>P2;
オペコードとアドレスをセットPCをインクリメント
各状態にRTオペレーション(レジスタ間転送)
を列挙して次の状態を指定する
教科書 P.10
DDL(1968)によるオートマトン記述
<TE> REQ_PFU.<ST>
P0 : RAM(REQ_PFU=1), =>P1;P1 : ACK_PFU : OP<- DATA[11:9],
古典的なオートマトン記述(DDL)では
端子(<TE>)への代入を許していた
イベントが発生する
アクノレッジを受け取る
教科書 P.10
SSMDによるオートマトン記述SSMDは City-1(1996-2008)で筆者が工夫した
Verilog HDLによるオートマトン記述
always@(posedge CLK or posedge RESET)
REQ_PFU=1; STATE<= `P1; end
OP=DATA[11:9]; ADR=DATA[7:0];
PC=PC+1; STATE<= `P1; end
`define P0 2’b00`define P1 2’b01
begin : state_machineif (RESET) STATE<= `P0;
beginelse
case (STATE)`P0 : begin`P1 : begin
if (ACK_PFU) begin各状態にRTオペレーションを
列挙して次の状態を指定する点
はDDLと同じオートマトン記述
P1への状態遷移
SSMDによるオートマトン記述
always@(posedge CLK or posedge RESET)
REQ_PFU=1; STATE<= `P1; end
OP=DATA[11:9]; ADR=DATA[7:0];
PC=PC+1; STATE<= `P1; end
`define P0 2’b00`define P1 2’b01
begin : state_machineif (RESET) STATE<= `P0;
beginelse
case (STATE)`P0 : begin`P1 : begin
if (ACK_PFU) begin
オートマトン間の通信は
組合せ回路で表現する
REG_PFUはFFにする
assign ACK_PFU = REQ_PFU&& (~REQ_EXU || Priority_PFU);
教科書 P.14
通信を組合せ回路で表現した例
組合せ回路で表現できる背景
Prefetch unit Arbiter
REQ_PFU
ACK_PFU
REQ_EXU
Priority_PFU
assign ACK_PFU = REQ_PFU && (~REQ_EXU || Priority_PFU);
教科書 P.14
第2章 Verilog HDLの基本
高橋隆一 :
Verilog HDLによるシステム開発と設計
共立出版 (2008)
Verilog HDLはどのような言語か
8 bitの全加算器の記述
module adder (A, B, CARRY_IN, SUM, CARRY_OUT);
input CARRY_IN;output [7:0] SUM;
input [7:0] A, B;
output CARRY_OUT;
assign {CARRY_OUT, SUM}=A+B+CARRY_IN;
endmodule
Verilog HDLの記述単位はモジュール
moduleで始まり
endmoduleで終わる
教科書 P.21
数
8’b11001101
基数の指定がないときは10進数と見做される
対応する2進数<サイズ> ’<基数> <数>
10進数でのみd, h, b, o のいずれか
D, H, B, O でも可0, 1, 2, …9, a, b, c, d, e, fA, B, C, D, E, Fでも可
O(8進数)なら7まで
16’h0AC111001101
00000111
1010110000014’d7
プログラムカウンタのインクリメントは
PC = PC + 1;
教科書 P.23
不定値とハイ・インピーダンス
0, 1 の他に
x 不定値( 0でも1でもあり得る )
z ハイ・インピーダンス(非常に大きな抵抗値)
z接続していないのと同じ
を用いることができる
inout [7:0] DATA_BUS_EXT;parameter Z = 8’hzz;
wire [7:0] DATA_BUS_EXT=(DATA_BUS_OUT)? DATA_BUS : Z;
双方向バスの宣言
8ビットのハイ・インピーダンス値
DATA_BUS_OUTがゼロなら接続していないのと同じになる
このとき外部からの読み出しが行える
教科書 P.37
always文による全加算器の記述
module adder (A, B, CARRY_IN, SUM, CARRY_OUT);
input CARRY_IN;output [7:0] SUM;
input [7:0] A, B;
output CARRY_OUT;
reg [7:0] SUM;reg CARRY_OUT;
always@(A or B or CARRY_IN)begin
end{CARRY_OUT, SUM}= A + B + CARRY_IN;
always文は
レジスタ reg にしか
使えない!
endmodule
すべての入力を列挙していれば
組合せ回路が合成される
Verilog HDLの一番分かりにくい点
教科書 P.29
SSMDではRTオペレーションも書いてしまう
reg [2:0] STATE; reg [7:0] A,B,C;parameter P0 = 3’b000;parameter P1 = 3’b001;
:
P0 : A=A+1; B=8’h0A; STATE <= P1;P1 : C=A+B; STATE = P2;
:
always @(posedge CLK or posedge RESET_N)if (!RESET_N) begin
STATE <= P0; A=8’b0; B=8’b0; C=8’b0; end
case( STATE )else begin
各状態にRTオペレーションを列挙する
RTオペレーション
も列挙する
SSMDはVerilog HDLによるオートマトン記述
(NEC時代の研究が背景)
City-1大成功の秘訣
教科書 P.44
状態遷移だけでなく
アルゴリズムも記述できる
ユークリッドの互除法を記述した例
always @(posedge CLK or posedge RESET)begin : state_machine
`define P0 3’b000
reg [2:0] STATE;
begincase (STATE)
`P2 : beginif ( R!= 8’h00 )
:
:
end
beginR=A%B; A=B; STATE<= `P3;
else STATE<= `P4;
:
end
専用マシンが合成される
教科書 P.34
下位モジュールの呼び出しポートの順番を一致させる方法(RISC-3)
:execution_unit EXU(RESET, HALT,
DECODED_OPCODE,OPERANDS,DECODED_OPCODE_READY,DATA_ADDRESS_BUS, DATA_BUS_EXT,REG0, REG1, REG2, REG3,REG0_OUT, REG1_OUT, REG2_OUT, REG3_OUT,CLOCK1, DATA_MEM_READ, DATA_BUS_OUT, FR );
:
module central_processing_unit(RUN, RESET, HALT,
endmodule
module execution_unit(RESET, HALT,DECODED_OPCODE,OPERANDS,DECODED_OPCODE_READY,DATA_ADDRESS_BUS, DATA_BUS,REG0, REG1, REG2, REG3,REG0_OUT, REG1_OUT, REG2_OUT, REG3_OUT,CLOCK1, DATA_MEM_READ, DATA_BUS_OUT, FR_FORWARD );
名前が異なっていても対応付けられる
教科書 P.37
第3章 命令解釈実行サイクル
高橋隆一 :
Verilog HDLによるシステム開発と設計
共立出版 (2008)
フォンノイマン型(プログラム内蔵方式)
・主記憶が0番地,1番地,・・・と線形なアドレスをもつ
・命令は主記憶に格納されている
・アーキテクチャが固定されている
・命令が主導権をもってデータの意味を決める
・プログラムカウンタが存在して逐次的に処理が進む・命令の解釈実行は制御信号によって駆動される
・動作は決定的である
教科書 P.63
主記憶
プログラム
カウンタ(PC)
命令レジスタ(IR)
デコーダマイクロ命令
アドレスレジスタ
(CSADR)
制御メモリ
(CS)
シーケンサ
REG0 REG1 REG2外部バス 内部バス
制御部
データパス
命令キュー
REG2=REG0+REG1
+
コンピュータの仕組み
CISC-1 (1996)では水平型のマイクロ
プログラムを結線論理制御で発生教科書 P.56
結線論理マイクロコードマシン(結線論理マイクロコードマシン(HMHM22))
DataData--pathpathinformationinformationControl Control
signalssignals
Microinstruction registerMicroinstruction register CS address registerCS address register
CombinationalCombinationallogic circuitlogic circuit
CISC-1とディジタル信号処理専用マシンで比較
最 大 パ ス 遅 延 [ns]
専用マシン非HM2
専用マシンHM2
CISC-1非HM2
CISC-1HM2
12%減少
10%減少
たたみ込み専用マシン : 制御部の遅延が僅かに上回った
CISC-1 : 制御部の遅延がデータパスの遅延に隠れた
HM2の評価結果(卒業研究) 教科書 P.33
非HM2での制御レジスタのビット幅は log2(「状態数」)
第4章 パイプライン化
高橋隆一 :
Verilog HDLによるシステム開発と設計
共立出版 (2008)
RISC-3 教科書 P.62
ステージングラッチ
前のステージの
結果であり
次のステージの
入力となる
データ依存関係 教科書 P.76
真の依存(true dependency)先行する命令が書き込む結果を後続する命令が使う
出力依存(output dependency)先行する命令が書き込む記憶領域を後続する命令が書き改める
逆依存(antidependency)先行する命令が読み出す記憶領域を後続する命令が書き改める
ハザード(data-dependent hazard) 教科書 P.77
RAW(read after write hazard)書き込みの後にこれを読むという順序が崩れる危険
WAW(write after write hazard)書き込みの後にもう一度書くという順序が崩れる危険
WAR(write after read hazard)読み出しをしてから書き込むという順序が崩れる危険
ハザードを検出して回避する機構が
パイプライン・インターロック
RISC-3のインターロック 教科書 P.66
比較命令をみつけるとフラグ・ビジーを立てる
if (INSTRUCTION_BUS[14] && FR_BUSY)
beginif (INSTRUCTION_BUS[13] )
FR_BUSY = 1’b1;:
さらに条件分岐の命令をみつけるとWAITに遷移する
begin
STATE<= ` WAIT;
:
end
SSMD(オートマトン記述)による
インターロックの書き方
RISC-3でのフォワーディング 教科書 P.73
reg型で宣言して
組合せ回路の記述をしている
if (DECODED_OPCODE[4]) // CPL
REG0 or REG1 or REG2 or REG3)always@(DECODED_OPCODE[4] or FR or
:
begin
2’b00: begin:
case(OPERANDS[9:8])begin
if (REG0>REG0) FR_FORWARD=2’b00;
else FR_FORWARD=FR;
比較命令でなければ
そのときの値を送っている
第5章 スーパースカラ
高橋隆一 :
Verilog HDLによるシステム開発と設計
共立出版 (2008)
空間並列 教科書 P.81
1クロックあたりに実行できる命令数(IPC)パイプライン段数を増やせばスループット,さらには
動作周波数を高めることはできるが
IPC=1という壁を破ることはできない
スーパースカラ
複数の命令をフェッチしてバッファに格納し,
可能なら複数の命令を同時に発行することで
IPC>1を実現
Pentium(1993)…i486の後継はスーパースカラだった
U-Pipe,V-Pipeという2本のパイプラインを持っていた
…英語での発音は「スーパースケイラ」
プロセッサのステート 教科書 P.83
アーキテクチャステート
Architecturalstate
ルックアヘッドステート
Lookaheadstate
REG1=…
REG4=…
REG5=…REG3=…REG2=…REG8=…
レ
レ
レ
REG5=…REG3=…REG2=…REG8=…
レ
REG1=…REG3=…REG4=…REG3=…REG5=…REG3=…REG2=…REG8=…
レ
レ
レレ
レ
REG1=…
REG4=…REG3=…
レ
レレ
命令列InstructionSequence In-order state
イン・オーダーステート
命令ウインドウでの結果を
イン・オーダーに書き戻す
レジスタファイルで実現可能
RISC-3FB4 structureInstructionMemory
DataMemory
Instruction Register
Prefetch
Reorder
Branch
Load/Store
Decoded Instruction Buffer-4
Decoded Instruction Buffer-2
Register File
Decoded Instruction Buffer-1
Decoded Instruction Buffer-3
教科書 P.84
Unit
Buffer Unit
Unit
Unit
FIRST UnitLASTNEXT
12 2
ALU-1
ALU-2
RISC-3FB4 structureInstructionMemory
DataMemory
Instruction Register
Prefetch
Reorder
Branch
Load/Store
Decoded Instruction Buffer-4
Decoded Instruction Buffer-2
Register File
Decoded Instruction Buffer-1
Decoded Instruction Buffer-3
教科書 P.84
Unit
Buffer Unit
Unit
Unit
3
5
4
6FIRST
UnitLAST
NEXT
456
ALU-1
ALU-2
RISC vs スーパースカラCISCレジスタ・リネーミング
相互結合網
レジスタの値を保持するバッファとALU間の結合網
インテルの最初のスーパースカラPentiumの
IA-32(x86)は8つしかレジスタをもたなかったが
レジスタを32個もつRISCを恐れなかったのは
数十のエントリがレジスタの役割を果たしたため
RISCでもCISCでもスーパースカラは高速化しようと
するほどデータフロー・コンピュータに似てくる
第6章 設計検証
高橋隆一 :
Verilog HDLによるシステム開発と設計
共立出版 (2008)
全称記号と存在記号
Rを実数の集合としたとき
∀x R
は「xに足すと0になる実数yが存在する」を意味する
∃y R [x+y=0]
教科書 P.96
を前につけた
∀x R ∃y R [x+y=0]
は「どんな実数xにも,足すと0になる実数yが存在する」
の意味になる
真な命題である
帰納的アサーション 教科書 P.98
フローチャートの切断点
カットポイントで成立しているべき述語
カットポイント
帰納的アサーション
すべてのループに少なくとも1つ割り当てる
プログラムは有限個の経路に分断される
「アサーション」とは「その点で成り立って
いるべき性質(プロパティ)」
SVA構成の指針が無く
記述に時間がかかる場合
SVAを用いた設計シミュレーションのみによる設計
マイクロアーキテクチャ設計のためのSVA
SVA構成の指針があり
短期間で記述できる場合
バグを多くみつけることのできるアサーションを書く
指針があれば,短期間で品質を向上させることができる
0 時間(日数)
累積バグ件数
0
累積バグ件数
時間(日数)
SVAを書いている期間
品質は向上しない
CISC-3から4段パイプラインへの改造(卒業研究)
改造時に用いたSVA
“$pastで1クロック前の値を参照
オペランドのフォワーディングが
行われたなら直前の書き込みは
メモリ上の同じアドレスに対して
だったことを検証した
SVA(スティミュラス)の例
【出典】
「RISCへの改造」と同じ
Ⓒ2011 高橋隆一