verilog hdlによるシステム開発と設計 共立出版...

Post on 02-Feb-2020

8 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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 高橋隆一

top related