計算機構成 第3回 データパス:計算をするところ テキスト14‐19、29‐35

Slides:



Advertisements
Similar presentations
プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
Advertisements

計算機工学特論A 10/17  テキスト内容 1.1~1.4.
VLSI設計論第4回 アキュムレータマシンと 仮遅延シミュレーション
計算機システムⅡ 主記憶装置とALU,レジスタの制御
5.3 各種カウンタ 平木.
数値計算及び実習 第3回 プログラミングの基礎(1).
実行時のメモリ構造(1) Jasminの基礎とフレーム内動作
Verilog HDL 12月21日(月).
5.チューリングマシンと計算.
テープ(メモリ)と状態で何をするか決める
5.チューリングマシンと計算.
コンパイラ 第9回 コード生成 ― スタックマシン ―
オリジナルなCPUの開発 指導教授:笠原 宏 05IE063 戸塚 雄太 05IE074 橋本 将平 05IE089 牧野 政道
計算機構成 第7回 サブルーチンコールとスタック テキストp85-90
計算機システムⅡ 命令セットアーキテクチャ
VLSI設計論第2回 組み合わせ回路の記述と 論理シミュレーション
4.2.2 4to1セレクタ.
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
2016年度 プログラミングⅠ ~ 内部構造と動作の仕組み(1) ~.
2005年11月2日(木) 計算機工学論A 修士1年 No, 堀江準.
第7回 2006/6/12.
計算機工学特論A 第4回 論理合成 山越研究室 増山 知東 2007年11月7日 .
VLSI設計論 慶應義塾大学 理工学部 情報工学科 山﨑 信行
計算機入門I ハードウェア(1) 計算機のハードウェア構成 ~計算機のハードウェアとは何か~
ハードウェア記述言語による 論理回路設計とFPGAへの実装 2
計算機構成 第1回 ガイダンス VerilogHDLのシミュレーション環境
第7回 条件による繰り返し.
OpenMPハードウェア動作合成システムの検証(Ⅰ)
勉強会その3    2016/5/1 10 8分35秒 データの表現 演算.
コンピュータ系実験Ⅲ 「ワンチップマイコンの応用」 第1週目 アセンブリ言語講座
アルゴリズムとプログラミング (Algorithms and Programming)
第7回 条件による繰り返し.
第6回 6/4/2011 状態遷移回路とシングルサイクルCPU設計
計算機構成 第6回 分岐命令とプログラムの実行 テキスト第5章
第二部  回路記述編 第3章 文法概略と基本記述スタイル 3.1 文法を少々 3.1.1~3.1.3.
ディジタル回路の設計と CADによるシステム設計
計算機構成 第2回 ALUと組み合わせ回路の記述
計算機構成 第4回 アキュムレータマシン テキスト第3章
VLSI設計論第3回 順序回路の記述と論理合成
計算機構成 第8回 POCOの構造とVerilog記述 テキスト第5章-第6章
計算機構成 第11回 マルチサイクルCPU 慶應大学 天野英晴.
計算機構成 第5回 RISCの命令セットアーキテクチャ テキスト第4章
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
情報とコンピュータ 静岡大学工学部 安藤和敏
先週の復習: CPU が働く仕組み コンピュータの構造 pp 制御装置+演算装置+レジスタ 制御装置がなければ電卓と同様
プログラムの基本構造と 構造化チャート(PAD)
坂井 修一 東京大学 大学院 情報理工学系研究科 電子情報学専攻 東京大学 工学部 電気工学科
  第3章 論理回路  コンピュータでは,データを2進数の0と1で表現している.この2つの値,すなわち,2値で扱われるデータを論理データという.論理データの計算・判断・記憶は論理回路により実現される.  コンピュータのハードウェアは,基本的に論理回路で作られている。              論理積回路.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
コンピュータアーキテクチャ 第 9 回.
計算機工学特論 スライド 電気電子工学専攻 修士1年 弓仲研究室 河西良介
コンピュータアーキテクチャ 第 2 回.
計算機アーキテクチャ1 (計算機構成論(再)) 第一回 計算機の歴史、基本構成、動作原理
2013年度 プログラミングⅠ ~ 内部構造と動作の仕組み(2) ~.
2017年度 プログラミングⅠ ~ 内部構造と動作の仕組み(1) ~.
コンピュータアーキテクチャ 第 3 回.
5.チューリングマシンと計算.
コンピュータアーキテクチャ 第 2 回.
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語 1.
コンピュータアーキテクチャ 第 5 回.
ウェブデザイン演習 第6回.
計算機アーキテクチャ1 (計算機構成論(再)) 第二回 命令の種類と形式
コンピュータアーキテクチャ 第 4 回.
第4回 CPUの役割と仕組み2 命令の解析と実行、クロック、レジスタ
コンピュータアーキテクチャ 第 5 回.
プログラムの開発手順 1.プログラム設計(仕様の決定) 2.コーディング(ソースファイルの作成) 3.アセンブル(オブジェクトファイル
コンピュータ工学基礎 マルチサイクル化とパイプライン化 テキスト9章 115~124
2014年度 プログラミングⅠ ~ 内部構造と動作の仕組み(1) ~.
プログラミング入門2 第5回 配列 変数宣言、初期化について
情報処理Ⅱ 第3回 2004年10月19日(火).
Presentation transcript:

計算機構成 第3回 データパス:計算をするところ テキスト14‐19、29‐35 計算機構成 第3回 データパス:計算をするところ テキスト14‐19、29‐35 情報工学科 天野英晴

ALUで色々な演算ができる しかし、2つの入力データに限定される X+Y 110 A B Y S X Y

たくさんALUを使う方法 →大変だし一般性がない X+Y-W+Z 111 A B Y S X+Y WーZ 110 A B Y S 111 A B Y S X Y W Z

レジスタへのデータの書き込み 途中結果を蓄えるためにレジスタを導入 レジスタ=D.F.Fの集合 clk レジスタ clk 新しいデータ 入力データ 書き込み 書き込み 書き込み Q D Q Q D Q Q D Q … clkの立ち上がり(立下り)に同期して書き込む →CPUの状態はclkに同期して変化する D D D

レジスタの利用 S B ACCの内容 001 X 110 Y X+Y 111 W X+Y-W Z X+Y-W+Z A B Y S clk 結果を蓄えるレジスタ

メモリの構成 ACCを使った構造も万能ではない→ (SL X)+(SL Y)はうまく行かない メモリに、入力データ、中間結果を溜めておくためのメモリ DO 幅 n メモリは幅wbit, 深さ2 この例はw=16, n=8 1 8 深さ2 =256 (本当はもっとずっと多数のデータを 格納する) 2 Address 8bitならば … 255 DI clk we メモリのモデル

メモリからの読み出し 1100101010100001 DO 幅 1 1100101010100001 Address=1ならば1のところに格納 された11001010がDOから読み出される 2 Address 1 … 256 DI clk we メモリのモデル

メモリへの書き込み DO 幅 1 we=1の時、Address=2 ならば2番地に clkが0→1の変化時にDIからの値が 書き込まれる 1 we=1の時、Address=2 ならば2番地に clkが0→1の変化時にDIからの値が 書き込まれる タイミングはレジスタと同じ 2 1100101010100001 Address 2 … 256 DI clk we=1 1100101010100001 メモリのモデル

メモリ付きのデータパスでの計算 (p.18 例題2-3) 0番地にX、1番地にYが入っている X+Yを計算して2番地に格納せよ we com Address 0 001 00000000 0 110 00000001 1 000 00000010 001 THB com A B Y S clk ACC Address … clk we

メモリ付きのデータパス 0番地にX、1番地にYが入っている X+Yを計算して2番地に格納せよ we com Address 0 001 00000000 0 110 00000001 1 000 00000010 110 ADD com A B Y S + clk ACC 1 Address … clk we

メモリ付きのデータパス 0番地にX、1番地にYが入っている X+Yを計算して2番地に格納せよ we com Address 0 001 00000000 0 110 00000001 1 000 00000010 000 THA com A B Y S + clk ACC 2 Address … clk we=1

メモリ付きのデータパス (p.18 例題2-4) 0番地にX、1番地にYが入っている (SL X)+(SL Y)を計算して2番地に 格納せよ we com Address 0 001 00000000 0 100 00000000 1 000 00000010 0 001 00000001 0 100 00000000 0 110 00000010 1 000 00000010 com A B Y S clk ACC Address … clk we

命令の形にする 0番地にX、1番地にYが入っている X+Yを計算して2番地に格納せよ 操作を表す部分:op-code we com Address 0 001 00000000 0 110 00000001 1 000 00000010 操作を表す部分:op-code オプコード 操作対象を表す部分:operand オペランド 分かりやすい記号で書く:ニーモニックと呼ぶ 0000 NOP 0001 LD ( Load)メモリからACCにデータを読み込む 0010 AND  0011 OR 0100 SL この時はオペランドは何でも良い 0101 SR この時はオペランドは何でも良い 0110 ADD 0111 SUB 1000 ST (Store)メモリへACCからデータを書き込む

プログラムの形にする 0番地にX、1番地にYが入っている X+Yを計算して2番地に格納せよ we com Address 0 001 00000000   LD 0 0 110 00000001   ADD 1 1 000 00000010   ST 2 0番地にX、1番地にYが入っている (SL X)+(SL Y)を計算して2番地に 格納せよ we com Address 0 001 00000000 LD 0 0 100 00000000 SL  1 000 00000010 ST 2 0 001 00000001 LD 1 0 100 00000000 SL 0 110 00000010 ADD 2 1 000 00000010 ST 2 機械語 アセンブラ表記

rst_nが0になると初期化(非同期リセット) レジスタのVerilog記述 宣言 reg [15:0] accum; assign accout = accum; always @(posedge clk or negedge rst_n) begin if(!rst_n) accum <= 16’b0; else accum <= alu_y; end 読み出し クロックの立ち上げ同期して書き込み rst_nが0になると初期化(非同期リセット)

always文 always @(posedge clk or negedge rst_n) begin initial文は最初の一回のみ実行され、通常テストベンチにのみ用いる always文は@以下の条件が成り立つときに常に実行される posedge 立ち上がり negedge 立ち上がり or, and はここだけで使う特殊な条件指定論理 決まった形式以外は使わない! always @(posedge clk or negedge rst_n) begin if(!rst_n) accum <= 16’b0; else accum <= alu_y; end レジスタに対する値の書き込みは<=を使って always文の中で行う always文中ではif文やcase文が使える なぜか? レジスタに対する代入だから→プログラム言語の変数と同じで代入されない場合の値が決まっている

we=1の時のクロック立ち上がりでデータの書き込み メモリの記述 幅16ビット、深さ256のメモリ宣言 reg [15:0] dmem [0:255]; assign do = dmem[daddr]; always @(posedge clk) if(we) dmem[daddr] <= ddataout; 2番地の上位8ビットは? dmem[2][15:8] メモリは通常、合成の対象としない→テストベンチで記述 アドレスdaddrからのデータ読み出し we=1の時のクロック立ち上がりでデータの書き込み

データパスのVerilog記述 com A B Y S この部分を datapath で記述 clk ACC Address メモリはテストベンチに 記述 … clk we

データパスのVerilog記述 module datapath( input clk, input rst_n, input[15:0] datain, input [2:0] com, output[15:0] accout); reg [15:0] accum; wire [15:0] alu_y; assign accout = accum; alu alu_1( .a(accum), .b(datain), .s(com), .y(alu_y)); always @(posedge clk or negedge rst_n) begin if(!rst_n) accum <= 16’b0; else accum <= alu_y; end ALUを実体化 アキュムレータへのかきこみ

テストベンチのVerilog記述1 メモリの宣言 clkの生成 データパスの実体化 `timescale 1ns/1ps module test; parameter STEP =10; … reg[15:0] dmem[0:255]; always @(posedge clk) begin if(we) dmem[addr] <= accout; end always #(STEP/2) begin clk <= ~clk; datapath datapath_1(.clk(clk), .rst_n(rst_n), .com(com), .datain(dmem[addr], .accout(accout)); …. メモリの宣言 clkの生成 データパスの実体化

テストベンチのVerilog記述2 initial begin … $readmemh(“dmem.dat”,dmem); $readmemb → 2進数でファイル中にデータを書く $readmemh→16進数でファイル中にデータを書く {we,com,addr}<= {`DISABLE,`ALU_THB,`ADDR_W’h00}; 連結、バス化 {X,Y,Z} まとめてバスとして扱える 右辺にも左辺にも使える

演習課題 35ページ演習2-9 35ページ演習2-10 1から6まで数えて、stop入力で停止するサイコロdiceを設計せよ Aを0番地、Bを1番地のデータとして(SR A) OR (SR B)のデータを2番地にしまう命令の実行をシミュレーションせよ 35ページ演習2-10 A,Bを上記と同じとし、(A+B) OR (A-B)の結果を2番地にしまう命令の実行をシミュレーションせよ 1から6まで数えて、stop入力で停止するサイコロdiceを設計せよ