による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章...

160
による 設計入門 アイピー・アーク・インコーポレイテッド 「コンピュータ する演 ノート して した。 らびに および ユーザ ために する。 ファ イル って いが 、 らびに セミナー する。 してあり せて されたい。

Transcript of による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章...

Page 1: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による���設計入門第 ��� 版

清水 尚彦 著

米国法人 アイピー・アーク・インコーポレイテッド���� �������������� ����

����� ���������� ����

本書は筆者著「コンピュータ設計の基礎知識」共立出版を補完する演習ノートとして作成した。書籍読者ならびに ���および �����ユーザの便宜のために公開する。電子媒体 ��ファイル�の再配付は自由に行って構わないが、書籍・雑誌への本書内容の無断複製ならびに著作者に無断での有償セミナー等での利用を禁止する。演習内容は � ����� ����に収録してあり併せて利用されたい。

Page 2: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル
Page 3: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

目 次

第 �章 ���設計概要 �

��� ���設計の流れ � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �

����� 概念設計 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �

����� 階層設計 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �

����� 詳細設計 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

���� 論理検証 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

��� ハードウェア記述言語 ���概要 � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

����� ���の特徴 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

��� まとめ � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

第 �章 ���基礎演習 ��� �

��� はじめに � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

����� シミュレーション実行環境 � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

��� ���の基本構造 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

����� 共通動作記述 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �

����� 束線信号の記述 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

����� ��ブロックの動作 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �

���� ���ブロックの動作 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

����� ���ブロックの動作 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

����� 内部端子 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

����� 制御内部端子 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �

����� 制御入力端子 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

����� サブモジュール � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �

����� 制御出力端子 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

������ レジスタ � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

������ メモリ � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

������ ステージとタスク � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �

����� 状態遷移 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �

��� �����とシミュレーション実行スクリプト � � � � � � � � � � � � � � � � � � � � � � � �

����� シミュレーションスクリプト雛型 � � � � � � � � � � � � � � � � � � � � � � � �

Page 4: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門

第 章 ���基礎演習 ��� �

��� はじめに � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

��� モジュール間インターフェイス � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

����� 要求・応答モデル � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

����� ����インターフェイス � � � � � � � � � � � � � � � � � � � � � � � � � � � � �

��� クロック系の異なるモジュール間インターフェイス � � � � � � � � � � � � � � � � � ��

����� 相同期転送 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

����� �相同期転送 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �

�� 演算回路 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

���� 加算回路 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

���� 乗算回路 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

第 �章 ���と� �����による����設計演習 �

�� はじめに � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

�� 論理合成の試行 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

���� 簡単な論理回路 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

���� 加算回路 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

���� レジスタ転送を伴う加算回路 � � � � � � � � � � � � � � � � � � � � � � � � � ��

�� ���レイアウトの試行 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

���� 基本セル � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

���� 配置配線演習 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

���� 入出力セルとチップレイアウト � � � � � � � � � � � � � � � � � � � � � � � � ��

� 階層構造を持つ論理の合成�����プロセッサ ����の合成手順 � � � � � � � � � � � ��

�� レイアウトからの �����回路シミュレーション � � � � � � � � � � � � � � � � � � � �

�� まとめ � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

第 章 ���� ����による�言語連動シミュレーション演習 ���

��� はじめに � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ���

��� � �!���"�による論理シミュレーション � � � � � � � � � � � � � � � � � � � � � � � � ���

��� �言語との連動論理シミュレーション � � � � � � � � � � � � � � � � � � � � � � � � � ���

�� 順序回路シミュレーション � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ���

��� プロセッサシミュレーション例 � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

��� まとめ � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ���

第 �章 プロセッサ設計編 ��

��� はじめに � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ���

��� ����アーキテクチャ ���� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

����� プロセッサの基本動作 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

��� ����演習パッケージ � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ���

�� ����のハードウェア構成 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ���

��� ����の論理合成 #��$%をターゲットとした � �!�"&ベース合成' � � � � � � � � � ���

(( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 5: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門

��� おわりに � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

付 録� ���文法 ���

%�� ���言語構造 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

%�� 外部端子と構成要素 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

%�� 引数宣言 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

%� ステージ定義 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

%�� 制御端子動作記述 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

%�� 数値表現 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

%�� 演算子 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

%�� 内部端子とレジスタへの転送 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

%�� 複合文 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

%��ステージとステート � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

付 録� ���� ��文法 �

)�� 宣言 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ���

)�� インスタンス定義 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

)�� 数値表現 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

)� 演算子 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

)�� 連続代入文 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

)�� 動作記述 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ���

)�� 遅延制御 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ���

)�� 順次実行ブロック � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ���

)�� 手続き代入文 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ���

)�� 制御構文 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ���

)���システム関数とシステムタスク � � � � � � � � � � � � � � � � � � � � � � � � � � � � ���

(�( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 6: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル
Page 7: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

第�章 ���設計概要

加工技術の微細化にともない、���の集積度は年々向上しています。*�年代の ���設計では設計

者はレイアウトを直接記述していました。*�年代になって、配置配線をサポートする ��� �%+

が実用的に利用され、ゲートレベルの設計が行われました。*�年代から論理合成が使われレジス

タトランスファーレベル #�,�'言語による設計が主流となっています。近年、�,�では設計が困

難であるとして、再度新しい設計パラダイムが模索されつつあります。人の認識能力には規模の限

度があり、大規模な開発には必ず抽象度の高い設計階層が必要とされます。そこで、これらの設計

パラダイムの変化は複雑性に取り組むための必然的な流れと言えるでしょう。

*�年代から �,,において開発が進められてきた ���#���-.�-� / �-�.�!"��� / 0.�! �!"� ���1

&-�& 'は現在主流となっている � �!�"&や �2+�などの �,�言語に比較して抽象度が高く、大

規模開発に適した記述言語として今なお競争力を保っています。ところが、唯一の処理系であった

�,,の �%�,2����は商業提供を停止しており、国産の優れた記述言語であるにも関わらず国

内の利用は一部の大学の教育に限定されてきました。

これに対して �����と呼ぶ新しい ���処理系は、商用利用を含めた広範な利用が可能な上、���

言語で設計を行なった結果を � �!�"&に変換し、普及の進んだ � �!�"&による論理合成、論理シミュ

レーションを可能としました。�%�,2����で最も批判の大きかった商用利用の壁とライブラリ

の不足、論理シミュレーションのユーザーインターフェイスを解決するものとして期待されます。

このチュートリアルは自宅でも利用できる無償のツール類を用いて大規模な ���開発に適した ���

開発手法を経験していただくことを目的としています。

��� ���設計の流れ

���専業のベンダ以外の開発者にとって ���設計は高コストな開発案件です。「本当に設計する

必要があるのか?」と疑問を持たれる方も多いと思います。ところが、日本システムハウス協会の

調査では組み込みシステム開発の約半数はハードウェアの開発も必要となるとの結果が報告されて

います 3�4。適切なハードウェア開発はシステム全体の開発を容易にすることになりますし、簡単

にコピーできるソフトウェアと異なり製品の競争力の源泉にもなりえます。

さらに、��$%の集積度、スピードが向上して、マスク製造のコストやリーディングタイムを

必要としないハードウェア開発が十分実用的になっています。

図 ���に ���設計の流れを示します。���は概略設計の一部から検証の一部までの設計記述を守

備範囲とします。論理記述に特化し必要以上に欲張らないことで見通しの良い言語となっています。

検証のための仕様作成は設計者が行なうべき事項ですが、テストスクリプトと呼ぶテスト環境の整

備も論理検証で大きな工数が必要となります。���は並列記述が簡単に実現可能なハードウェア記

Page 8: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���設計概要

概念設計

ブロック図

タイムチャート

インターフェイス仕様

ブロック詳細設計

タイミング検証

論理シミュレーションタイミング検証

機能シミュレーションフロアプラン

論理合成

配置配線

実装設計

論理検証

機能検証

HDL記述

テスト仕様

SFL

テストスクリプト(Verilog, seconds) システムシミュレーション

図 ���� ���設計の流れ

述言語の特性より、テストスクリプトの記述の一部としても利用できます。実際の検証作業では ���

のモジュールを検証するためにさらにテストスクリプトを作成する必要があります。�%�,2����

ではテストスクリプトは独自のスクリプト体系を持つ 0 ."�/0と呼ぶ論理シミュレータの入力デー

タになります。�����ではテストスクリプトに � �!�"&言語を用います。

����� 概念設計

���設計の第一歩は全体機能の把握とブロック分割を中心とする概念設計です。この設計フェー

ズではフロアプランを検討し、概略の配線長とクリチカルパスのゲート数から概略遅延時間を見積

ります。

概念設計の成果物として次のようなドキュメントを作成します。

�� ブロック図

�� タイミングチャート

�� インターフェイス仕様書

開発規模が小さい場合、これらのドキュメント類は手書きでも十分でしたが、手書きのドキュメ

ントではクロスチェックが困難なためコンピュータで読める形式のドキュメント作成が望まれます。

また、仕様書と実現機能の不一致が開発の隘路となることがあるため、できれば仕様書がそのまま

機能を実現することが望まれます。

ブロック図やタイミングチャートは主として機能の概略設計のために用いますが、インターフェ

イス仕様書は詳細設計に入った後の拠り所となる仕様であり、慎重に設計する必要があります。イ

ンターフェイス仕様には信号名だけでなく、利用方法やタイミングまで規定する必要があります

(�( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 9: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� ���設計の流れ

F

ALU

AB C

D E

H L

SP

PC

MUX, DMUX

INC,DEC

OP0 OP1 OP2

CONTROL UNIT

RS232C INTERFACE

INTERNAL BUS

SYSTEM BUS

RAM ROM

DMUX

図 ���� ブロック図の例

クロック

プログラムカウンタ(PC) 0000 0001 0002 0003

命令メモリ読み出し

命令レジスタ(opreg)

レジスタ読み出し演算

汎用レジスタ

実行命令(0000)

演算結果書き込み

命令読み出し 実行 命令読み出し 実行

実行命令(0001)

命令読み出し

実行命令(0002)

命令メモリ読み出し 命令メモリ読み出し

レジスタ読み出し演算

レジスタ読み出し演算

演算結果書き込み 演算結果書き込み

図 ���� タイミングチャート図の例

が、最低限の情報としては入力、出力、制御の各信号の名前とビット幅、制御に付随するデータの

指定がされている必要があります。

���の構文の一つである �������文はインターフェイス仕様書の一部となり、モジュール間イ

ンターフェイスを規定することができます。図 ��の ����������モジュールのインターフェ

イスを定義する �������文の例を見てみましょう。

����������には入力信号として �ビットの �があり、出力信号として �ビットの ���があ

ります。また、回路を起動する制御入力端子として ���があり、制御入力を起動する場合には入

力信号 �に引数の値を転送することが示されています。�������文はインターフェイス仕様を定

義しているだけなので、設計初期の段階では中の実装は不明でもかまいません。

詳細な記述方法は基礎演習で演習しますが、図に示すように、���ではモジュールの制御端子

�����に引数 ���� ���を規定することができます。

(�( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 10: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���設計概要

SampleCircuit

In Out

Trig ?8

������� ���������� ����� ����������� ��������� ������������ ���� ����

図 ��� �������文の例題

����� 階層設計

複数のモジュールを階層的に用いることで設計の複雑さを大幅に緩和することができます。上位

のモジュールは設計の一部を切り分けて下位のモジュールを呼び出すように設計します。ソフト

ウェアと異なり、モジュール中で複数の下位モジュールを利用する場合には、それぞれ別々のハー

ドウェアが生成されます。

���では �������文によりモジュールを宣言すれば、そのモジュールをサブモジュールとして

制御端子を用いた動作記述が利用できます。図 ���は階層設計した ���記述の一部です。���は条

件実行を行なう構文で、

条件�実行文

と記述された複数の条件実行文の条件を同時に評価し、条件が真の実行文を全て並列に実行します。

��� ���� ����� ��!����"#""�!��������������� ��!�����������!�����

上位モジュール

サブモジュール

cirIn

Trig

Out value0x00

curval

initsetup

図 ���� 階層設計例題

条件 ��$ �����によって異なる引数 "#""$ ������を与えて、モジュールインスタンス名 ��

のサブモジュールの制御端子 ���を起動し、モジュール出力信号 ���を内部信号 �����に取り込

(�( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 11: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� ハードウェア記述言語 ���概要

んでいます。

この時、サブモジュールの内部の情報を上位モジュールが知っている必要がないことに注意して

ください。上位モジュールは制御端子 ���を起動したら結果が ���に出て来ることさえ知ってい

れば良いのです�。この特性を用いると、ブロック図にしたがって階層的にモジュールを分割した

ら上位モジュールからトップダウンで設計することができます。

下位モジュールが揃っていない場合には論理合成や検証に不便がありますが、下位モジュールの

代替モジュールを手続き型言語などで記述して全体設計を進めることもできます。

����� 詳細設計

詳細設計では実際に ���として動作する論理回路と論理回路をテストするためのテスト仕様を

作成します。モジュールの内部には状態遷移を行なう回路や内部制御回路などさまざまな回路が実

現されます。

����� 論理検証

論理回路もプログラムと同じく作成した回路に記述ミスや設計ミスが発生することがあります。

そこで、全体を統合して動作させる前に詳細設計したモジュールごとに小規模な論理検証が必要に

なります。

個別のモジュールの検証が進んだら、回路全体を接続したシステム検証も必要になります。シス

テム検証では通常ソフトウェアも合わせて検証することが求められ、長時間のシミュレーションが

必要になります。

��� ハードウェア記述言語���概要

���の言語仕様の概要を説明します。言語仕様の細かな詳細についてはパルテノン研究会発行の

「���言語仕様」を参照してください。

����� ���の特徴

���はレジスタートランスファーレベル #�,�'の言語に分類されますが、他の �,�言語や回

路図とは違う特徴があります。

制御端子

信号を制御として使うかデータとして使うかは回路図や他の �,�言語では設計者の頭の中にだ

けあり、言語記述や回路図には表記されません�。これに対して、���では制御信号と一般のデー

タ信号を明確に分離することができます。制御信号は制御端子 #制御入力 �����や内部制御端子

�������%'から入力された信号で、制御端子が起動された時の応答は �������文に記述します。

�時間の要素が入ると多少複雑になりますが、基本は同じです�もちろん、コメントや信号名の違いで表すことはできます

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 12: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���設計概要

instrin Trig;

instruct Trig generate stg.new(In);

cir.Trig(curval);

input In;

制御端子Trig の起動

制御端子Trigに対する応答

図 ���� 制御端子の起動と応答

制御信号を駆動する時に、制御対象のデータの転送を伴う場合があります。���ではデータ転

送を伴う制御信号駆動のため制御端子に引数を設定することができます。引数の存在は ���� ���

文で規定します。

ステージとタスク

制御端子による制御は単一クロック周期内の動作であるのに対して、複数クロックに渡る順序制

御を扱う ���の仕組みがステージです。ステージは起動されない限り休止していて、休止してい

るステージの動作は行われません。ステージを起動する場合には起動指示 #��������5�����'を発

行します。起動指示が行われると次のクロックの立上りでステージが起動します。

信号線に制御系とデータ系があるようにステージを起動する場合にも制御系とデータ系の信号を

別々に定義します。���では順序系制御信号としてタスクを用います。タスクはステージで何を実

行するべきかを示すステージが動作しているときだけ有効な信号になります。

制御端子と同様に制御信号であるタスクにはタスクに付随するデータ系の引数を指定できます。

タスクの起動が次のクロックの立ち上がりで行なわれるため、そこで、制御端子のデータと異なり

レジスタ #���5��� &�5��� &�'と呼ぶ記憶素子をデータの受渡しに用います。

順序制御の一つであるステートマシンは、現在の状態変数の値を状態として、状態ごとに別々に

実行するべき動作を記述することによって状態遷移にしたがって動作が切り替わります。同一の回

路を複数クロックに渡って状態を切替えながら動作させる場合にステートマシンを用います。図

���に ���で記述するステート遷移の例を示します。

一方、パイプラインでは一般に制御信号をデータに付随させ転送します。ゲートレベルや他の

�,�言語では制御信号とデータとの区別はないのでデータと共に制御信号をパイプラインラッチ

に転送することになります。

図 ���に ���におけるタスク記述の例を示しました。

分散セレクタ

���では端子への値の設定は接続を表すのではなく、転送を意味しています。そこで、転送が同

じ時間に衝突しない限り同じモジュールの中の複数の場所で同一の端子への転送の記述が現れても

かまいません。実際に論理合成が行なわれる時には複数の転送が分散されたセレクタ回路に変換さ

れ、転送の条件がセレクタの選択条件となります。

単相エッジトリガモデル

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 13: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� まとめ

st1

st2

st0

stage stg

statefirststate

state

goto

gotogoto

������ ���������� �� ���� �� ������� ��� ��� � ���� �� �����

� ������ �� �� ����� ������ ���

����� ��� ������� ��� ����������� ������������ ��� ������ ��� ���� ��� ������ ��� ���� ��� ������ ��� �� �

���� ��� ��� ��� �

��

図 ���� ���におけるステート遷移

���では論理回路は明示されないマスタークロックに同期する単相エッジトリガモデル #サイク

ルベースモデル'を採用しています。全ての信号はクロックの立ち上がりエッジを起点とし、レジ

スタやメモリへの値の設定、およびステージの起動や状態遷移など順序素子の状態変化は次のク

ロックの立ち上がりに発生するとしています。

このモデルは ���の弱点と見なされることもありますが、現在では大規模な論理回路の高位設

計において多相クロックの位相間の時間差を利用する必然はあまりありません。パイプライン性

能を向上させるための組合せ回路の微調整も ��� �%+が実現する方向にあることから、論理合成

ツールを用いる設計にはサイクルベースの設計が適していると考えられます。

��� まとめ

���による ���設計の流れを説明しました。システム開発の規模が増大するにつれ、どう作る

かではなく、何を作るかが問題になっています。そのためには設計者の意図を組む高品位な記述言

語が必須になっています。ハードウェア記述言語を理解し、設計力を高めてください。

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 14: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���設計概要

doA doB

taskA taskB

run

stgA

stgB

out

in

a b

c

������ ��������� �� ���� ��������� �� � ������ ������� �� ��������� ��� ���� � ���� ���������

���� ������ ����

������ ��� ���� � ���� �� ������

� ������ ��� �� ����� ������������ ��� ������ ��� �� ����� ������������ ��

����� ���� �� ! �

����������" ����! ������� ��������������" ����! ������� � ��

������� ���� �

�� ���� # ���� ����

��

図 ���� ���におけるタスク記述

(�( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 15: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

��

第�章 ���基礎演習 ���

��� はじめに

この演習では ���言語の学習を行ないます。単純な構造の ���例題から始め、よく使用される

動作記述の演習を行なっていきます。

実際に作成したモジュールがどのように動作するかを目で見ることが言語の習得の近道です。ハー

ドウェア記述言語の記述結果はハードウェアとなるため、作成したその場で確認するにはソフト

ウェアによる論理シミュレーションを用います。

����� シミュレーション実行環境

演習で用いる論理シミュレーションの実行環境を図 ���に示します。���を � �!�"&に変換した

SFLsource

Verilogmodule

Simulationscript

Value Change Dump file

Icarus Verilog

sfl2vl

gtkwave Simulation Output

test1.sfl test1.v test1.main

test1.vcd

test1.sig

Signal File

executionscript

test1.exe

Simulation Text Output

図 ���� 論理シミュレーション実行環境

後、� �!�"&コンパイラ �.��-0 � �!�"&によって実行形式に変換します。この実行形式のファイルを

実行すると画面上に実行結果を表示し、シミュレーション結果のダンプファイル # ���- �6��&

+-7 'を作成します。その後、波形表示プログラム $,89�: によって結果を波形表示します。

この環境をスクリプトにまとめてあり、演習では

Page 16: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���基礎演習 ��

!'�#� �(&���� ����

のコマンドでシミュレーションが実行可能です。(&���はオプションであり、波形表示が必要ない

場合には不要です。

シミュレーションスクリプトの概要については、後述しますが、詳細については各自スクリプト

の中身を参照ください。

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 17: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� ���の基本構造

��� ���の基本構造

���で記述する回路はモジュール #7"/-� 'を単位とした構造となります。���言語で基本的な

構成要素のモジュールは図 ���の構造を持ちます。モジュール名以外の各宣言や定義は省略可能で

すが、順序を交換してはいけません。

������ モジュール名 �外部端子・構成要素の宣言制御端子の仮引数の定義ステージ・タスクの定義共通動作記述制御端子動作記述ステージ動作記述�

図 ���� モジュールの構造

モジュールの入出力には表 ���の外部端子を用います�。

表 ���� ���の外部端子

転送方向 定義コマンド 説明

入力 !� -� データ入力端子

出力 "-� -� データ出力端子

双方向 ;!/!� .� 双方向データ端子

入力 !�0��!� 制御入力端子

出力 !�0��"-� 制御出力端子

���において*動作*は表 ���の各項目になります。複数の動作を並行して行うときには明示的に

���ブロックを用いることで、文法上は各構文では一つの動作を指定することになります。

���で使用可能な演算子の一覧を、表 ���に示します。論理回路では、束線信号の一部だけを

使って演算を行う場合があります。ビット切り出し演算子は信号から指定するビットだけを取り出

すための演算です。ビット切り出しとビット連結を組み合わせて信号のさまざまな加工が容易にで

きます。

例題 ������ ������� ����)��� ����� ����$)���������� %����% ��*� ++ ���,�"�-)�*�.�� ++ )�/�,� ++ ��0��

�� �

���では信号の各ビットの番号は �のべき乗の重みに対応して付けられます。従って、��*�は

信号 �の ��の重みのビットを切り出すことになり、��,�"�は ��の重みのビットから ��の重みの

�これらの端子以外に暗黙の入力端子として � �����と � ����がありますが、���のソースファイルには現れません

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 18: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���基礎演習 ��

表 ���� ���の動作

種別 説明

単位動作 端子への値の転送、レジスタ・メモリへの書き込み、状態遷移、制

御端子の起動、ジョブの生成・転送・終了など

��ブロック 複数の単位動作の並列起動

���ブロック 優先順位付き条件付き動作。条件に合致する最初の動作が起動され

る。* �0 *動作が指定されていればどの条件にも合致しない時に* �0 *

動作が起動される。

���ブロック 条件付き動作。条件に合致する全ての動作は並列に起動される。* �0 *

動作が指定されていればどの条件にも合致しない時に* �0 *動作が

起動される。

!<ブロック 条件付き動作

ビット #すなわち �の下位 �ビット'を切り出します。ビット連結は �進数として見た場合の重み

の並びに連結されます。すなわち、左にかかれたものが上位のビットになります。

表 ���� ���の演算子

演算子 意味 演算子 意味 備考

1 否定 + 論理和

��� ビット切出し 2 排他的論理和

����� ビット切出し - 論理積

'+ 桁方向論理和 ++ ビット連結

'- 桁方向論理積 3 加算 機能回路

'2 桁方向排他的論理和 �� 右シフト 機能回路

�4 符号拡張 �� 左シフト 機能回路

一致

例題 ������ ������� ��������#� ����� ��/�������� %����% �4���

� �また、���は符号拡張演算子によって端子や中間端子のビット幅を拡張することができます。上

の例題では ビットの入力信号 �を �ビットに符号拡張しています。信号 �の最上位ビット #��5�'

が �の場合には拡張される ビットは ")6666となり、の場合には拡張される ビットは ")""""

となります。符号拡張ではなく、ただ固定されたビットを左に追加したい場合にはビット連結を用

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 19: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� ���の基本構造

いてください。

例題 ����� ������� �����#� ����� ��/�������� %����% ")"""" ++ ��

�� �

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 20: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���基礎演習 ��

����� 共通動作記述

���のモジュールは共通動作記述を持つことができます。複雑な順序回路を実現する場合には、

モジュール内に複数のステージを記述することになりますが、共通動作記述はどのステージが動作

しているかに関わらずモジュールとして必ず実行する記述になります。また、ステージ記述は省略

可能なので、共通動作記述だけを持つモジュールを設計することもできます。次の例題 ����6!�%�

を見てみましょう。

例題 ������ ������� ����6 ����� �$)������� %�

% � - )��� �この例題は=外部端子の宣言=5 =共通動作記述=だけを有するモジュールになります。入力端子の

�$)と出力端子の %の間の演算と転送を共通動作記述で示します。

モジュールの共通動作記述は �と )の入力端子の信号の論理積を出力端子 %に転送します。

% � - )

論理回路の動作としてはごく単純なもので結果は簡単に予測ができますが、動作の確認をしてみま

しょう。次のコマンドを入力し、シミュレーションを実行してみましょう。

!'�#� (&��� ����6

図 ���に論理シミュレーション結果を示します。シミュレーション画面は実行環境によって多少

異なることに注意してください。

演習 ����� ����6!�%�の共通動作の演算を2$ �に変更し結果を確認してみよう。

(�( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 21: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� ���の基本構造

��"$ )�"$ %�"��6$ )�"$ %�"��"$ )�6$ %�"��6$ )�6$ %�6

図 ���� � 0��の論理シミュレーション結果

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 22: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���基礎演習 ��

����� 束線信号の記述

論理信号を扱う場合、�ビットの信号線だけで済むことはあまりなく、複数のビットをまとめて

利用します。複数の信号線をまとめて一つの信号名を付与した信号をここでは束線信号と呼びま

す。���では束線信号を扱うための特殊な構文はありませんが、端子やレジスタの定義において

束線を指定することでこれらの値は束線信号の値として取り扱います。次の例題 ����,!�%�を見

てみましょう。

例題 ����� ������� ����, ����� ����$)���������� %����

% � 3 )��

� �この例題は=外部端子の宣言=5 =共通動作記述=だけを有するモジュールになります。入力端子の

�$)と出力端子の %の間の演算と転送を共通動作記述で示します。前の例題との差は信号が �ビッ

トの幅を持った束線となっていることです。

モジュールの共通動作記述は �と )の入力端子の信号の和を出力端子 %に転送します。

% � 3 )

論理回路の動作としてはごく単純なもので結果は簡単に予測ができますが、動作の確認をしてみま

しょう。次のコマンドを入力し、シミュレーションを実行してみましょう。

!'�#� (&��� ����,

図 ��� � 0��の論理シミュレーション結果

図 �� に論理シミュレーション結果を示します。画面上のテキスト出力は次のようになります。

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 23: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� ���の基本構造

��,/.$ )�65"$ %�667��657$ )� 6"$ %�6/7��6�0$ )�67,$ %�6,,�� 6�$ )�6.,$ %�6*"

このモジュールの加算結果は �ビット数に制限されるので、シミュレーションの結果は数値とし

て加算した結果とは一部異なります。

演習 ����� ����,!�%�の共通動作の演算を-$ 2$ �に変更し結果を確認してみよう。

例題 ���のビット操作モジュールについても次のコマンドを入力し、シミュレーションを実行し

てみましょう。

!'�#� (&��� ����)���

画面上のテキスト出力は次のようになります。

��6666"6"6$ )�6"""""6"$ %�66"""""6��6"""6"66$ )�""""6"6"$ %�6""""6""��6"666"6"$ )�66""""""$ %�6"6"""""��"""6""6"$ )�6""66"""$ %�""""66""

演習 ���� ����)���!�%�の共通動作のビット操作を変更し、結果を確認してみよう。

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 24: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���基礎演習 ��

����� �ブロックの動作

���には並列動作を記述する構文として ��ブロックがあります。動作記述には一つの動作し

か記述できませんが、この動作を ��ブロックとすることで多くの動作を同時に実行する論理回路

が構成できます。 ��ブロックは

��� �

動作記述 6

動作記述 ,

!!!

と��の中に同時に動作する動作記述を並べます。次の例題 �������!�%�を見てみましょう。

例題 ������ ������� ������� ����� �$)������� %$��

��� �% � - )�� � + )�

��� �この例題は=外部端子の宣言=5 = ��ブロック動作記述=5 を有するモジュールになります。入力

端子の �$)と出力端子の %$�の間の演算と転送を ��ブロックにより同時に実行します。

早速、動作の確認をしてみましょう。次のコマンドを入力し、シミュレーションを実行してみま

しょう。

!'�#� �������

図 ��� に論理シミュレーション結果を示します。

��"$ )�"$ %�"$ ��"��6$ )�"$ %�"$ ��6��"$ )�6$ %�"$ ��6��6$ )�6$ %�6$ ��6

図 ���� � 0� ��の論理シミュレーション結果

演習 ����� �������!�%�の演算を変更して結果を確認しよう。

(�( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 25: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� ���の基本構造

����� ��ブロックの動作

���には条件動作を記述する構文として ���ブロックがあります。���ブロックは、ブロック内

の条件を満たした一つの動作記述が起動されます。複数の条件が真 #真理値として ;�の値'の場

合には先に記述されたものが優先されます。

��� �

条件 6� 動作記述 6

条件 ,� 動作記述 ,

!!!

����� 動作記述 #

次の例題 �������!�%�を見てみましょう。

例題 ������ ������� ������� ����� �$)����� �$�������� %�

��� ��� % � - )��� % � 2 )�

��� �この例題は=外部端子の宣言=5 =���ブロック動作記述=5を有するモジュールになります。入力端

子 �$)の演算を入力端子 �$�の値によって切り替え、出力端子の %へ転送します。

早速、動作の確認をしてみましょう。次のコマンドを入力し、シミュレーションを実行してみま

しょう。

!'�#� �������

図 ���に論理シミュレーション結果を示します。

条件である �$�の端子の値によって出力端子 %が変化することが分かります。

演習 ���� �������!�%�の演算や記述順序を変更して結果を確認しよう。

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 26: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���基礎演習 ��

��"$ )�"$ ��"$ ��"$ %�"��6$ )�"$ ��"$ ��"$ %�"��"$ )�6$ ��"$ ��"$ %�"��6$ )�6$ ��"$ ��"$ %�"��"$ )�"$ ��6$ ��"$ %�"��6$ )�"$ ��6$ ��"$ %�"��"$ )�6$ ��6$ ��"$ %�"��6$ )�6$ ��6$ ��"$ %�6��"$ )�"$ ��"$ ��6$ %�"��6$ )�"$ ��"$ ��6$ %�6��"$ )�6$ ��"$ ��6$ %�6��6$ )�6$ ��"$ ��6$ %�"��"$ )�"$ ��6$ ��6$ %�"��6$ )�"$ ��6$ ��6$ %�"��"$ )�6$ ��6$ ��6$ %�"��6$ )�6$ ��6$ ��6$ %�6

図 ���� � 0����の論理シミュレーション結果

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 27: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� ���の基本構造

���� ��ブロックの動作

���には条件動作を記述する他の構文として ���ブロックがあります。���ブロックは、ブロッ

ク内の条件を満たした動作記述が全て起動されます。

��� �

条件 6� 動作記述 6

条件 ,� 動作記述 ,

!!!

����� 動作記述 #

���の特別な型式に %構文があります。

% � 条件 � 動作記述

%構文は条件が �個だけの ���構文と同一の動作を行ないます。すなわち、条件が真の時に動作

記述で示される動作が起動されます。

次の例題 �������!�%�を見てみましょう。

例題 ������ ������� ������� ����� �$)����� �$�������� %�

��� ��� % � - )��� % � 2 )�

��� �この例題は=外部端子の宣言=5 =���ブロック動作記述=5 を有するモジュールになります。入力

端子 �$)の演算を入力端子 �$�の値によって切り替え、出力端子の %へ転送します。

早速、動作の確認をしてみましょう。次のコマンドを入力し、シミュレーションを実行してみま

しょう。

!'�#� �������

図 ���に論理シミュレーション結果を示します。

条件である �$�の端子の値によって出力端子 %が変化することが分かります。シミュレーション

では �$�が共に �となるケースを実行しています。同じ端子に同時に複数の動作が転送を行なう

場合、処理系によってはエラーとなります。

演習 ����� �������!�%�の演算や記述順序を変更して結果を確認しよう。

演習 ����� �������!�%�を ���構文と %構文を用いて書き換え、動作の確認をしよう。

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 28: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���基礎演習 ��

��"$ )�"$ ��"$ ��"$ %�"��6$ )�"$ ��"$ ��"$ %�"��"$ )�6$ ��"$ ��"$ %�"��6$ )�6$ ��"$ ��"$ %�"��"$ )�"$ ��6$ ��"$ %�"��6$ )�"$ ��6$ ��"$ %�"��"$ )�6$ ��6$ ��"$ %�"��6$ )�6$ ��6$ ��"$ %�6��"$ )�"$ ��"$ ��6$ %�"��6$ )�"$ ��"$ ��6$ %�6��"$ )�6$ ��"$ ��6$ %�6��6$ )�6$ ��"$ ��6$ %�"��"$ )�"$ ��6$ ��6$ %�"��6$ )�"$ ��6$ ��6$ %�6��"$ )�6$ ��6$ ��6$ %�6��6$ )�6$ ��6$ ��6$ %�6

図 ���� � 0����の論理シミュレーション結果

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 29: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� ���の基本構造

����� 内部端子

回路動作を考える時に、補助的な信号を使うとすっきりと表現できる場合が多くなります。���

ではこのようなモジュール内部で用いる信号は内部端子として宣言します。���言語仕様には内

部端子として 種類の端子が定義されていますが、通常は ���と呼ぶ端子だけを使えば十分です。

次の例題 �������!�%�を見てみましょう。

例題 ������ ������� ������� ����� �$)������� %���� �$��

��� �� � - 1)�� 1� - )�% � + ��

��� �この例題は=外部端子の宣言=5 =内部端子の宣言=5= ��ブロック動作記述=5 を有するモジュール

になります。入力端子 �$)を用いた内部端子 �$�の値の計算と、出力端子 %への転送を、 ��ブ

ロックにより同時に実行します。

早速、動作の確認をしてみましょう。次のコマンドを入力し、シミュレーションを実行してみま

しょう。

!'�#� �������

図 ���に論理シミュレーション結果を示します。

��"$ )�"$ ��"$ ��"$ %�"��6$ )�"$ ��6$ ��"$ %�6��"$ )�6$ ��"$ ��6$ %�6��6$ )�6$ ��"$ ��"$ %�"

図 ���� � 0�0 �の論理シミュレーション結果

内部端子 �$�と出力端子 %の値の変化が分かります。

演習 ����� �������!�%�の演算や記述順序を変更して結果を確認しよう。

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 30: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���基礎演習 ��

����� 制御内部端子

���ではデータの流れと制御の流れを別々に記述することが可能になります。制御の流れを記

述する手法の一つが制御端子です。制御端子にはモジュールの外部との制御を規定する制御入力端

子と制御出力端子の他にモジュール内の制御のための制御内部端子があります。制御端子の起動は

実は回路的な意味は制御端子に �を設定ことになります。しかし、言語仕様上制御とデータの区別

を付けるために起動は ����������のように �言語などの関数呼び出しと同様の文法を用います。

また、制御の起動に引数を持つことが出来る点も �言語の関数呼び出しと共通しています。引数は

�������� 制御端子名 �内部端子名��

と記述します。��の中に示す内部端子が仮引数になり、起動の時の実引数の値が転送されます。複

数の内部端子名を指定する時には*5*で区切って指定します。

起動したら起動に対応する動作を期待したいものです。��� では制御端子に対応した動作を

�������文を用いて記述します。

������� 制御端子名 動作記述

まず、制御内部端子の働きを調べてみましょう。次の例題 �������%!�%�を見てみましょう。

例題 ������� ������� �������% ����� �$)������� %���� ���������% ����������� ������

��� �� - 1)� ������1� - )� ���)��

������� �� % ���� �この例題は=外部端子の宣言=5 =共通動作記述=5 =制御端子動作記述=を有するモジュールになり

ます。引数の定義 #���� ���'において仮引数として内部端子 �を指定しています。入力端子の �$)

の条件によって制御内部端子 ��の実引数を切り替えて起動します。制御端子動作記述 #�������'

では引数に指定した内部端子の値を出力端子の %に転送します。

早速、動作の確認をしてみましょう。次のコマンドを入力し、シミュレーションを実行してみま

しょう。

!'�#� �������%

図 ��� に論理シミュレーション結果を示します。

(�( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 31: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� ���の基本構造

��"$ )�"$ ���"$ ��"$ %�"��6$ )�"$ ���6$ ��6$ %�6��"$ )�6$ ���6$ ��6$ %�6��6$ )�6$ ���"$ ��"$ %�"

図 ���� � 0�0 �<の論理シミュレーション結果

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 32: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���基礎演習 ��

����� 制御入力端子

モジュールの外部から入力される制御信号が制御入力端子です。制御内部端子と同様に �������

文により外部からの制御信号に対する応答を記述します。次の例題 ����5!�%�を見てみましょう。

例題 ������� ������� ����5 ����� �$)������� %������ �#������������ �#����������� �#���#���

������� �#������ % � - )�������� �#����� % � + )�������� �#���#�� % � 2 )�

�� �この例題は=外部端子の宣言=5 =制御端子動作記述= を有するモジュールになります。入力端子

の �$)と出力端子の %の間の演算と転送を制御入力端子により駆動される制御端子動作記述で示

します。

早速、動作の確認をしてみましょう。次のコマンドを入力し、シミュレーションを実行してみま

しょう。

!'�#� ����5

図 ��� に論理シミュレーション結果を示します。

89:� ��"$ )�"$ %�"89:� ��"$ )�6$ %�"89:� ��6$ )�"$ %�"89:� ��6$ )�6$ %�6�;� ��"$ )�"$ %�"�;� ��"$ )�6$ %�6�;� ��6$ )�"$ %�6�;� ��6$ )�6$ %�6<�;� ��"$ )�"$ %�"<�;� ��"$ )�6$ %�6<�;� ��6$ )�"$ %�6<�;� ��6$ )�6$ %�"

図 ���� � 0��の論理シミュレーション結果

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 33: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� ���の基本構造

制御入力端子による束線信号の制御

制御入力端子は �ビットの信号線ですが、制御対象のデータは束線でも構いません。次の例題

����/!�%�を見てみましょう。

例題 ������� ������� ����/ ����� ����$)���������� %��������� �#�������

������� �#������ % � 3 )��� �同じく、動作の確認をしてみましょう。次のコマンドを入力し、シミュレーションを実行します。

!'�#� ����/

図 ����に論理シミュレーション結果を示します。

��65"$ )�,/.$ %�667�� 6"$ )�657$ %�6/7��67,$ )�6�0$ %�6,,��6.,$ )� 6�$ %�6*"

図 ����� � 0�の論理シミュレーション結果

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 34: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���基礎演習 ��

����� サブモジュール

大規模な ���の設計では階層的なモジュール設計を行ないます。���では下位階層のモジュール

をサブモジュールと呼びます。サブモジュールを利用するにはサブモジュールの外部インターフェ

イス仕様が定義された �������文が利用に先だって記述されている必要があります。�������文

にはサブモジュールの外部端子の一覧と制御端子に対する引数の定義が書かれます。

モジュール内でサブモジュールを利用するためにはインスタンスとして宣言する必要がありま

す。構成要素の宣言部分において

サブモジュール名 インスタンス名�

とすることで、モジュール内で用いるサブモジュールを定義することになります。

サブモジュールの各端子は インスタンス名!端子名 と扱うことができ、値の読み出しや転送が

できます。サブモジュールの制御入力端子は #もしあれば引数を伴って' モジュールの動作記述か

ら駆動することで、サブモジュールを動作させます。制御端子の駆動は制御内部端子の駆動と同様

に �言語と似た文法記述 インスタンス名!制御入力端子名 ��� が用意されます。サブモジュール

が動作した結果は通常出力端子に出て来ますが、駆動した結果の値と見なして駆動と値の取り出し

を同時に行なう インスタンス名!制御端子名 �引数�!出力端子名 という構文が用意されます。

次の例題 ����.!�%�を見てみましょう。この例題は � 0��0>で定義される回路をインスタンス

#���6~���5'として利用します。���では他のモジュールのインターフェイスは �������文に

よって宣言されていなくてはなりません。そこで、この例題ではまず ����/モジュールの �������

文を定義します。モジュールの制御入力端子 �#�� ���には入力端子 �$)を引数として定義します。

例題 ������ �������� ����/ ����� ����$)���������� %��������� �#�������

�������� �#��������$)���

������ ����. ����� ����$)���$����$����������� %��������� ���

����/ ���6$���,$���5�

������� ��% ���6!�#����������,!�#��������$)�!%$

���5!�#��������$��!%�!%��� �����.では �つのサブモジュールを用いて、つの数値の加算を行なっています。

動作の確認をしてみましょう。次のコマンドを入力し、シミュレーションを実行してみましょう。

用意したシミュレーション環境ではサブモジュールを合わせて指定することができます。

!'�#� (&��� ����. ����/

図 ����に論理シミュレーション結果を示します。画面上のテキスト出力は次のようになります。

(�( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 35: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� ���の基本構造

図 ����� � 0��の論理シミュレーション結果

�� 6"$ )�657$ ��65"$ ��,/.$ %� 6,��6.,$ )� 6�$ ��67,$ ��6�0$ %� 50��607$ )�6,7$ �� 6/$ ��,/.$ %� /.��65�$ )�,.,$ ��6"6$ �� /0$ %� ,.

モジュールの加算結果は �ビット数に制限されるので、シミュレーションの結果は数値として加

算した結果とは異なります。

演習 ����� ����.!�%�においてサブモジュールに与える引数を変更して ����.のモジュール出力

値を確認しよう。

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 36: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���基礎演習 ��

������ 制御出力端子

モジュールから制御信号を出力するときには、制御出力端子 #!�0��"-�'を用います。制御出力端

子に対応する動作は上位のモジュールの中で �������で記述します。制御出力端子には制御内部

端子と同様に仮引数を定義することができます。

制御入力端子と制御出力端子の組合せで、ハンドシェイクの基本であるリクエストとアクノレッ

ジの制御構造を構成することができます。

次の例題に制御出力端子の利用例を示します。

例題 ������� �������� ��) ����� ��/�$)�/�������� %�/������� ���������� �����

�������� ����$)���

������ ��) ����� ��/�$)�/�������� %�/������� ���������� �����

�������� �����%��

������� �� ������-)���

������ ����������� ����� ��/�$)�/�������� %�/������� ���

��) ��)6�

������� �� ��)6!����$)��������� ��)6!���� % ��)6!%�

�� �動作の確認をしてみましょう。次のコマンドを入力し、シミュレーションを実行します。

!'�#� �����������

図 ���� に論理シミュレーション結果を示します。

��""6"$ )�"6"6$ %�""""��6"6"$ )�6"66$ %�6"6"��""""$ )�6"6"$ %�""""��6"""$ )�""6"$ %�""""

図 ����� � 0�!�0��"-�の論理シミュレーション結果

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 37: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� ���の基本構造

������ レジスタ

レジスタはクロック信号 #� ����='の立ち上がりにおいて、直前の入力値を記憶する記憶素子で

す。レジスタにはリセット信号 #� �����'が入力された時に に初期化される ��� &�と入力され

た時に �に初期化される ��� &�と初期化をされない ���の �種類があります。

次の例題 �������!�%�を見てみましょう。

例題 ������ ������� ������� ����� �$)������� %���� ��

��� �� � � - )�% ��

��� �この例題は入力端子 �$)を用いた演算結果をレジスタ �に格納し、同時にレジスタの値を出力

端子の %へ転送します。レジスタの値の設定は次のクロック信号 #� ����='の立ち上がりに行なわ

れます。

次のコマンドを入力し、シミュレーションを実行してみましょう。

!'�#� (&��� �������

図 ���に論理シミュレーション結果を示します。

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 38: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���基礎演習 ��

��"$ )�"$ ��#$ %�#��6$ )�"$ ��"$ %�"��"$ )�6$ ��"$ %�"��6$ )�6$ ��"$ %�"��"$ )�"$ ��6$ %�6��6$ )�"$ ��"$ %�"��"$ )�6$ ��"$ %�"��6$ )�6$ ��"$ %�"��"$ )�"$ ��6$ %�6

図 ���� � 0�� &の論理シミュレーション結果

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 39: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� ���の基本構造

������ メモリ

メモリはクロック信号 #� ����='の立ち上がりにおいて、アドレスで指定された要素に直前の入

力値を記憶する記憶素子です。���ではメモリへの書き込みはクロック信号に同期して行なわれ

ますが、メモリからの読み出しはクロック信号と関係なく非同期に行なわれるモデルになります。

次の例題 �������!�%�を見てみましょう。��� �>,.0?�/�で定義するのは ビット幅、���ワー

ドのメモリです。

例題 ������� ������� ������� ����� ��/�$������������� %�/������� &��������� �������� �>,.0?�/��

������� &��� �>���? � ��������� ���� % �>���?�

�� �この例題は制御入力端子 ����$&���を用いたメモリとの値の転送を行ないます。

次のコマンドを入力し、シミュレーションを実行してみましょう。

!'�#� (&��� �������

図 ����に論理シミュレーション結果を示します。

���� 6$ �� �$ %� ,$ �����"$ &����6���� ,$ �� �$ %�66$ �����"$ &����6���� 5$ �� /$ %�6"$ �����6$ &����"���� "$ ��6"$ %� .$ �����"$ &����6���� 6$ �� .$ %� �$ �����6$ &����"���� ,$ �� �$ %� �$ �����6$ &����"���� 5$ �� 6$ %�6"$ �����6$ &����"���� "$ �� 5$ %�6"$ �����"$ &����6���� 6$ �� 5$ %� �$ �����6$ &����"���� ,$ �� /$ %� �$ �����"$ &����6���� 5$ ��65$ %�6"$ �����"$ &����6���� "$ �� 5$ %� 5$ �����"$ &����6���� 6$ �� .$ %� �$ �����6$ &����"���� ,$ �� "$ %� /$ �����"$ &����6���� 5$ �� /$ %�65$ �����6$ &����"

図 ����� � 0�7 7の論理シミュレーション結果

このシミュレーションは入力データと ����$&���の信号を乱数で与えているのでアドレスと

データの変化を注意して見てください。また、シミュレーションではアドレス範囲を絞っています。

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 40: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���基礎演習 ��

������ ステージとタスク

次の例題 ����0!�%�を見てみましょう。モジュールの制御入力端子 ��に起動信号が到着したら

���6から順に順序回路が動作します。

���はモジュールの中に独立して動作する複数のステージを持つことができます。ステージを

起動する場合に、制御コマンドとしてタスクを指定します。タスクが一つしかない場合でもタスク

は省略できません。タスクは制御端子と同様に引数を与えることができます。

���ではステージとタスクの組合せをジョブと呼び、ジョブを指定してステージを起動するこ

とをジョブの生成と呼びます。ステージは独立して起動できる複数のタスクを持つことができます

が、ジョブの終了時には全てのタスクが同時に終了します。ジョブの生成は起動コマンドの次のク

ロックの立ち上がりにおいて行なわれるため、引数はレジスタを用いて渡されます。この例題では

各タスクは引数を宣言し、受け取った引数を次のステージの起動の引数として渡しています。

ジョブの生成は ��������もしくは �����で ステージ名!タスク名 �引数� を指定して行ないま

す。ジョブの終了は %��@もしくは �����で行なわれます。�����は新しいジョブの起動と自

ジョブの終了の二つの動作を行なうことになります。ジョブの生成はモジュールのどの記述からで

もできますが、ジョブの終了はステージの動作記述の中でしか許されません。複数のステージが動

作している環境で、ステージの動作記述以外では終了すべきジョブが特定できないからです。

例題 ������� ������� ����0 ����� ��/�������� %�/������� ������ �6�/�$�,�/�$�5�/��

���������� ���6 ����= ���=6��6�� ����������� ���, ����= ���=,��,�� ����������� ���5 ����= ���=5��5�� �

������� �� �������� ���6!���=6����

����� ���6 ������ ���,!���=,��6��

������ ���, �

����� ���5!���=5��,�������� ���5 �

��� �% �5�%��@��

��� �次のコマンドを入力し、シミュレーションを実行してみましょう。

!'�#� (&��� ����0

図 ���� に論理シミュレーション結果を示します。

演習 ������ ����0!�%�においてジョブの転送 #�����'の代わりにジョブの生成 #��������'を用

いた時の結果を考察し、試してみよう。

(( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 41: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� ���の基本構造

図 ����� � 0��の論理シミュレーション結果

(�( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 42: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���基礎演習 ��

タスクのもう一つの使い方

���言語仕様には規定されていないので互換性の問題は生じますが、�����ではステージのタス

クごとに別々の処理を記述できます。

次の例題はステージに �つのタスク #��0?�5��0?�5��0?�' を定義し、各タスクごと別々の処理を

行うようにステージの記述で指定しています。タスクを分離してもステージ自体は一つなのでどれ

か一つのタスクが終了すれば全タスクが終了することになります。

あるステージの行う一部の動作が起動の条件によって異なるといった場合に、異なる動作を別々

のタスクに分離してタスク動作記述を行うことで、ステージの起動という制御に対する応答を明示

的に表現できます。

次の例題は処理内容が単純なため、タスクの利用例としてはあまり良い例題ではありませんが、

記述方法の参考にしてください。

例題 ������� ������� �������= ����� ��/�������� %�/������� ������ �6�/�$�,�/�$�5�/��

���������� ��� ����= ���=6��6�����= ���=,��,�����= ���=5��5�� �

������� �� �������� ���!���=6����

����� ��� ����= ���=6 ����� ���!���=,��6�����= ���=, ����� ���!���=5��,�����= ���=5 ��� �

% �5�%��@��

��� �次のコマンドを入力し、シミュレーションを実行してみましょう。

!'�#� (&��� �������=

図 ���� に論理シミュレーション結果を示します。

(�( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 43: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� ���の基本構造

図 ����� � 0���0?の論理シミュレーション結果

(�( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 44: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���基礎演習 ��

������ 状態遷移

ステージは状態遷移を行うことができます。���では状態名を ����� ����で、リセット後の初

期状態を %��� �����で表します。状態変数はステージに付随するものとして、言語上明示的に

は示されません。また、状態の遷移は ����によって遷移先の状態名を示すことで、次のクロック

の立上りにおいて当該状態への遷移が発生します。

ステージの状態変数の初期化はリセット時のみに行われるため、ステージがジョブの終了により

停止している時にも停止する直前の状態を保存します。そこで、次のジョブの生成によりステージ

が起動される時には、保存された状態から実行することになります。

次の起動において、実行するべき状態を指定する必要がある場合には、ジョブを終了する時に次

の状態を明示的に指定する必要があります。

次の例題 ����*!�%�を見てみましょう。モジュールの制御入力端子 ��に起動信号が到着したら

���6から順に状態遷移を行なう順序回路が動作します。状態が ��5になったところで初期状態に

遷移すると同時にステージを終了します。

例題 ������� ������� ����* �

����� ���

���������� ���6 ����= ���=6����

������� �� �������� ���6!���=6���

����� ���6 ����������� ��6$��,$��5�%��������� ��6������ ��6 ���� ��,������ ��, ���� ��5������ ��5 ��� � ���� ��6� %��@� �

��� �次のコマンドを入力し、シミュレーションを実行してみましょう。

!'�#� (&��� ����*

��"� �����"�����"� �����"�����"� �����"��$��"� �����"�����"� �����"�����"� �����"�����"� �����"��$��"� �����"�����"� �����"�����"� �����"�����"� �����"��$��"� �����"�����"� �����"�����"� �����"�����"� �����"��$��"� �����"���

図 ����� � 0��の論理シミュレーション結果

(( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 45: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� ���の基本構造

図 ����� � 0��の論理シミュレーション結果

図 ���� に論理シミュレーション結果を示します。波形表示ではステージの状態レジスタの値を

示しています。�����では状態変数の値は ����� ����に記述された順番に から与えています。

(�( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 46: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���基礎演習 ��

��� �����とシミュレーション実行スクリプト

本章では、�����とシミュレーションで用いていたスクリプトの説明をします。

�����は ���で記述された論理回路を � �!�"&5 �2+�5 �+�などの 2+�に変換する 2+�コン

バータです。プリプロセッサである �%���!�#�とコンバータ本体 �%�,��)�!�#�およびシェルス

クリプト �%�,��$ �%�,�@$ �%�,��%よりなります。これらのスクリプトは

コマンド名 ファイル名 オプション

の形式で実行します。オプションはファイル名の後に来ることにご注意ください。表 ��に �����

のオプションを示します。制御端子の最適化を行うと制御端子が駆動されていない間も制御端子に

より制御される信号が出力される場合があります。このオプションは合成される論理回路の規模圧

縮のために用意しました。

表 ��� �����のオプション

コマンド名 オプション 説明

�%�,�� 1� 制御端子最適化

�%�,�� 1� & � 0 リセット極性負論理

�%�,�� 10��. � 0 クロック同期リセット生成

�%�,�� 1!.��-0 �.��-0 � �!�"&で合成可能な記述出力

�%�,�@ 1� 制御端子最適化

�%�,�@ 1 信号名プリフィックス付加

�%�,�@ 10 �!� 各モジュール別ファイル生成

�%�,�@ 1� & � 0 リセット極性負論理

この演習では図 ���の �#�コマンドを用いて論理シミュレーションの起動をしています。この

コマンドはシェルスクリプトになっていて、��=�コマンドを呼び出します。

4A')�'�@% > #BC6B # ? � �@����@� D����� !'�#� �(&���� ������6 �������,��#� 6

%% > #BC6B #(&��� ? � �@��:� &����@%����� :� ��%% > #BC,B A # ? ��@����=� (% E�=�%�� �8;FG� C, C,!���=� (% E�=�%�� �8;FG� C6 �DHE�: C,!� C�:��

������=� (% E�=�%�� �8;FG� C6 C�:��

%

図 ���� 演習のシミュレーションスクリプト # @ '

��=�コマンドは図 ����に示す E�=�%��に記述された内容を実行します。この演習で用いるコ

(�( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 47: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� ������とシミュレーション実行スクリプト

マンドは

�%�,�� 、 ������ 、 ��� 、 ��=&���

の つになります。�����は ���ファイルを � �!�"&に変換し、������は � �!�"&をシミュレー

ションイメージにコンパイルします。シミュレーションイメージは ���コマンドにより解釈され、

� �!�"&スクリプト中に指定されていれば波形ダンプファイル #I:'を作成します。��=&���は波

形ダンプファイルと信号ファイルを入力として波形を表示します。

�JK,IK �%�,��IG; K�F ������F�LM8IG ��=&���IIN ���

C��8;FG��!�� C��8;FG��!�%�C��JK,IK� C��8;FG��!�%�

C��8;FG��!�#�� C��8;FG��!� C��8;FG��!���C�IG; K�F� (� C��8;FG��!�#� C��8;FG��!� C��DHE�:� C��8;FG��!���

C��8;FG��!���� C��8;FG��!�#���=� �8;FG� C��8;FG�� ��

��� C��8;FG��!�#�C�IIN� C��8;FG��!�#�

&���� C��8;FG��!�#� C��8;FG��!��� C��8;FG��!��C�F�LM8IG� C��8;FG��!��� C��8;FG��!��

�������� (% C��8;FG��!�#� C��8;FG��!��� C��8;FG��!�

図 ����� 演習のA�? B�

論理シミュレーションのためのテストスクリプトであるシミュレーションスクリプトは、� �!�"&

に変換された ���モジュールとユーザが作成するテスト環境を用います。この演習では時間の都

合上、あらかじめテスト環境は用意しています。

�����で変換した � �!�"&ファイルでは、���の内部端子名やレジスタ名は同一の名前の � �!�"&

の &��もしくは ���に変換されます。外部端子は名前は同一ですが、出現順が異なります。出現

順変換規則は次のようになります。

� 先頭に � �����$ � ����=が必ず出現

� ���の外部端子の宣言の順は守る

� ただし、同一宣言中の複数の信号は逆順

図 ����に例題 ���のシミュレーションで用いたテストスクリプトを示します。

スクリプトでは、����6モジュールの入力端子 )$�にはそれぞれレジスタ �のビット �5ビット

を接続し、出力信号をモジュールの信号 %に接続します。波形ダンプのファイル指定をした後、

モジュールへの入力信号を �シミュレーション時間ずつ変化させて値を画面に表示します。

波形表示のための 0!&���ファイルには $,89�: を立ち上げた時に波形表示したい信号名を並べ

ておきます。図 ����はシミュレーション ���モジュールの ����6サブモジュールの信号名 �$)$%

(�( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 48: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���基礎演習 ��

������ ������� >,�"? ��&�� %�����6 ����6��������$������=$�>6?$�>"?$%��

���� )���C����%���B����6!���B��C���������%���� "���/�� �36�)���46 C�������B��O�$ )�O�$ %�O�B$ �>"?$�>6?$%�����C%��@�

������������

図 ����� � 0��のシミュレーションスクリプト

���!����6!����!����6!)���!����6!%

図 ����� � 0��の 0!&���ファイル

を表示するための 0!&���ファイルの中身です。0!&���ファイルには波形表示したい信号名を並べて

おきます。束線信号の場合には信号名の後に ���!����0!�>5�"?のように表示するビットの範囲

を指定します。0!&���ファイルが無い場合には、$,89�: を立ち上げた時に信号が表示されませ

んが、信号は後から追加して表示することができます。

図 ���に例題 ����のシミュレーションで用いたテストスクリプトを示します。

������ ���������� �&�� >5�"? %���� ������ >5�"? ����� �������$ ������=�����0 ����0��������$������=$�$%$����

���� )���C����%���B����0!���B��C���������������= "�������� 6�46������� "�%��� "��60� 36�)����� �C������-P@*"� "�� C�������46 ������= 6�46 ������= "�C�������B��O#$ %�O#B$ �$ %�����C%��@�

������������

図 ���� � 0��のシミュレーションスクリプト

(�( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 49: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� ������とシミュレーション実行スクリプト

スクリプトでは、����0モジュールの入力端子 �には乱数で値を設定し、起動のための制御入

力端子にも乱数の一部を使って確率的に �を立てるようにしています。また、出力信号をモジュー

ルの信号 %に接続します。波形ダンプのファイル指定をした後、クロックとリセット信号を初期化

し、ループの中でモジュールへの入力信号を設定しながら、クロック信号を �パルス与えて結果を

画面に表示します。

���!����0!������=���!����0!����������!����0!�����!����0!����=����6����=6���!����0!����=����,����=,���!����0!����=����5����=5���!����0!�>5�"?���!����0!%>5�"?���!����0!�6>5�"?���!����0!�,>5�"?���!����0!�5>5�"?

図 ����� � 0��の 0!&���ファイル

図 ����はシミュレーション信号を表示するための 0!&���ファイルの中身です。�����ではタスク

が起動している場合には ���= ステージ名 タスク名 のレジスタが �になります。そこで、シミュ

レーションでタスクを直接観測したい場合にはこのように直接タスクレジスタの内容を表示します。

表 ���� �����が生成する内部信号

信号名 意味

0��& ステージ名 ステージレジスタ

��0? ステージ名 タスク名 タスクレジスタ

0��& ステージ名 0��� � & ステートレジスタ

0��� ステージ名 ステート名 ステート定数

0��& ステージ名 0 � ステージ起動信号

0��& ステージ名 � 0 � ステージ終了信号

��0? ステージ名 タスク名 0 � タスク起動信号

サブモジュールインスタンス名 端子名 サブモジュール連結端子

� � 番号 一時端子

(�( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 50: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���基礎演習 ��

����� シミュレーションスクリプト雛型

�����で作成した � �!�"&ファイルからシミュレーションスクリプトを作成する時に便利な雛型

作成スクリプト ����=��を用意してあります。使い方は

����=�� モジュール名 ファイル名

として、シミュレーションしたいモジュールの名前と � �!�"&ファイルのファイル名を指定します。

ファイル名がモジュール名!�の形式の場合には省略可能です。雛型は標準出力 #コンソール'に出

力されるので、必要ならばファイルにリダイレクトしてください。

����=�� �������=

とすると、図 ����のような出力が得られます。

������ ������������� ��GN ,���� �������$ ������=���� >5�"? ����� ���&�� >5�"? %��������= �������=��������$������=$�$%$�������� )���������= "�������� 6�45 ������� "�������� %������ 4��GN ������= Q������=�)���C����%���B�������=!���B��C���������,$�������=��������������

図 ����� : �!0? �で生成したシミュレーションスクリプトの雛型

���の論理回路は � ����=の立ち上がりで動作するので、シミュレーションスクリプトは � ����=

の立ち下がりでデータを入出力するように記述するとよいでしょう。例えば、図 ����に示す記述

を ���������の前に記述することでモジュール入力信号に値を設定できます。

��&��� 2�������� ������=�)����� 6�� C����������

図 ����� � ����=の立ち下がりで値を設定するシミュレーションスクリプト例

(�( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 51: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

��

第�章 ���基礎演習 ���

��� はじめに

この演習では ���言語を用いた ���設計の学習を行ないます。���言語要素の練習を行った基

礎演習 #�'と違い、#�'では複数のモジュール間のインターフェイスに注目し、大規模な ���設計

に用いられる応用的な回路を学習します。

この演習では簡単な例題を中心に、仕様を検討しインターフェイス仕様を作成し、モジュールの

設計を行なっていきます。

��� モジュール間インターフェイス

クロックを共有するシステムでのインターフェイスと別のクロックで動作するシステムではイ

ンターフェイスに対する考え方が異なります。���で記述する範囲は同一クロックを共有するモ

ジュールとなります。クロックが異なり同期化が必要な記述は各アプリケーションごとに異なる記

述方法があるので、演習では触れません。

同一のクロックを共有するモジュール同士のインターフェイスは制御端子を用いて実現すること

ができます。本章では制御端子を用いたモジュール間インターフェイスの例題を用いてインター

フェイスの考え方を学習します。

����� 要求・応答モデル

モジュール間インターフェイスの基本として要求・応答モデルによるインターフェイスを考えま

す。要求 #リクエスト信号'に対して、応答 #アクノレッジ信号'を返信することでモジュール間の

ハンドシェイク制御を行ないます。���同士の非同期制御においては、相手が要求を受け取ったか

どうかを判定することが難しいために、応答が返るまで要求を出し続けて、応答を確認した後要求

を取り下げるインターフェイスとします。このモデルは ���内で用いるには大げさなので、単純化

して要求も応答もパルス信号で応答可能なインターフェイスにします。

このモデルの実装例として本演習ではメモリのインターフェイスを用います。多くのシステム

���にとって、データを記憶するメモリは大切な部品の一つです。メモリにはさまざまな構成があ

り、読み出すタイミングも数多くあります。

システムにおいて使用するメモリを変更する場合にもコア部分の論理回路には変更が及ばないよ

うにモジュールを作成しましょう。読み出しの手順を次のように考えます。

�� メモリモジュールはコアモジュールからメモリの読み出し要求を受け、同時に、コアモジュー

Page 52: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���基礎演習 ��

ルは読み出すべきアドレスをメモリモジュールに転送

�� メモリモジュールは読み出しが完了した時点で読み出し完了報告を上げ、同時に読み出しデー

タをコアモジュールに転送

この手順を使えば、メモリ読み出しにどれだけ時間がかかろうとコアモジュールではメモリモ

ジュールからの完了信号が来た後の応答だけを考えれば良いことになります。

メモリモジュールコアモジュール読み出し要求

読み出しアドレス

読み出し完了報告

読み出しデータ

図 ���� メモリモジュールとコアモジュール

図 ��� にメモリモジュールとコアモジュールの接続を図示しました。

メモリモジュールをサブモジュールとして用いるためのインターフェイスとなる �������文は

図 ���になります。このメモリモジュールはアドレスが ��ビットで、データ幅も ��ビットとして

います。�������文はこれから記述するモジュール本体とは別にファイル ������!@に記述してお

きます。

������� E����� ������ ���;���;�R����� ���8�������60��������� ���;���8�=������� ���;���:����60���������� ���;���;�R����8��������

図 ���� メモリモジュールの �������文

メモリモジュール

それでは、�������文で規定したインターフェイスを満たすメモリモジュール本体の設計をして

いきましょう。

まずは、メモリが要求したクロック内に読み出せるとした場合のモジュールです。コアモジュー

ルからアドレスを渡してメモリ素子のアドレス線を駆動し、アクセスタイム後出てきたデータをコ

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 53: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� モジュール間インターフェイス

アモジュールに転送するため、通常 �クロック以内に読み出そうとするとクロック周期を長くとる

必要があることに注意してください。

このような制約があるにも関わらず、それほど高クロック周波数を要求されない用途ではシン

プルで良い方法です。メモリの記憶素子としてここでは ����を �����ワード用意します。コアモ

ジュールからの読み出し要求は制御入力端子 �����によって要求されるため、要求が来たとこ

ろでメモリのデータを読み出し制御出力端子 �������に読み出し完了を出します。

それでは、このモジュールのシミュレーションをしてみましょう。

!'�#� (&��� ������

と入力してみてください。

������ E����� ������ ���;���;�R����� ���8�������60��������� ���;���8�=������� ���;���:����60����� ����>0..50?�60��

�������� ���;���8�=����;���:�����

������� ���;���;�R ���;���8�=�����>���8������?���

図 ���� 要求クロック内で読み出しを行なうメモリモジュール

図 ��� 要求クロック内で読み出しを行なうメモリモジュールのシミュレーション波形

図 ��はこのモジュールのシミュレーション波形を示します。リクエストに対して同一クロック

に応答が返っているのが分かると思います。

図 ���は要求の次のクロックでメモリデータが読み出せるメモリモジュールの ��� 記述です。

���のメモリは非同期読み出しとなっているので、このメモリモジュールはステージを作成し敢

えて要求を遅延させてデータを出しています。

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 54: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���基礎演習 ��

������ E����� ������ ���;���;�R����� ���8�������60��������� ���;���8�=������� ���;���:����60����� ����>0..50?�60����� �������60��

�������� ���;���8�=����;���:��������������� ���� ����= ��������� ���

������� ���;���;�R ��� ��������� ����!������8��������

����� ���� ���� ����;���8�=�����>������?��%��@�

��

図 ���� �クロックで読み出しを行なうメモリモジュール

それでは、このモジュールのシミュレーションをしてみましょう。

!'�#� (&��� ������6

と入力してみてください。

図 ���� �クロックで読み出しを行なうメモリモジュールのシミュレーション波形

図 ���はこのモジュールのシミュレーション波形を示します。リクエストに対して次クロックに

応答が返っているのが分かると思います。

同様にステージを用いて �クロックの遅延を持つメモリ #������,!�%�'や �クロックの遅延を

持つメモリ #������5!�%�'のモデルを作ってあります。これらの人為的なモデルは実世界のデバ

イスとはあまり関係がないのですが、メモリを利用する側のモジュールテストに役立ちます。

(�( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 55: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� モジュール間インターフェイス

図 ���は要求の次のクロックでメモリデータが読み出せるメモリモジュールの ���記述です。

������ E����� ������ ���;���;�R����� ���8�������60��������� ���;���8�=������� ���;���:����60����� ����>0..50?�60����� �������60��

�������� ���;���8�=����;���:��������������� ���� ����= ��������� ���

������� ���;���;�R ��� ��������� ����!������8��������

����� ���� ����������� ��6$��,�%��������� ��6������ ��6 ���� ��,������ ��, ��� �

���;���8�=�����>������?������ ��6�%��@�

��

図 ���� �クロックで読み出しを行なうメモリモジュール

図 ���は要求後 �クロック目でメモリデータが読み出せるメモリモジュールの ���記述です。

演習 ���� ������,!�%�と ������5!�%�のシミュレーションをそれぞれ、

!'�#� (&��� ������, 、

!'�#� (&��� ������5

として実行してみよう。

コアモジュール

図 ���に、これらのメモリモジュールを利用する上位モジュール #コアモジュール'の例題を示

します。コアモジュールではメモリモジュールをサブモジュールとして利用するため、�������文

の定義ファイル ������!@をインクルードしています #図 ���参照'。

コアモジュールではメモリに要求を発行し返ってきたデータをデータ出力端子 ����に送出し、

かつ、次のメモリ要求をメモリモジュールに発行します。メモリモジュールからの応答に反応して

次の動作を行なう設計としたため、メモリモジュールの動作速度によらずコアモジュールは動作可

能です。具体的には、先ほどシミュレーションで動作確認した つのモジュールのどれでも利用で

きます。

それでは、このモジュールのシミュレーションをしてみましょう。まずは同一クロック内でデー

タを読み出せるメモリモジュール ������!�%�と組み合わせて利用するため、

!'�#� (&��� ������� ������

と入力してみてください。

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 56: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���基礎演習 ��

������ E����� ������ ���;���;�R����� ���8�������60��������� ���;���8�=������� ���;���:����60����� ����>0..50?�60����� �������60��

�������� ���;���8�=����;���:��������������� ���� ����= ��������� ���

������� ���;���;�R ��� ��������� ����!������8���������

����� ���� ����������� ��6$��,$��5�%��������� ��6������ ��6 ���� ��,������ ��, ���� ��5������ ��5 ��� �

���;���8�=�����>������?������ ��6�%��@�

��

図 ���� �クロックで読み出しを行なうメモリモジュール

図 ����を見ると、リクエストに対して同一クロック内で応答が返り、連続してリクエストが発

行されることが分かります。

それでは、�クロックでデータを読み出せるメモリモジュール ������6!�%�と組み合わせて利

用するため、

!'�#� (&��� ������� ������6

と入力してみてください。

このシミュレーションではリクエストに対して �クロック応答が遅れて出てくることが分かりま

す。コアモジュールは同一でもサブモジュールの応答によって自動的に動作が切り替わります。

演習 ���� ������,!�%�と ������5!�%�を用いたシミュレーションをそれぞれ、

!'�#� (&��� ������� ������,

!'�#� (&��� ������� ������5

として実行してみよう。

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 57: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� モジュール間インターフェイス

� ����言語仕様には規定されませんが、プリプロセッサを用いて設計の見通しを良くすること

ができます。���言語処理系で用いられるプリプロセッサ指令は二つあります。プリプロセッ

サ指令は行の先頭から記述します。

ファイルのインクルード O を用いてファイルのインクルードを指定することができます。

O Bファイル名B

O �ライブラリファイル名�

Bで囲われたファイル名はカレントディレクトリをファイルの検索パスとします。��で

指定するファイルは環境変数C�%�,2����を用いて、CN8;�SG9�9'�%���)!��'の

ディレクトリの下を検索パスとしてインクルードファイルを探します。

マクロ定義 O� を用いてマクロを定義することができます。�言語のマクロとよく似ていま

すが、マクロ関数やプリプロセッサでの計算には対応せず、単なる置き換えを行なうだ

けです。

O� マクロ名 置き換えコード

マクロ名には変数名として利用可能な文字列が使われ、置き換えコードは任意の文字列

になります。任意といっても、マクロを展開した時に文法上正しい記述となる必要があ

ります。� �

図 ���� ���におけるプリプロセッサ

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 58: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���基礎演習 ��

O B������!@B������ ������� ������� �����60������� ��R�����&� �60�$ ����60��E����� �����������% ������������������ ���� ����= ����������������� ������� ��� �

�������� ����!������ � 3 6��

������� ��R ����������������� ���!���;���8�= ��� �

���� ���!���;���:���������������

����� ���� ���� ����!���;���;�R������%��@���

図 ���� メモリモジュールを利用する例題

図 ����� 同一クロックで読み出しを行なうメモリモジュールと組み合わせたコアモジュールのシ

ミュレーション波形

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 59: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� モジュール間インターフェイス

図 ����� �クロックで読み出しを行なうメモリモジュールと組み合わせたコアモジュールのシミュ

レーション波形

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 60: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���基礎演習 ��

����� ����インターフェイス

モジュールのデータ処理の平均スループットは同等であっても、ミクロには速度の不均衡が発

生して処理が滞ることがあります。このような可能性のあるモジュール同士を接続する場合には

����バッファを間に挟むとモジュールの利用率が上がり性能向上につながる場合が多くなります。

FIFOREQ RESreq

ack

data

req

ack

data

図 ����� ����モジュール

図 ����に ����を用いたデータ転送のブロック図を示します。リクエストモジュール #��D'か

らの要求信号を ����モジュールが受け、����バッファに空きがあれば応答モジュール #���'の

状態に関わらず応答信号 #�.?'を返信しデータを受け取ります。

������� J%� ������ %%�N��;�R����� %%�N��:����60��������� %%�N��8�=�������� %%�N��@;�R������ %%�N��@8�=������� %%�N��@:����60���������� %%�N��;�R�%%�N��:�����

図 ���� ����モジュールの �������文

図 ���は ���� モジュールの宣言文です。リクエストモジュールとのインターフェイスには

%%�N��から始まる名前の信号を、応答モジュールとのインターフェイスには %%�N��@から始ま

る名前の信号をそれぞれ用います。それでは、����をテストするモジュールを作りましょう。モ

ジュールはメモリテストのコアモジュールを改造し、間に ����バッファを入れます。

図 ����が ����のテストモジュールになります。メモリの場合のコアモジュールと構成はほと

んど変わらないことが分かると思います。テストモジュールをシミュレーションで確認してみま

しょう。

!'�#� (&��� %%����� %%���� ������6

と入力してください。このコマンドはテストモジュールと ����モジュールとメモリモジュールの

�モジュールを用いてシミュレーションを実行します。

接続したメモリモジュールは � クロックおきにメモリの読み出しが可能なモジュールなので、

����バッファに余裕がある間はテストモジュールから毎クロックデータが転送されますが、����

バッファがフルになると転送のペースがメモリモジュールの転送に律速されていく様子が分かり

ます。

(�( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 61: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� モジュール間インターフェイス

O B������!@BO B%%�!@B������ %%����� ������� �����60������� ��R�����&� �60�$ ����60��E����� ����J%� %%���������% ������������������ ���� ����= ����������������� %%�!%%�N��@;�R ���!���;���;�R�%%�!%%�N��@:������������ ���!���;���8�= %%�!%%�N��@8�=���������� ������� ��� �

�������� ����!������ � 3 6� �

������� ��R ����������������� %%�!%%�N��8�= ��������������� ���� ���� �%%�!%%�N��;�R������%��@� �

��

図 ����� ����モジュールのテストモジュール

演習 ���メモリモジュールを ������$������,$������5などに取り換えて結果を確かめましょう。

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 62: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���基礎演習 ��

図 ����� ����のテストモジュールのシミュレーション波形

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 63: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� モジュール間インターフェイス

次に、����モジュールの内部構造について説明します。図 ����は内部構造の主要部分を示すブ

ロック図です。

inp

outp

fifoMem

countfifoPutData

fifoPushData

図 ����� ����モジュールの内部構造

入力されるデータ #%%�N��:���'は、バッファ中 ��レジスタの示す場所に格納されます。デー

タが格納されると ��はインクリメントされ、併せて �����もインクリメントされます。����か

らデータを出力する時には出力データの場所を ����レジスタが示します。この場所からデータを

取り出し出力端子 %%�N��@:���に出力します。データが出力するごとに ����はインクリメント

され、併せて �����がデクリメントされます。����の入力と出力は別々のモジュールに独立に接

続しているので、入力要求と出力要求は同時に発生することがあります。その場合には �����は

前の値のままとなります。

入力ポインタである ��と出力ポインタである ����はどちらもカウントアップだけを行ないま

す。この例題のように ����バッファのワード数が �の巾乗になっている場合、����バッファの

上限を越えた場合にはこれらのカウンタは自動的に に戻ります #ラップアラウンド '。�の巾乗に

ないワード数の ����を作成する場合には上限に達したことを検知してハードウェアでポインタを

リセットする必要が生じます。

図 ����は ���で記述した ����モジュールです。制御入力端子、制御出力端子、制御内部端子

を用いて機能を実現しています。

����にデータが到着する時にはコアモジュールから %%�N��;�Rが発行されます。この制御入

力信号は �������文を駆動します。

����バッファに空きが無い場合には、空きを待ち合わせるステージ ���!��Rを起動し、空きが

ある場合には応答信号 %%�N��8�=を発行するために %%���=内部制御端子を起動します。

このステージでは応答信号を返すと共に、����バッファB<"A 7にデータを格納し、入力ポイ

ンタをカウントアップします。同時に ����有効データ数をカウントアップしますが、このカウン

タは出力時にはカウントダウンの操作が行なわれるため、カウントアップ/ダウンの同時発生を考

慮にいれる必要があります。

そこで、二つの制御内部信号の値を共通動作記述において判定し、同時の場合にはカウンタを動

かさないようにします。

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 64: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���基礎演習 ��

さらに、メモリへのデータの転送要求を発行するため制御内部端子 ���@��R��を出します。

���@��Rでは ����バッファの有効データが無い場合には ���@ステージを起動しデータの転送を

指示します。����に有効データがある場合には ����からの応答が出てくるため、この応答に同

期してデータを転送します。

コアモジュールからデータを送ろうとして ����バッファの空きがなければ空きが出来るまで

���ステージにおいて応答を遅延させます。

図 ����は � �!�"&で記述した ����モジュールテストスクリプトです。メモリモジュールに乱数

を用いて初期値を設定した後、%%�����モジュールにリクエストを �クロック送り動作を開始さ

せます。スクリプトではメモリモジュールが ����に対して ���;���8�=の応答を返す時にメモリ

モジュールの出力信号をコンソールに表示します。

演習 ���� 図 ����の ����ワード数を ���ワードに拡大し、動作を確認しよう。

(�( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 65: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� モジュール間インターフェイス

������ J%� ������ %%�N��;�R����� %%�N��:����60��������� %%�N��8�=�������� %%�N��@;�R������ %%�N��@8�=������� %%�N��@:����60������&� ���,�$�����,�$)��������&� ������5����� �����$%������� %%�E��>/?�60���������% %%���=$�������$�������&��

���������� ��� ����= ��R�������������� ���@ ����= ��R��� ���= �&������

��� ������ ������,��%��� ������ ")"66��%��������-1�������&�� ����� � ����� 3 ")6�%�1�������-�������&�� ����� � ����� 3 ")666��

������� %%�N��;�R ��� �%���� �������� ���!��R�������� %%���=����

������� %%���= ��� �%%�N��8�=���%%�E��>��? � %%�N��:������ � �� 3 6�����������%������� �������� ���@!��R���

������� %%�N��@8�= ��� ����� � ���� 3 6��������&����%�1�����-��������+������6�+������"��� �������� ���@!��R����

����� ��� �%�1%������� �%%���=���

%��@�������� ���@ �

��� �%%�N��@:��� %%�E��>����?�

����= ��R ��� �%%�N��@;�R������ �

%%�N��@8�=� %��@������ ����� ���@!�&�����

�����= �&�� ��� �%�%%�N��@8�=� %��@��

��

図 ����� ����モジュール

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 66: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���基礎演習 ��

������ ����&�� >6.�"? �������� �������$������=$��R������� �%%����� %%�������������$������=$����$��R��

��&��� 2�������� %%�����!���!���;���8�=�46 C�������B�����O5� :����O#B$C���',$

%%�����!���!���;���:��������� %������ 4, ������= Q������=����� )���C����%���B%%�����!���B��C���������C�������BM����B��%��� "��6"� 36� )���%%�����!���!����>? C�������C�������B8����O# :����O#B$>6.�"?$%%�����!���!����>?�����%��� 6"��0..50� 36� %%�����!���!����>? C�������������= "�������� 6���R "�46 ������� "�2�������� ������=� ��R 6�2�������� ������=� ��R "�C�������B;�����B��%��� "��5"� 36� )���2�������� ������=� ����C%��@�������������

図 ����� ����モジュールテストスクリプト

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 67: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� クロック系の異なるモジュール間インターフェイス

��� クロック系の異なるモジュール間インターフェイス

大規模な回路を実装する場合には、クロック系の異なるモジュールインターフェイスが重要にな

ります。本章では単相同期の ���でクロック系の異なるモジュールとデータを転送する例題を演

習してみましょう。

クロック系の異なるモジュールとの通信を行う上で最大の障害はハザードと呼ばれる現象です。

ハザードはレジスタが記憶する値がその値を参照する回路から見て不定となる現象です。データ転

送の意義はレジスタからレジスタへ正しくデータを伝えることにあります。ところが、ハザードを

起こすと正しいデータの伝達ができません。

図 ���� 回路シミュレーションで観測されたハザード

図 ���に �����回路シミュレーションで観測されたハザードの波形を示します。図で、�=は

クロック信号、Rはレジスタの出力信号、�Rはレジスタの否定出力信号をそれぞれ表します。

ハザードを起こしていないレジスタの出力は図 ����のようになりますので、出力波形が相当歪

んでいることが見てとれます。ハザードの問題は波形の歪みだけでなく、後続の論理が異なる値と

して出力値を認識する可能性があり誤動作の原因となることにもあります。�

クロック系の異なるモジュール間のインターフェイスは ���の同期回路の世界とは切り離して

考える必要があるため、インターフェイス部分を専用のモジュールに切り分けましょう。図 ����

�ハザードの発生はレジスタ内部のフィードバックに起因します。クロックとデータ入力信号が内部フィードバックループに十分なエネルギーを与えられない �セットアップ時間を満たさない、クロック信号が細いなど� 場合にレジスタの出力が十分確定しない状況になります。その時に、フィードバックがちょうどバランスして中点で止まってしまうと中間値が長く続くことになります。論理スレッショルドが �

���� の素子を用いて雑音などが一切無い場合にはこの状態がどれだけ継

続するかは予測できません。ただし、一般に論理回路の中では雑音が大量に発生するため無限にハザードが継続することは考えにくいと思います。

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 68: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���基礎演習 ��

図 ����� ハザードを起こしていないレジスタ出力波形

に送信モジュールならびに受信モジュールのインターフェイスを示します。クロック系が異なるモ

ジュール間を渡る信号線はデータ転送要求信号 ��Dとして送信モジュールから ��#���が出力さ

れ、これが受信モジュールの �;# �に入力されます。また、データ受け取り確認信号 %�8として

受信モジュールから �;#���が出力され、送信モジュールの ��# �に入力されます。

������� ������# ������� ��#�������� ��# ������� ��#;�R�������� ��#8�=��

������� ������# ����� �;# �������� �;#����������� �;#;�R������ �;#8�=��

図 ����� モジュール間インターフェイス回路

異なるクロック系の信号を検出する場所でハザードの発生が起こりえます。そのため、��D�%�8

信号の検出回路にはハザード回避が必須になります。

���の同期設計のインターフェイスとしては送信要求がある時に送信モジュールには ��#;�R信

号を送ります。この信号は通信モジュールを通って受信側に �;#;�Rとして伝えられます。受信側

がデータを受け取った時には �;#8�=を受信モジュールに送り、これが �;#���を通って送信側の

��#8�=として送信要求を出したモジュールに連絡されます。

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 69: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� クロック系の異なるモジュール間インターフェイス

このように、このモジュールを利用することによってクロック系の違いを意識することなく、

����の例題と同様の �����'�������を用いた � E- 0��%.?�"9� /& のハンドシェークとし

て内部回路を設計することができます。

Requestmodule

Recievemodule

req

ack

data

req

ack

asyncTX

asyncRX

clock A clock B

図 ����� 通信モジュールを用いたクロック系が異なるモジュール間通信の流れ

図 ����にクロック系が異なるモジュール間通信を通信モジュールを用いて行う概念図を示します。

図 ���はクロック系が異なるモジュール間通信モジュールを用いて二つのクロック系で通信を

行う� �!�"&スクリプトになります。

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 70: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���基礎演習 ��

������ ������������� ��GN8 .���������� ��GNH /���������� ���N 6""""�

��� �������$ ��=�#$ ��=�#$ ��������� ��#;�R$ �;#8�=�&�� ��#8�=$ �;#;�R�

������# ������#��������$��=�#$�;# �$ �;#���$ �;#;�R$ �;#8�=��������# ������#��������$��=�#$��#���$ ��# �$ ��#;�R$ ��#8�=��

����� �;# � ��#��������� ��# � �;#����

���� )�����#;�R "� �;#8�= "���=�# "���=�# "�������� 6�4���GN8T��GNHT,� ������� "�������� %������ 4��GN8 ��=�# Q��=�#����� %������ 4��GNH ��=�# Q��=�#����� )���C����%���B�����!���B��C������������

���� )�������� "�4��C������-6.�T��GN8T,� ����� 6�4���GNHT���N�C%��@����

��&��� 2�������� ��=�#�)���%������--�C������-5� "� )���

��#;�R� 6�4���GN8T,� ��#;�R� "�&@�����#8�= "� 4���GN8T,�����

���

���� %������4��GNH)���%��;#;�R� )���4��C������-5�T��GNHT,�)����;#8�=� 6� 4���GNHT,� �;#8�=� "�

������

������������

図 ���� クロック系が異なるモジュール間通信シミュレーションスクリプト

(�( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 71: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� クロック系の異なるモジュール間インターフェイス

����� �相同期転送

ハザードを避けるために良く用いられる方法として 相同期と �相同期転送があります。まず、

理解が容易な 相同期転送から図 ����を見ながら説明します。送信側は ������ ����=に従い動

作し、受信側は ������� ����=に従って動作することに注意してください。

REQ

ACK

senderclock

recieverclock

12 3

4

図 ����� 相同期転送

相同期転送では、送信 #��D'側は受信 #%�8'側の受信準備が出来ていることを %�8信号

が であることで確認します。受信準備が出来ていれば ��D信号を �にして送信開始します #図

中 �'。受信側は ��D信号が �となってデータの受信が完了したら %�8信号を �とします #図中

�'。送信側は %�8信号が �となったことを確認して ��D信号を に戻します #図中 �'。受信側

は ��D信号が となったことを確認して %�8信号を に戻します #図中 '。

それでは、実際にシミュレーションで通信モジュールを試してみましょう。相同期モジュール

はあらかじめ ������#/!�%�$ ������#/!�%�として演習ディレクトリに用意してあります。この

モジュールではハザードが比較的短い時間 #�クロック周期以内'に収まることを想定しています。

条件を満たさないと思われる場合には、想定されるハザード時間と必要な転送エラー率から時間待

ちのタイミングを設定してください。テストスクリプトをシミュレーションで確認してみましょう。

!'�#� (&��� ����� ������#/ ������#/

と入力してください。このコマンドはテストモジュールとモジュール間送信モジュールとモジュー

ル間受信モジュールの �モジュールを用いてシミュレーションを実行します。

図 ����と図 ����に ���で記述した 相同期送信回路と受信回路をそれぞれ示します。クロック

系が異なる信号を受けるレジスタの値はハザードとなる可能性が高いため、必ずもう一つのレジス

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 72: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���基礎演習 ��

図 ����� 相同期テストモジュールのシミュレーション波形

タで受け直し、その後段のレジスタの値のみをモジュール内では利用します。

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 73: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� クロック系の異なるモジュール間インターフェイス

������ ������# ������� ��#�������� ��# ������� ��#;�R�������� ��#8�=�

����&� ����������� ����6$����,$����5�

���������� ��= ����= �&����� �

��� �����6� ��# �� ����,� ����6� ����5� ����,���#��� ��������%�����, - 1����5� ��� �

��#8�=���������� � ")"�

��

������� ��#;�R ��� ���� �1����5� ������� � ")6������ �������� ��=!�&������

����� ��= ����= �&�� ��� �%�1����5� ��� �

������� � ")6�%��@��

��

図 ����� 相同期送信回路

������ ������# ����� �;# �������� �;#����������� �;#;�R������ �;#8�=�����&� ����������� ����6$����,$����5�

��� �����6� �;# �� ����,� ����6� ����5� ����,��;#��� ��������%�����,-1����5� ��� �

�;#;�R����%�1����,-����5� ��� �

������� � ")"��

������� �;#8�= ��� �������� � ")6�

��

図 ����� 相同期受信回路

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 74: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���基礎演習 ��

����� �相同期転送

相同期転送よりも高スループットな転送が可能である �相同期転送から図 ����を見ながら説

明します。送信側は ������ ����=に従い動作し、受信側は ������� ����=に従って動作する

ことに注意してください。

REQ1

ACK1

senderclock

recieverclock

12 3

4

REQ2

ACK2

aTxOut

aTxIn

図 ����� �相同期転送

�相同期転送では、送信側は受信側の受信準備が出来ていることを �,@�-�信号と �,@��信号

が一致することで確認します。今、送信要求 #��D�'が発生しているものとします。�,@�-�と

�,@��が一致して、受信準備が出来ていれば �,@�-� 信号を反転して送信開始します #図中 �'。

受信側は �,@�-�信号が反転したことを確認し、データの受信が完了したら �,@��信号を反転し

�,@�-�と同一の論理値にします #図中 �'。これでデータの転送と確認が終了します。この時、図

では �,@�-�と �,@��の両信号ともに �となっています。

次の転送要求 #��D�'が入ると同様に送信側は受信側の受信準備が出来ていることを �,@�-�

信号と �,@��信号が一致することで確認します。受信準備が出来ていれば �,@�-�信号を反転し

て送信開始します #図中 �'。受信側は �,@�-�信号が反転したことを確認し、データの受信が完了

したら �,@��信号を反転し �,@�-�と同一の論理値にします #図中 '。

それでは、実際にシミュレーションでクロック系が異なるモジュール間通信モジュールを試して

みましょう。�相同期モジュールはあらかじめ ������#,!�%�$ ������#,!�%�として演習ディレ

クトリに用意してあります。テストスクリプトをシミュレーションで確認してみましょう。

!'�#� (&��� ����� ������#, ������#,

と入力してください。このコマンドはテストモジュールとモジュール間送信モジュールとモジュー

(�( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 75: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� クロック系の異なるモジュール間インターフェイス

ル間受信モジュールの �モジュールを用いてシミュレーションを実行します。

図 ���� �相同期テストモジュールのシミュレーション波形

������ ������# ������� ��#�������� ��# ������� ��#;�R�������� ��#8�=�

����&� �������$��R���������� ����6$����,�

��� �����6� ��# �� ����,� ����6���#��� ��������%������, ��������-��R������� ��� �

��#8�=�����R������ � ")"�

��

������� ��#;�R ��� �������� � 1����������R������ � ")6�

��

図 ����� �相同期送信回路

図 ����と図 ����に ���で記述した �相同期送信回路と受信回路をそれぞれ示します。クロック

系が異なる信号を受けるレジスタの値はハザードとなる可能性が高いため、必ずもう一つのレジス

タで受け直し、その後段のレジスタの値のみをモジュール内では利用します。

演習 ��� ����を用いたメモリとリクエスタのデータ転送の例題のメモリとリクエスタのクロッ

ク系を分離し、相同期回路を用いてデータの転送を行う回路を作成せよ。

演習 ��� ����を用いたメモリとリクエスタのデータ転送の例題のメモリとリクエスタのクロッ

ク系を分離し、�相同期回路を用いてデータの転送を行う回路を作成せよ。

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 76: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���基礎演習 ��

������ ������# ����� �;# �������� �;#����������� �;#;�R������ �;#8�=�

����&� �������$��R���������� ����6$����,�

��� �����6� �;# �� ����,� ����6��;#��� ��������%������,2��������-1��R������� ��� �

��R������� ")6��;#;�R���

��

������� �;#8�= ��� �������� � 1����������R������� ")"�

��

図 ����� �相同期受信回路

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 77: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ��� 演算回路

��� 演算回路

論理回路を設計する場合に、様々な演算が必要となる場合があります。演算回路はコンピュータ

が現れた頃から多くの工夫がなされてきました。A��回路の時代になっても、集積度の向上とと

もに方式上のトレードオフも変化するため多くの方式が提案され続けています。

この章では定石となっている演算回路をいくつか ���で記述してみましょう。

����� 加算回路

まずは加算回路からです。この演習では扱いませんが、�の補数表記の負の表現を用いる �進数

では加算回路があれば減算回路も簡単に実現できます。

������� �� ����� 8$H$������� �$������� ����������� ���8$H$��

������� �� ����� 8$H$������� �$������� ���������� �� ��� �� 82H2�� �8-H�+�H-�+�8-��

�������� ��� ����� ����$)���������� %������� ��������� ���*$���0$���.$���/��� ���5$���,$���6$���"�

��� ���� ���*!�++���0!�++���.!�++���/!�++

���5!�++���,!�++���6!�++���"!��% ���*!�����*�$)�*�$����0��!�++

���0!�����0�$)�0�$����.��!�++���.!�����.�$)�.�$����/��!�++���/!�����/�$)�/�$����5��!�++���5!�����5�$)�5�$����,��!�++���,!�����,�$)�,�$����6��!�++���6!�����6�$)�6�$����"��!�++���"!�����"�$)�"�$")"�!��

��

図 ����� リプルキャリー加算器

図 ����に基本となるリプルキャリー加算器を示します。リプルキャリー加算器では筆算による

加算と同様に下位の桁から順次桁上げを計算し、上位の桁に足し込む計算を行います。表記を単純

にするために補助的に桁上げを保持する内部端子として ���を作成しています。���ブロックの内

部で全加算器の駆動と ���への値の設定を行っているのでこれらの動作は全て同時に行われるこ

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 78: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���基礎演習 ��

とに注意してください。

リプルキャリー加算器の動作をシミュレーションで確かめてみましょう。

!'�#� ���

シミュレーションスクリプトには加算器の入出力の他にスクリプト内で計算した期待値を書き出し

ています。

リプルキャリー加算器はコンパクトですが、動作速度があまり早くないことが知られています。

その原因は桁上げを最下位の桁から順次上位に送るパスにあります。そこで、一般には桁上げだけ

を別途計算することで高速化する桁上げ先見加算器 #キャリールックアヘッド加算器'が用いられ

ることが多くなります。加算回路はコンピュータの実現上クリチカルパスになる場合が多いため、

この他にも多くの加算器が提案され実装されてきました。

図 ���にキャリールックアヘッド加算器を示します。この加算器は入力信号の各桁を見て、その

桁からキャリーが生成される場合 #& � ��� 'と下からのキャリーを上に転送する場合 # �" �&�� '

の条件を作成します。図では ���がキャリー生成条件を表し、���がキャリー転送条件を表しま

す。ある桁のキャリー入力はその桁にキャリーが生成されているか、下位の桁のキャリー生成条件

からその桁に至るまでキャリー転送条件が継続している場合に真になります。

そこで、各桁のキャリー入力条件が計算できれば最後に入力信号との演算によって加算結果を生

成することができます。

演習 ���� ��ビットの高速加算器を作成してみましょう。

����� 乗算回路

演算系のアプリケーションを実現する時に乗算が必要となる場合があります。���では言語とし

て乗算はサポートしていませんが、乗算の原理を理解していれば簡単に乗算回路を作成できます。

筆算の計算を思い浮かべれば分かるように乗算の過程はひたすら部分積を加算することになり

ます。��� ��の乗算計算例を次に示します。

� �

� � �

� �

� �

� � � �

乗算の様子を観察すると、まず、被乗数と乗数の �桁との部分積を作成し、部分積を乗数の桁に

合わせて配置します。次に部分積の同じ桁同士の和を取り乗算結果とします。

加算の基本回路である全加算器は �つのビットを入力し、�つのビットに縮約する演算器だとみ

なすことができます�。そこで、全加算器を用いて各桁に �つのビットだけが残るまで縮約を繰り返

し行うと最後に通常の加算器で �つの二進数の加算を行うことで乗算結果を得ることができます。

�このような使い方をする時にはキャリーセーブ加算器 �����と呼びます

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 79: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ��� 演算回路

��%の並び方を工夫して入力から出力までの加算器の通過個数をなるべく低減した乗算器をワ

ラスツリー乗算器と呼びます。図 ����にワラスツリーを用いた乗算回路のブロック図を示します。

図 ����は ���で記述したワラスツリー乗算器です。最後の並列加算器の部分は簡単のため加算

演算子を用いています。

乗算のシミュレーションは

!'�#� ����

と実行します。シミュレーションでは入力の全ケースの乗算を実行します。

演習 ���� ワラスツリー乗算器を �� �に拡張し、動作を確認しなさい。

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 80: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���基礎演習 ��

������� �� ����� 8$H$������� �$������� ����������� ���8$H$��

������� �� �

���� 8$H$������� �$������� ���������� �� ��� �� 82H2�� �8-H�+�H-�+�8-��

�������� ��� �

���� ����$)���������� %������� ���������� ���������� ���������� ��������� ���*$���0$���.$���/��� ���5$���,$���6$���"�

��� ����

���*!�����*�$)�*�$")"�!�++���0!�����0�$)�0�$")"�!�++���.!�����.�$)�.�$")"�!�++���/!�����/�$)�/�$")"�!�++���5!�����5�$)�5�$")"�!�++���,!�����,�$)�,�$")"�!�++���6!�����6�$)�6�$")"�!�++���"!�����"�$)�"�$")"�!��

��� ���*!�++���0!�++���.!�++���/!�++���5!�++���,!�++���6!�++���"!��

��� ��� +���� -������0�"�++")"� +������0�"�++")"� -������.�"�++")""� +������.�"�++")""� -������/�"�++")"""� +������/�"�++")"""� -������5�"�++")""""� +������5�"�++")""""� -������,�"�++")"""""� +������,�"�++")"""""� -������6�"�++")""""""� +������6�"�++")""""""�-������"� ++")"""""""��������������� �

% �2)2�����0�"�++")"���

図 ���� キャリールックアヘッド加算器

(�( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 81: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ��� 演算回路

SCSCSCSC

SC SCSCSC

a0b0a1b1a2b2a3b3

s0s1s2s3

0123456

0123456

CPA

7

c

図 ����� 乗算回路

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 82: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���基礎演習 ��

������� ��� ����� �$)$�������� �$������� ����������� ����$)$���

������� ��� ����� �$)$�������� �$������� ���������� �� ��� �� �2)2��� ��-)�+�)-��+��-���

�������� ���� ����� ��/�$)�/�������� %����

��� �"�/�$�6�/�$�,�/�$�5�/����� ����/�$��)�/����� ���"$���6$���,$���5$���/$���.$���0$���*�

��� ��" �-/4)�"�� �6 �-/4)�6���, �-/4)�,�� �5 �-/4)�5�����"!����"�6�$�6�"�$")"�����6!����"�,�$�6�6�$�,�"������,!����6�,�$�,�6�$�5�"������5!����6�5�$�,�,�$�5�6������/!������"!�$���6!�$")"�����.!������6!�$�"�5�$���,!������0!������,!�$���5!�$")"�����*!������5!�$�,�5�$�5�,���

% ��5�5�++���*!�++���0!�++���.!�++���/!�++���"!�++�"�"�� 3����*!�++���0!�++���.!�++���/!�++")"++")"++")"��

��

図 ����� ���によるワラスツリー乗算器

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 83: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

��

第章 ���と��� ���による���設計演習

��� はじめに

��$%や ���+の普及とそれらのベンダーの �+%ツールが無料もしくは安価に利用可能になっ

たことによってプロトタイプや試作レベルの ���設計は容易になっています。多くの場合、��$%

や ���+を利用する時には合成可能な �,�レベルの記述までの理解があれば済んでいます。

ところが、��$%や ���+ではゲート単価が高いことや性能が低いため、大規模に量産を行っ

たり高速な信号を扱う必要のある %���ではセルベース ���やマスタースライス ���などが主流

になっています。

ここでは 0>�:63�4とオープンソース �+%ツールである %��!��. 3�4を用いて ���からセルベー

ス ���を作成する演習を簡単な例題を元に実施します。

0>�:6は ���の記述を �2+�の �,�形式に変換し出力します。%��!��. は �2+� �,�記述を

構造記述形式のネットリストに変換します。%��!��. が出力する �2+�構造記述形式はセルベー

ス設計のための回路記述であり、回路の基本ブロックであるセルとその接続を表す記述から構成さ

れます。スタンダードセルやゲートアレイではシステム設計者が取り扱う最小単位が論理セルにな

り、ネットリストで表された回路を配置配線のツールを用いてシリコンレイアウトに変換します。

設計者が使えるセルの種類は ���の製造業者 #ファウンダリ'ごと異なっています。また、セル

の特性 #回路構成、遅延時間、消費電力'も当然ながら違いますので論理合成では製造に合わせた

セルの集合を扱う必要があります。利用可能なセルの構造や基本特性などを定義したファイルをセ

ルライブラリと呼びます。セルの設計には、���製造の設計ルール #デザインルール'が大きな影

響を持ちます。そこで、セルライブラリはファウンダリによる違いだけでなく、各ファウンダリが

提供するプロセスごとに異なります。ファウンダリごとのセルライブラリを用意するには膨大な工

数が必要であり、商用 �+%ベンダーが対応してきました。

日本では �+��3�4が商用 �+%を学術目的に無償貸与していますが、世界的に見て教育のために

���を試作する場合に、商用�+%の利用は困難であり、一番のネックであったデザインルールの整備

にいくつかの試みがあります。一つには米国を中心としたA����3�4のスケーラブル �A��#0.7"0'

ルールであり、複数のベンダで利用可能なデザインルールを公開しています。ユーザは 0.7"0に

合わせて独自のセルライブラリを設計することでベンダに依存しないライブラリを作成できます。

Page 84: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 � ���と ������ �による ��� 設計演習

本稿で用いる %��!��. はデザインルールとセルライブラリにユニークな手法を取り入れていま

す。%��!��. では基本セルはスケーラブルセルライブラリ #0@�!;'であり、仮想的な配置情報しか

持たないように設計されています。この仮想セルライブラリはデザインルールファイルを記述する

ことで多くの設計ルールに合わせ込みが可能になります。

%��!��. に標準的に用意されているデザインルールファイルは仮想のファウンダリの仮想のアル

ミ �層 ����プロセスである .7"0用のライブラリです。この仮想デザインルールを用いて ���

のチップレイアウトまでの試行が出来ます。また、デザインルールファイルを独自に書き下ろすこ

とで他のデザインルールにも柔軟に対応できます 3�4。

SFLsource

VHDLbehaviour

sfl2vh

xsch

adder.sfl

adder.vhdl

LSI structureVHDL

sxlibdataflow lib

vasy VHDLdata flow

adder.vbe

boom

boog

VHDLstructure

adder.vst

dataflow optimizer

logic synthesizer

behaviour converter

ocp

nero

coresymbolic layout

adder.ap

circuit view

cell placer

router

ring lsi symboliclayout

chip.ap

s2r

lsi physicallayout

chip.cifchip.vstchip.rin

sxlibcell library

Alliance tools

Alliance library

cmosdesign rule

図 ��� 0>�:6と %��!��. を用いた ���設計の流れ

図 ��に 0>�:6と %��!��. を用いた ���設計の流れを示します。また、�+%ツールの概要を表

��に示します。

(�( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 85: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ��� はじめに

表 ��� 演習で用いる �+%ツール

� �!" ���から �2+�の合成可能な動作記述への変換

!��# �2+�の合成可能な動作記述から %��!��. のデータフロー記述への変換

$��% データフロー記述最適化

$��� 論理合成

��� セル駆動能力調整

��& セル配置

���� 配線

���� ��リング合成ならびにチップ配線

��� 実レイアウト作成

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 86: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 � ���と ������ �による ��� 設計演習

��� 論理合成の試行

それでは、さっそく論理合成を試してみましょう。演習用のパッケージは ����@�(�@��ディレ

クトリに入れてあります。

�� ����@�(�@��

としてこのディレクトリに移動してください。

����� 簡単な論理回路

次の例題を �������!�%�という名前で作成してください。この例題は二つの入力端子に入力し

た値を論理積演算し、それを出力端子に転送しています。

例題 ������ ������� ������� ����� �$)������� %�

% �-)��� �この例題を論理合成するには次のコマンドを入力します。

��=� �8;FG� ������� �������!#��

大量のメッセージが出て論理合成が完了します。論理合成のメッセージには下記のように面積と遅

延時間ならびに使用論理セルの情報が示されます。

8��� �� %�� P�������!���P!!!6,." ������&�@ ����(���� �������

:�����!!!

�,�#,� 6 �6""O�

������ 6

����� ���@ ��� &��������!!!5,/ �� %��� P)P �� P%P

仮想配置状態で �����の面積が予想され、�入力 %�+セル #�,�#,'が �つ使用されます。ま

た、クリチカルパスは入力端子 )から出力端子 %までの �� 0と計算されています。

合成後回路図の表示

次にどのような回路が生成されたのか見てみましょう。

#��@ (� �������

図 �� に合成結果の図を示します。�入力 %�+回路が合成されていることが分かります。

配置配線後 ���レイアウトの表示

配置配線コマンドを実行し、回路のレイアウトを作成します。この段階ではデザインルールに依

存しない仮想レイアウトとなっています。

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 87: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ��� 論理合成の試行

��=� �8;FG� ������� �������!��

このレイアウトを画面に出力して見てみましょう。�����は �����(�J���のメニューを選択し、

マウスでレイアウト表示範囲を示さないとレイアウトの詳細表示がされないことに注意してくだ

さい。

����� (� �������

図 ��にレイアウト結果の図を示します。

図 ��� %�+回路の合成結果

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 88: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 � ���と ������ �による ��� 設計演習

図 ��� %�+回路のレイアウト

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 89: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ��� 論理合成の試行

����� 加算回路

次の例題を ���!�%�という名前で作成してください。この例題は二つの入力端子に入力した値

を加算し、それを出力端子に転送しています。

例題 ������ ������� ��� ����� ��/�$)�/�������� %�/��% �3)��� �この例題を論理合成するには次のコマンドを入力します。

��=� �8;FG� ��� ���!#��

大量のメッセージが出て論理合成が完了します。論理合成のメッセージには下記のように面積と遅

延時間ならびに使用論理セルの情報が示されます。

8��� �� %�� P���!���P!!!,/,." ������&�@ ����(���� �������

:�����!!!

#�,�#6� * �0/O�

)�%�#,� 6 �/O�

��,��,,,�#,� 6 �6"O�

�,�#,� 6 �.O�

��,�,,�#,� 6 �7O�

�5�#,� 6 �0O�

������ 6,

����� ���@ ��� &��������!!!6�/0 �� %��� P� 6P �� P% 5P

仮想配置状態で �����の面積が予想されています。また、クリチカルパスは入力端子 �6から

出力端子 %5までの ��� 0と計算されています。

次にどのような回路が生成されたのか見てみましょう。

#��@ (� ���

図 �に合成結果の図を示します。

配置配線コマンドを実行し、回路のレイアウトを作成します。この段階ではデザインルールに依

存しない仮想レイアウトとなっています。

��=� �8;FG� ��� ���!��

このレイアウトを画面に出力して見てみましょう。�����は �����(�J���のメニューを選択し、

マウスでレイアウト表示範囲を示さないとレイアウトの詳細表示がされないことに注意してくだ

さい。

����� (� ���

図 ��にレイアウト結果の図を示します。

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 90: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 � ���と ������ �による ��� 設計演習

qi1

i0 f_3_ins

q

i4

i3

i2

i1

i0

oa2ao222_x2

oa2ao222_x2_ins

q

i3

i2

i1

i0

aux5_ins

q

i2

i1

i0a3_x2_ins f 3

a 1

a3_x2_sig

a3_x2_sig

aux0

aux0

aux0

aux0

aux5

aux5

mbk_buf_aux5

oa2ao222_x2_sig

oa2ao222_x2_sig

xr2_x1_2_sigxr2_x1_2_sig

xr2_x1_3_sigxr2_x1_3_sig

xr2_x1_sigxr2_x1_sig

a 0

a 0

a 0

a 0

a 1

a 1

a 1

a 1

a 2

a 2

a 2

a 2

a 3

a 3

b 0

b 0

b 0

b 0

b 1

b 1

b 2

b 2

b 2

b 3

b 3

f 0

f 1

f 2

f 3

f 0

f 1

f 2

a 0

a 2

a 3

b 0

b 1

b 2

b 3

m_clockp_reset

qimbk_buf_aux5

qi1

i0xr2_x1_3_ins

qi1

i0 f_2_ins

qi1

i0xr2_x1_2_ins

qi1

i0 f_1_insq

i1

i0xr2_x1_ins

qi1

i0 f_0_ins

qi1

i0aux0_ins

図 �� 加算回路の合成結果

図 ��� 加算回路のレイアウト

(�( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 91: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ��� 論理合成の試行

����� レジスタ転送を伴う加算回路

次の例題を �����!�%�という名前で作成してください。この例題は二つの ビット入力端子に

入力した値を加算し、それを複数のレジスタで遅延させた後出力端子に転送しています。クロック

信号の配線を確認するためにあえてレジスタの数を増やしています。

例題 ����� ������� ����� ����� ��/�$)�/�������� %�/����� �6�/�$�,�/�$�5�/����� �/�/�$�.�/�$�0�/����� �*�/�$���/�$�7�/��

��� ��5� �,� �,� �6� �6� �3)��0� �.� �.� �/� �/� �5��7� ��� ��� �*� �*� �0�% �7���� �この例題を論理合成するには次のコマンドを入力します。

��=� �8;FG� ����� �����!#��

大量のメッセージが出て論理合成が完了します。

論理合成のメッセージには下記のように面積と遅延時間ならびに使用論理セルの情報が示され

ます。

8��� �� %�� P�����!���P!!!67/""" ������&�@ ����(���� �������

:�����!!!

�%%6�#/� 50 ��5O�

#�,�#6� * ��O�

)�%�#,� 0 �5O�

�,�#,� 5 �6O�

���#,� , �"O�

��,�,,�#,� 6 �6O�

���,�,,�#6� 6 �"O�

���#/� 6 �"O�

������ .*

����� ���@ ��� &��������!!!,".5 �� %��� P� "P �� P�6�5���P

仮想配置状態で ����の面積が予想され、クリチカルパスは入力端子 �"から内部のレジス

タ入力端子 �6�5���までの ��� 0と計算されています。

どのような回路が生成されたのか見てみましょう。

#��@ (� �����

図 ��に合成結果の図を示します。

���で記述した加算演算は動作記述合成プログラム ����によって展開され、)���によるデー

タフロー最適化を受けた後、)���によってネットリスト #構造記述'に変換されます。これらの合

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 92: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 � ���と ������ �による ��� 設計演習

図 ��� �// �の合成結果

成系は遅延時間と実装面積のバランスを取ったり、最適化アルゴリズムの指定など様々なオプショ

ンが指定できるようになっていますが、本演習では詳細は割愛します。

表 ��� %��!��. 論理合成ツールの主要な最適化オプション

ツール名 オプション 説明

;""7 1� �-7 最適化レベル #1�'デフォルト #ローレベル'

1/ �-7 遅延最適化割合デフォルト F

1! �-7 繰り返し回数

;""& 17 �-7 最適化モード エリア� ����遅延

�""� 17 �-7 最適化モード エリア� ����遅延

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 93: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ��� ���レイアウトの試行

��� ���レイアウトの試行

論理合成を行った結果はネットリストと呼ばれる回路図の接続情報になります。ネットリストか

ら ���作成のためのマスク情報を作成することを ���レイアウトと呼びます。セルベース設計に

おけるレイアウトはセルをシリコン上に並べる配置とセルとセルの間の接続を行う配線によって行

います。

配線の遅延がシステムにおいて大きな重要性を増しているため、この両者は実は密接に関係して

います。そこで、大規模な ���の設計では配置配線後の遅延を見ながら配置の見直しや論理合成の

見直しを行う必要があり、フロアプランを設計者が十分管理することが要求されます。

����� 基本セル

セルベース設計では基本セルと呼ぶあらかじめレイアウトを作成済みのセルを組み合わせて ���

を設計します。基本セルは ���製造元が用意することが多いのですが、その場合には製造元を切替

えることが難しくなります。%��!��. では製造元に依存しない仮想配置の基本セル #��種類'を用

意してあり、仮想配置から実配置への変換を製造プロセスごとに用意するデザインルールファイル

に従って行います。

図 ��に%��!��. の基本セルのレイアウト例を示します。図では左からインバータ、�入力�%�+

回路、�入力 ���回路となっています。

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 94: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 � ���と ������ �による ��� 設計演習

図 ��� %��!��. の基本セルの例

(�( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 95: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ��� ���レイアウトの試行

����� 配置配線演習

例題を用いて配置配線の演習をしましょう。

例題 ����� ������� ���/ ����� ��/�$)�/�������� %�/��% �-)��� �この例題は、各ビットごとに論理積を行い、その結果を出力するものです。各演算の間には関係

がないので配置配線は簡単に行えます

まず、ネットリストを作成しましょう。

��=� �8;FG� ���/ ���/!#��

思ったような回路が合成されているか確認してみましょう。

#��@ (� ���/

次に、ネットリストに含まれるセルをシリコン上に配置しましょう。

��� (��� ���/ ���/

図 ��� 基本セルを配置したレイアウト

図 ��が基本セルを配置したレイアウトを示します。ここでは、配線とコネクタの様子が分かる

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 96: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 � ���と ������ �による ��� 設計演習

ようにセル内部の展開はしていません。レイアウトの上下にこのモジュールと外部との接続点 #コ

ネクタ'が定義されています。オプションで指定した(���はコネクタをレイアウトの上下にラン

ダムに配置することを指示します。

次に、配置済みのレイアウトに対して配線をしてみましょう。

���� ���/ ���/

図 ��� 配線後のレイアウト

図 ��に配線後のレイアウトを示します。モジュールのコネクタと基本セルの入出力のコネクタ

がアルミ配線により接続されます。

アルミ以外の階層も観測するために、�����メニューから J���を選択し、全レイアウトをマウ

スで囲みます。図 ��にフラット化後のレイアウトを示します。

%��!��. で作成したここまでのレイアウトと実際のマスクパターンは多少違いがあります。とい

うのは、%��!��. では配置配線は各要素の相対位置だけが正しい仮想ルールを用いているからで

す。仮想ルールを用いて作成されたレイアウトは �,�ツールで実際のデザインルールとのすり合

わせを行ってマスクパターンが生成されることになります。

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 97: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ��� ���レイアウトの試行

図 ��� 配線後のレイアウト #>��化後'

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 98: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 � ���と ������ �による ��� 設計演習

表 ��� %��!��. の主要な入出力セル

セル名 説明

! 0 入力専用ピン

" 0 出力専用ピン

"9 0 出力専用ピン #駆動能力小'

!" 0 � 0��� 出力ピン

!"9 0 � 0��� 出力ピン #駆動能力小'

!"� 0 � 0��� 入出力ピン

!"�9 0 � 0��� 入出力ピン #駆動能力小'

.? 0 クロック入力専用ピン

:// 0 ��電源ピン

:00 0 ��グランドピン

://! 0 内部電源ピン

:00! 0 内部グランドピン

:// .? 0 クロックドライバ付き ��電源ピン

:00 .? 0 クロックドライバ付き ��グランドピン

://!.? 0 クロックドライバ付き内部電源ピン

:00!.? 0 クロックドライバ付き内部グランドピン

����� 入出力セルとチップレイアウト

通常の �A��回路では ���内部の信号レベルは電源電圧によって決まりますが、���の入出力

には運搬時や実装時に静電気やオーバシュート、アンダーシュートなどによって大きな電圧が印加

される可能性があります。そのような場合に ���が破壊されないように入出力ピンに接続する回

路は特別な設計がなされます。また、���外部の静電容量は非常に大きいため、大きな駆動能力を

持つトランジスタが要求されます。このように入出力回路には内部回路と異なる要求があるため特

別な回路とレイアウトを用意して対応します。入出力回路を実現する基本セルを入出力セルと呼び

ます。

図 ��に主な入出力セルの名前と機能をまとめました。%��!��. では入出力セルは ���の周辺部

に配置されます。そして、入出力セル上を �本のアルミ配線が ���を囲むようにリング状に形成さ

れます。このリングは外側から ��グランド配線、��電源配線、入出力セル用内部電源配線、入出

力セル用内部グランド配線、クロック配線となります。また、入出力セルと内部回路の間にさらに

リング状の電源ラインが作成されて電源を強化しています。内部電源リングは外側から内部グラン

ド配線、内部電源配線となります。

���チップの角に配置するピンはこれらの内部リングに接続する回路を生成する領域が取れない

ため、電源専用のピンとする必要があることに注意しましょう。

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 99: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ��� ���レイアウトの試行

入出力セルを含むネットリスト

���内部回路と入出力セルを接続するためには、入出力セルを含むネットリストを生成する必要

があります。また、入出力ピンを ���周辺に配置する場合に、ピンの物理的な場所の指定も必要で

す。%��!��. では前者を �2+�構造記述のネットリストとして作成し、後者を �%+ リングルー

タ ���に対するパラメータファイルとして与えます。���はあまりに小さな内部コアを持つ回

路に対しては配線を失敗することがあるので、ここでは例題 ���の回路を対象に合成を行います。

���へのパラメータファイルとして �@�!��を図 ���のように作成します。

&�������" ���6 ���, ���5 �

����@� ����� ���= ����� �

�������)" ��)6 ��), ��)5 �

����@� ��%" ��%6 ������ ������ ��%, ��%5 �

図 ���� �%+リングルータパラメータファイル例

図 ���� 入出力ピンを含む ���レイアウト

次のコマンドで ���レイアウトを作成しましょう。

��� �@� �@�

�,� (� (� �@�

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 100: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 � ���と ������ �による ��� 設計演習

図 ���に ���レイアウト作成に必要な ��パッドを記述した �2+�構造記述 #�@�!���'の例

を示します。ここで、あらかじめ、ネットリストファイル �@�!���はディレクトリ中に作成され

ていることに注意してください。�@�!�%は ���� .6 ��� �7 /!�� �"�7��#���'と呼ばれる ���

マスクパターン情報です 34。今回の演習では %��!��. に添付されている仮想 ���7のプロセス向

けのマスクパターンとなっていますが、デザインルールファイルを変更することで他のプロセスへ

も容易に対応可能です。

(�( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 101: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ��� ���レイアウトの試行

�� �� ���� ����� � ���������� � ������ � ������� �� �� �� !"�#��� � ������� �� �� �� !"�$��% � ������� �� �� �� !"�&������ � �� &������ � �� &����� � �� &����� � � "�

�' �����(��) ���*� ��� �+ ���� ��������� �����

���� � ���������� � �� ��������� � ������ � ������� �� �� �� !"�#��� � ������� �� �� �� !"�$��% � ������� �� �� �� !"�&����� � ��&����� � � "�

�' ����������������� ���������������� � ������% � ��&������ � ��&������ � ��&������ � ��&������ � �"���� ����������������� ��������������� � ����% � ������� � ��&������ � ��&������ � ��&������ � ��&������ � �"���� ����������������� �&����������������� � �������% �%,�#� #%��&������ � ��&������ � ��&������ � ��&������ � �"���� ����������������� �&����������������� � �������% �%,�#� #%��&������ � ��&������ � ��&������ � ��&������ � �"���� ����������������� �&����������������� � �������% �%,�#� #%��&������ � ��&������ � ��&������ � ��&������ � �"���� ����������������� �&����������������� � �������% �%,�#� #%��&������ � ��&������ � ��&������ � ��&������ � �"���� ����������������� ������������� � �������% � ������� � ��&������ � ��&������ � ��&������ � ��&������ � �"���� �����������-��� ��� � #��&������ �� �� !"���-��� #�� � #��&������ �� �� !"���-��� $�� � #��&������ �� �� !"���-��� ��� � #����-��� ��� � #����-��� &��� � #����-��� &��� � #���. ����������� ��� �����/0���1#/0#��1$/0$��1�������/0���1������/0&��1&��/0&��1&��/0&��"������������ ��� ����&���/0&���1&���/0&��1&���/0&���1&���/0&��1���/0�������1��/0���"���&�����&�������� ��� ����&���/0&���1&���/0&��1&���/0&���1&���/0&��1���/0���1��/0���"���&�����&�������� ��� ����&���/0&���1&���/0&��1&���/0&���1&���/0&��1���/0���1��/0���"���&�����&�������� ��� ����&���/0&���1&���/0&��1&���/0&���1&���/0&��1���/0���1��/0���"���&�����&�������� ��� ����&���/0&���1&���/0&��1&���/0&���1&���/0&��1���/0���1��/0���"����!������ ��� ����&���/0&���1&���/0&��1&���/0&���1&���/0&��1���/0��!"1/0����!""����2������ ��� ����&���/0&���1&���/0&��1&���/0&���1&���/0&��1��/0���1���/0��2"1/0����2""����3������ ��� ����&���/0&���1&���/0&��1&���/0&���1&���/0&��1��/0���1���/0��3"1/0����3""����������� ��� ����&���/0&���1&���/0&��1&���/0&���1&���/0&��1��/0���1���/0���"1/0�����""���#!������ ��� ����&���/0&���1&���/0&��1&���/0&���1&���/0&��1��/0���1���/0#�!"1/0#���!""���#2������ ��� ����&���/0&���1&���/0&��1&���/0&���1&���/0&��1��/0���1���/0#�2"1/0#���2""���#3������ ��� ����&���/0&���1&���/0&��1&���/0&���1&���/0&��1��/0���1���/0#�3"1/0#���3""���#������� ��� ����&���/0&���1&���/0&��1&���/0&���1&���/0&��1��/0���1���/0#��"1/0#����""���$!������ ��� ����&���/0&���1&���/0&��1&���/0&���1&���/0&��1��/0���1���/0$�!"1�/0$���!""���$2������ ��� ����&���/0&���1&���/0&��1&���/0&���1&���/0&��1��/0���1���/0$�2"1�/0$���2""���$3������ ��� ����&���/0&���1&���/0&��1&���/0&���1&���/0&��1��/0���1���/0$�3"1�/0$���3""���$������� ��� ����&���/0&���1&���/0&��1&���/0&���1&���/0&��1��/0���1���/0$��"1�/0$����""���� ����

図 ���� ��パッド接続のための �2+�構造記述

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 102: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 � ���と ������ �による ��� 設計演習

��� 階層構造を持つ論理の合成���プロセッサ �� �の合成手順

%��!��. には �つのファイルには �つのモジュールしか許さない制限事項があります。例えば、

����プロセッサの論理ファイルには複数のモジュールが入っていますので、そのまま合成すると

失敗します。��#ディレクトリに移動して実際にレイアウトの作成をしてみましょう。

下記の手順でレイアウトを行います。

�� ��#

�%�,�@ ��#!�%� (���� (�

���� (� (� (� (S ( �@�� ��#!�@��

%�� � T!�)�

��

)��� U)������� C !�)�U

����

��� ��# ��#

���� ��# ��#

�%�,�@のオプション(����はモジュールごとに別々のファイルを作成することを指示していま

す。また、(�は �2+�の予約語と競合しないように生成する �2+�ファイル中の信号名を変換

します。

����のオプションで(Sは階層構造を持つ �2+�ファイルであることを指示します。����は

%��!��. データフロー形式の �2+�ファイルを!�)�の拡張子が付くファイルに出力するので、こ

の拡張子を持つ全てのファイルについて )���で論理合成を行います。合成が終了したら ���と

����で配置配線を行います。����クラスの論理規模になると配置配線にはかなりの時間が必要

なります。

配置配線後の ����レイアウトを図 ��に示します。

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 103: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 �� 階層構造を持つ論理の合成���� プロセッサ ����の合成手順

図 ��� 配置配線後の ����プロセッサレイアウト

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 104: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 � ���と ������ �による ��� 設計演習

��� レイアウトからの�����回路シミュレーション

%��!��. はレイアウトからネットリストを抽出する機能を持ちます。そこで、この機能を用いて

�����ネットリストを抽出し、回路シミュレーションをしてみましょう。ここで再度、例題 ,!6

の回路 #�������!�%�'を用います。ネットリストの抽出には仮想配置が行われた回路を用いるの

で、仮想配置ファイル �������!��が出来ていない場合には、本章を参考に作成してください。

それでは、次のコマンドによって、�����ネットリストを作成しましょう。

��=� �8;FG� ������� �������!��

% &��� ��������� �� � ������% &��� ���'�� '����� �$()*(+,$% -��� � ��.��.!!!! ��"��"�� �" ,.�*.���( �� �$"�/"*�

% 012345 � � ������� ������ '�� '��

��� ��� � ������ * / + ( $ ) �% 132 � # '��% 132 $ # ������% 132 ( # �������% 132 * # �% 132 / # % 132 + # �% 132 ) # '��6�������/ + , ) ) � 7#�8 9#��8 �&#(�: �-#(�: :&#((8 :-#((86�������* ) / , ) � 7#�8 9#��8 �&#��: �-#��: :&#�(8 :-#�(86�������( , * ) ) � 7#�8 9#��8 �&#��: �-#��: :&#�(8 :-#�(86�������$ , * � � � 7#�8 9#��8 �&#��: �-#��: :&#�(8 :-#�(86�������� � , + � � 7#�8 9#��8 �&#��: �-#��: :&#�(8 :-#�(86�������� � / � � � 7#�8 9#��8 �&#��: �-#��: :&#�(8 :-#�(8;) � � (�/*��<�(;+ $ � (�,�<�/;/ ( � (�,�<�/;* * � ���,$�<�(;( / � $�/���<�(;$ + � $��/(�<�(;� , � ��,/$*�<�(;� ) � (�)$��<�(�� �� � ������

図 ���� 抽出した �����ネットリストの例

図 ���に抽出した �����ネットリストを示します。�入力 �%�+ゲートとインバータが直列

に接続されているネットリストになっています。また、浮遊容量が計算されて付加されていること

が分かります。

次に、抽出されたネットリストを回路シミュレータ 0 !. �を用いて検証してみましょう。検証

のためのシミュレーションスクリプトを図 ���に示します。

抽出したネットリストをインクルードし、サブサーキットのインスタンスを #"として作成しま

す。次に、回路の負荷容量として ���を与え、電源と入力ピンの電圧をそれぞれ指定します。ま

た、トランジスタのモデルパラメータ文や制御コマンドなど必要な記述を追加しています。�����

シミュレーションに必要な詳細な記述については文献 3�4を参照してください。シミュレーション

スクリプトを �������!����として作成し、� !. �でシミュレーションを実行してみましょう。

����5 �������!����

スクリプトに問題がなければプロンプトが出て入力待ちになります。

(�( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 105: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ��� レイアウトからの ��� �回路シミュレーション

% &���$ ��������� �����" � ������

������ � ������'��#$ �#(�� �����#��* ��#��$/ ��#���� ��#�� �� #(��/ '��#��*������� � ������'��#$ �#,�� �����#��( ��#��$+ ��#���� ��#�� �� #���/ '��#��*�

�� ����� � ��������

� � � � � '�� � � �������� � � ��'�� '�� � �� *'� � � ������ * �� � � � � � *� � ��� ��' � ������ * $* � � � � � *� � ��� ��

���� � � ��� ��� �

図 ���� �����シミュレーションスクリプトの例

����� T ����5 �������� �#������ �������

���� 6 (�

ここで、シミュレーションの実行コマンド ��� を入力し実行させます。シミュレーションが終了

したら、次のコマンドで回路波形を観測してみましょう。

���� ���� ��)� ��%�

���� �����

図 ���に入出力電圧波形を図 ���に電源電流波形をそれぞれ示します。

次に、もう少し複雑な例題として ���言語でレジスタを用いた例を試してみましょう。図 ���

の回路を %%!�%�として入力し、論理合成を行って �����ネットリストを作成してください。

作成した �����ネットリストのサブサーキット文を見て、インスタンス生成を行う �����シ

ミュレーションスクリプトを図 ��のように記述します。

演習 ����図 ��のスクリプトを用いてレジスタを用いた回路 #図 ���'の �����シミュレーショ

ンを行い、$ %$ ������=のそれぞれの波形を表示せよ。

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 106: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 � ���と ������ �による ��� 設計演習

図 ���� 回路シミュレーションによる入出力電圧波形

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 107: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ��� レイアウトからの ��� �回路シミュレーション

図 ���� 回路シミュレーションによる電源電流波形

������ %% ����� ������� %���� ����� �� � �% ��

��

図 ���� レジスタを用いる回路の例

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 108: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 � ���と ������ �による ��� 設計演習

T ����5 �������� �#������ %%

!����� �� ���������� 5 =� /"� ����� "!. �@ "!50 �� "!6�3 ��# ,"� ���) /�360 ���# ,�3. �V 6!,5�(/�!����� �� ���������� 5 =� �"� ����� "!/ �@ "!5* �� "!6�3 ��# ,"� ���) ,�360 ���# ,�3. �V 5!�.�(/�

!������ %%!��

#" % ������= ������� ��� ��� %%�� % " 6�%

�� ������� " �� "�� ��� " �� "��� ��� " �� .

� " ������. " 6"�� 6"�� 6"�� 0"�� ,""����� ������= " ������" . ."�� "�� "�� 6"� 6""���

!���� 6�� ,""��

!���

図 ��� �����シミュレーションスクリプト

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 109: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ��� まとめ

��� まとめ

%��!��. の論理合成系の使い方の説明をしました。ここで示したように、���から ���のレイ

アウトファイルまで演習環境だけで作成が可能です。%��!��. のデザインルールファイルを変更す

ることによって �+��3�4などで実際に ���を製造することができます 3�4。

演習で用いた E�=�%��の内容を図 ���に示します。

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 110: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 � ���と ������ �による ��� 設計演習

2�4=32#�����;>0:#���6�4=01#��??6?:2#�??=?:2#7??1?:2#

���" @�;>0:�����

@�2�4=32��'���"@�2�4=32����� 6�����������'� @�2�4=32����� <?

@�2�4=32��' �"@�2�4=32��'���'��! <� < <� <0 '��� @�2�4=32��'���

@�2�4=32��'��"@�2�4=32��' � ��� @��??6?:2� @�2�4=32� @�2�4=32� ��� @��??=?:2� @�2�4=32�

@�2�4=32����"@�2�4=32��'����� @�7??1?:2� <� @�2�4=32�

@�2�4=32���"@�2�4=32������ <����� @�6�4=01� <�� � @�2�4=32� @�2�4=32� ��� @�2�4=32� @�2�4=32�

@�2�4=32���"@�2�4=32���6�A�&:0�6?-37#.���.�����.����� ��.���.����������� B6�A�?82�7?#� B������ <�� <�� <� @�2�4=32�

@�;>0:���"@�2�4=32����� � @�;>0:� @�;>0:�

@�;>0:�����"@�;>0:������ <' <� @�;>0:�

�����"@�;>0:���������� <� @�;>0:�

�����"@�2�4=32�������� <� @�2�4=32�

��"�� <����� @�2�4=32�

���� "<�� <� @�2�4=32��'���<�� <� @�2�4=32��'��<�� <� @�2�4=32����<�� <� @�2�4=32���<�� <� @�2�4=32���<�� <� @�2�4=32��' �<�� <� @�;>0:�����<�� <� @�;>0:���<�� <� @�;>0:���<�� <� �����������

図 ���� 演習で用いた A�? B�

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 111: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���

第�章 ����� ���による�言語連動シミュレーション演習

��� はじめに

ソフトウェア/ハードウェア・コデザインが組み込み分野を中心に重要度を増しています。��0� 7�

のようにハードウェアを �ベースで設計する方法も模索されていますが、元々の言語仕様において

並列性を考慮していない言語体型に無理矢理ハードウェアを記述するクラスを導入したため、設計

者の意図を十分に反映できるものとはなっていません。また、� �!�"&にも ��"&��77!�& ���&-�&

��� �<�. #���' と呼ぶ連動のための仕様が定義されていますが、こちらは逆にソフトウェアへの

インターフェイスが限定されているために、利用は容易ではありませんでした。

���年、当時の +!&!��� �E-! 7 ��社では %� 6�プロセッサのシミュレーションのため � �!�"&

を �に変換するツール #� �!���"�'を作成しました。このツールは +-�� $��;!らの努力により

����年に $�G �-;�!. �!. �0 の元にオープンソースとなり、��年にH!�0"� ���/ �によって

�IIに書き換えられました。現在、� �!���"�はH!�0"� ���/ �によってアクティブにサポートさ

れています 3�4。

� �!���"�は変換のターゲットに �IIと ��0� 7�の �種類の言語を指定できます。シミュレー

ションだけで用いることを考えると、�IIを用いた方が便利であるため、本演習では � �!���"�に

よる �II言語ベースのシミュレーション演習を行います。

Page 112: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���������による 言語連動シミュレーション演習

��� ���������による論理シミュレーション

図 ���に � �!���"�を用いるシミュレーション環境を示します。

SFL SourceC++ basetest script

TranslatedVerilog source

TranslatedC++ source

Executable

sfl2vl

verilator

gcc

gcc

Logic and Simulation entry

図 ���� � �!���"�を用いるシミュレーション環境

���で記述する論理回路を 0>�:�で � �!�"&に変換し、その後、� �!���"�で �IIに変換したも

のを �コンパイラで実行形式に落します。

人間が入力する 2+�記述と �II記述を見てみましょう。図 ���に ���で記述する簡単な ��

ビット全加算器を示します。���の例題では制御端子名に ��を用いる例が多いのですが、� �!���"�

では �IIの予約語である ��は利用できないため、�#��を用いています。また、� �!���"�では、

加算などの演算において対応する入力のビット数が合っていなくてはなりません。これらに注意し

て ���を記述します。

����� ���60 ����� �� ����� �6�60� ����� �,�60� ������� ����60� ������ �#�� �

������� �#�� ��� �6 3 �, 3 �6.4")" ++ �����

図 ���� テスト回路例

図 ���は 2+�記述をテストするための �IIテストスクリプトです。� �!���"�ではモジュール

名の先頭に*�*を付けたクラス名が生成されるので、このクラスのインスタンスを作成します。イ

(���( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 113: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� ���������による論理シミュレーション

ンスタンス名(�端子名で端子に値を設定したり端子値の参照ができるので、シミュレーションに

必要な情報を設定します。

実際に回路の評価をするにはインスタンス名(�������のメソッドを呼び出します。

4������ �����)!@�4������ �����!@�4������ ���������!����4������ BI���60!@BI���60 T���60��� �������� �������� �� ��$ )��������� �� ������� "����60 ��& I���60����60(��#�� 6�%��� "��6"�33� �

�� �������� - "#*%%%�)� �������� - "#*%%%����60(��6 ������60(��, )�����60(��� "����60(��������IK�N; 9�J �BO5�� �6�O.��3�,�O.�� ����O.�� O�W�B$

�������$ ��$ )�$ ���60(����$����60(���� ����3)��-"#%%%%��XB�LB�B9FB��

�������33��

������ �"���

図 ���� テストスクリプト例

二つの入力端子に乱数を与え、キャリー入力には を設定した後、������メソッドを呼び出し回

路を動作させています。起動後に出力端子の値と �IIで計算した加算結果を比較してシミュレー

ション結果を表示させます。ここで、� �!���"�では IK�N; 9�Jは ����%の別名です。

図 ��にテスト回路のシミュレーション結果を示します。�個の計算は全て �IIでの計算値と

一致していたことが分かります。

"� �6�6**0*�3�,� 76.�� ����,07,.� �L6� �6� 0,/7�3�,�6�./*� ����,/*70� �L,� �6�,5055�3�,�,5�"*� ����/*//"� �L5� �6� .67/�3�,�,,*0/� ����,*7.�� �L/� �6� *7**�3�,�567/7� ����577,0� �L.� �6�,,*6/�3�,�,,//5� ����/.6.*� �L0� �6�60��,�3�,� *756� ����,/�65� �L*� �6�6"*,5�3�,�,/7",� ����5.0,.� �L�� �6� 6,/�3�,�,.,�,� ����,./"0� �L7� �6� ,65,�3�,�6",5,� ����6,50/� �L

図 ��� テスト回路シミュレーション結果

同等のシミュレーションを行う� �!�"&スクリプトの例を図 ���に示します。記述内容を比較し

てみてください。この程度の小さな回路のシミュレーションでは � �!���"�による �IIスクリプ

トと � �!�"&スクリプトは記述量も見た目もあまり変わらないことが分かると思います。ただし、

(���( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 114: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���������による 言語連動シミュレーション演習

������ ���������� ��$ )�������� �������$���� >6.�"? �6$ �,���� ��$ �#���&�� >6.�"? �������60 ���60��������$ ������=$ ��$ �6$ �,$ ���$ �#����

���� )����#�� P)6�������� "�%��� "� �6"� 36�)����� C������ - P@*%%%�)� C������ - P@*%%%��6 ����, )���� P)"�C�������BO5�� �6�O.��3�,�O.�� ����O.�� O�B$

�������$ ��$ )�$ ���$���� ����3)��-P@%%%%��XB�LB�B9FB��

������� ������� 3 6����

������������

図 ���� � �!�"&によるテストスクリプト例

� �!���"�ではモジュールの内部信号は観測できないことに注意が必要です。そこで、設計初期の

デバグには � �!�"&を用いて内部信号を観測しながら行うやり方が論理設計には向いています。

� �!���"�が本領を発揮する分野は �言語との連係です。デバグが進んでソフトウェアと連動す

る必要がある場合に、� �!���"�で変換したモジュールを �言語のプログラムに連結することが容

易にできます。

例題を実際に動作させてみましょう。例題シミュレーション環境を ��������ディレクトリに

用意しました。まず、このディレクトリに移動します。

�� ��������

次に、シミュレーション実行モジュールの生成のために次のコマンドを入力してください。

��=� � ���60

最後に、実行モジュールを動作させます。

��=� � ���60 �#�

図 ��と実行結果を比較してみてください。

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 115: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� 言語との連動論理シミュレーション

��� �言語との連動論理シミュレーション

�言語を良く知っている人にとっては自明の事項ですが、� �!���"�による �言語ベースシミュ

レーションの方法を理解した所で、�言語からハードウェアを呼び出す例題を見てみましょう。

C� ����� D����� ��EC� ����� D�������EC� ����� D'����������EC� ����� FG����/��F

G����/ %����/ # �H G����/�

���� F;F � � ������ � �� � � � � ��

����/<E��� # ������/<E� � # �� �����/<E� � # � �����/<E�� # ������/<E�'���������� �����/<E�����

� � ��� ���

� � �������� � � �� ��� �� � � ��� ����� # �������#���D����II� �

�� # �� ����� J �+���� � # �� ����� J �+�������#������� � � ���� �� �FK$�" � ��K*��I� ��K*��#����K*�� K�B F�

��� ������ �� � � � �������� ## ���� I � �J�������LF?AF"F1=F��

��� �����II��

����� �����

図 ���� �言語連動テストスクリプト例

main excla

res=excla(ain,bin);

cla16->exdo=1;cla16->in1 = ain;cla16->in2 = bin;cla16->cin =0;cla16->eval();return(cla16->out);

Vcla16 *cla16 =new Vcla16;

Converted C++ model

stub function

hardware

caller C++ Program

図 ���� �言語連動シミュレーション環境

図 ���は �言語連動テストスクリプトになります。図 ���との違いは、ハードウェアを呼び出す

部分をスタブ関数として切り出しているところです。そこで、�����関数からはハードウェアは

(���( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 116: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���������による 言語連動シミュレーション演習

単なる �の関数 #�#�����'のように見えています。関数 �#�����は �IIと �の両方に対応可能

なように関数宣言に �#���� BBを追加しました。�IIだけしか用いない場合には、この宣言は不

要になります。図 ���に呼び出し関係を図示しました。

このスクリプトを ���60����,!��とします。それでは、新しいスクリプトの実行形式を作成し

ましょう。

��=� � ���60 � E ���60 ���,

出来た実行形式を次のコマンドによって実行してみましょう。

��=� � ���60 � E ���60 ���, �#�

条件を変えていないため、シミュレーション実行結果は図 ��と同一の結果となるはずです。

演習 ��� ワラスツリー乗算器を �言語ベース検証しなさい。

(���( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 117: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ��� 順序回路シミュレーション

��� 順序回路シミュレーション

順序回路ではクロック信号とリセット信号の扱いが必要になります。また、クロック信号の導入

に伴い、時間の概念が入ってきます。この演習では単相同期回路を前提としているため、クロック

信号の立上りに同期してレジスタの値が更新されます。そこで、ソフトウェアからの値の設定はク

ロック信号が の間に行います。回路の評価のためのメソッド #������'の呼び出しは、�クロック

周期あたり、クロック信号を として端子の値を設定した時と、クロック信号を �としてモジュー

ル内部でデータを転送した時の �回必要になります。図 ���に順序回路シミュレーションの概念を

示します。

m_clock

setup wire

eval()

eval()

setup wire

eval()

eval()

setup wire

eval()

eval()

setup wire

eval()

eval()

図 ���� � �!���"�による順序回路シミュレーション

����� ����60 ����� �� ����� �6�60� ����� �,�60� ������� ����60� ������ �#�� �����&� ��60��

��� ��

������� �#�� � � �6 3 �, 3 �6.4")" ++ �����

図 ���� 順序回路例

順序回路の例題として、図 ���を用いて説明します。この回路は加算の出力を一旦レジスタ �に

記憶してから出力端子 ���に転送します。そこで、出力は加算の入力に比べて常に �クロック遅延

することになります。

シミュレーションスクリプトを図 ���に示します。

このスクリプトでは、リセット端子 #�������'に �を設定して、その状態でクロック #������='

を数回与えています。これにより回路のリセットが行われます。メインのループではクロック信号

が の間に端子の値を設定し、一旦回路状態を評価 #������'して、端子の値を表示します。その

後、クロックを �に設定して再度評価を行っています。���で記述した回路はクロック信号の立上

りでレジスタの値が設定されるので、外部からの信号設定や端子の値の評価はクロックが �に立ち

(���( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 118: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���������による 言語連動シミュレーション演習

4������ �����)!@�4������ �����!@�4������ ���������!����4������ BI����60!@B

I����60 T����60�

�� ������''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''�� �������� �� ��$ )��������� �� ������� "�����60 ��& I����60�''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''����60(��#�� 6�����60(�������� 6�����60(�������= "�%��� "��/�33� �

����60(������������60(�������= 6 ( ����60(�������=�

�����60(�������� "�%��� "��6"�33� �

����60(�������= "��� �������� - "#*%%%�)� �������� - "#*%%%�����60(��6 �������60(��, )������60(��� "�����60(��������IK�N; 9�J �BO5�� �6�O.��3�,�O.�� O.�� ��� O.�W�B$

�������$ ��$ )�$ ���3)��-"#%%%%$ ����60(����������60(�������= 6�����60(���������������33�

������� �"��

図 ���� 順序回路シミュレーションスクリプト例

上がる前に行っておきます。

���記述を ����60!�%�、スクリプトを ����60����!��としてシミュレーションを実行してみ

ましょう。

��=� �8;FG� ����60 �#�

実行結果は図 ����になります。入力信号の加算の値が �クロック遅れて出力信号に現れている

ことが分かります。

(���( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 119: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ��� 順序回路シミュレーション

"� �6�6**0*�3�,� 76.�� ,07,.� ��� "6� �6� 0,/7�3�,�6�./*� ,/*70� ��� ,07,.,� �6�,5055�3�,�,5�"*� /*//"� ��� ,/*705� �6� .67/�3�,�,,*0/� ,*7.�� ��� /*//"/� �6� *7**�3�,�567/7� 577,0� ��� ,*7.�.� �6�,,*6/�3�,�,,//5� /.6.*� ��� 577,00� �6�60��,�3�,� *756� ,/�65� ��� /.6.**� �6�6"*,5�3�,�,/7",� 5.0,.� ��� ,/�65�� �6� 6,/�3�,�,.,�,� ,./"0� ��� 5.0,.7� �6� ,65,�3�,�6",5,� 6,50/� ��� ,./"0

図 ����� 順序回路実行結果例

(���( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 120: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���������による 言語連動シミュレーション演習

��� プロセッサシミュレーション例

���� ��G ����のプロセッサシミュレーションを � �!���"�で行ってみましょう。

図 ����にプロセッサテストスクリプト例として ���� ��G ����のシミュレーションスクリプ

トを示します。��#(�������=の値をループ毎に反転させて、その値が の時にメモリの参照�更

新を行っています。

このスクリプトを ��#����!��とします。それでは、新しいスクリプトの実行形式を作成しま

しょう。

��=� � ��#

出来た実行形式を次のコマンドによって実行してみましょう。

��=� � ��# �#�

このシミュレーションでは �個の数値のバブルソートを行う命令列を実行させています。

同じディレクトリにほぼ同様の動作をする � �!�"&スクリプトを用意しています。�.��-0 � �!�"&

を用いてシミュレーションを実行してみましょう。

������ ��#!� ��# ���!� (� ��#�

!'��#�

画面の流れるスピードだけではどれだけの性能差があるのかは良く分からないので、時間を測定

する ���コマンドを用いて計測してみましょう。画面表示は大きなオーバヘッドなので、標準出

力は'���'����にリダイレクトしてしまいます。

��� !'��#� � '���'����

��� !'��# ��� � '���'����

実行時間の差が歴然としていることが分かると思います。

演習 ��� 実行時間は実行毎に若干のバラツキが生じる。�.��-0 � �!�"&で生成した実行形式と

� �!���"�で作成した実行形式のそれぞれを �回ずつ実行し、平均の性能倍率を求めよ。

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 121: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� プロセッサシミュレーション例

C� ����� D����� ��EC� ����� D�������EC� ����� D'����������EC� ����� FG� ��FG� %� �� ��� �� ����M���(N�����M���(N�'��� ������ ��� �� � � � ��� � � �� �

�H����� �� ����� $" �� ���F@K�� @K�� @K�F�

�� ��EE/�J$� �� ��EE���J$� �� ��EE,�J$�� ��������� �" �� ���F@K�� @K�F��� ��EE/�J$� �� ��EE���J$�� ����� �

����� ��'��� ������ ��� �� � � � ��� �

���� ��� # � ��J������ ���F@K�� K(��@K��F� �� ��EE���J$� ���� �� ��EE,�J$������� �

�'��� ���� ���� ��� �� � � � ��� �

� � ���#� ��EE����H������� �

���� ��" �� ���FK� F�F���F�������� ���$�� ��������� ��" �� ���FK� F�F� �F�������� ���$�� ��������� �$" �� ���FK� F�F���F�������� ���$�� ��������� �(" �� ���FK� F�F ��F�������� ������ ��������� �/" �� ���FK� F�F�� F�������� ������ ��������� �+" �� ���FK� F�F���F�������� ������ ��������� �," �� ���FK� F�F�� F�������� ���� ��������� �)" �� ���FK� F�F�� F�������� ���� ��������� ��" �� ���FK� F�F���F�������� ���� ��������� ��" �� ���FK� F�F O F�������� ���� ��������� ��" �� ���FK� F�F ��F�������� ���� ������������" ����� �

����� ��� � ��� ���

5073 %��� � ��� ��� �� � � ��� ����� # ��� # �H G� ������#��� �F����������F�F�F��##1877� ��� ���F�� �����B F�������������� �#�� �D���(� �#�I�� ������� ����FKF�J����M�N�##3?5� ������ <E������ # ��� <E������� # �������#���D��������II� �

������ �����E$� � <E������ # ��� <E������� # � < � <E������������ <E������� ## �� �

��� � <E� ������� � �G7�:40125 �FB K�(" K�(B�F� � <E������ ����M� <E�����N��� <E� �� # ����M� <E�����N����� ���� <E� ���� �

��� � <E�����!����� � �G7�:40125 �FB�4"K�(" K�(F� � <E����� ����M� <E����N��� <E����� # ����M� <E����N� �

��� � <E�����!�H���� � �G7�:40125 �FB�9"K�(" K�(F� � <E����� � <E�����������M� <E����N # � <E������ �

���� � <E��� � �G7�:40125 �FB >�72 �� K�B F� ��� �����.��� ��������� <E�'�������� �����II�

������ ����

図 ����� プロセッサテストスクリプト例

(���( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 122: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� ���������による 言語連動シミュレーション演習

2�4=32#����/&06#@�2�4=32����� ?�P-04#�.� Q����;73�1&#&57�G7#����'�&57�G7?:2#G3407�2?4#'��������G3407�2?4�?:2#;RR57�=&#F<?� <�� ����<����F

;73�1#@�2�4=32��' @�&06��� @�&06� @�?�P-04�.%

���" @�&06�

��" @�&06��.@�&06�

@�2�4=32��'" @�2�4=32�����@�&57�G7� @�2�4=32����� @�&57�G7?:2�

@�?�P-04�.G@�2�4=32����" @�2�4=32��'@�G3407�2?4� @�G3407�2?4�?:2� <<�� @�2�4=32��'

@�&06�" @�&06��� @�?�P-04�.G@�2�4=32����77����� @�?�P-04�� �II ��.@�&06��� G@�2�4=32����77�� <� ��.@�&06��

@�&06���" @�&06���� @�?�P-04�.G@�2�4=32������� @�?�P-04�� ���� <� G@�2�4=32���� ��.@�&06��� ;RR57�=&#@�;RR57�=&��

@�?�P-04�.G@�2�4=32����77��" @�?�P-04�.G@�2�4=32������� @�?�P-04�� ���� <� G@�2�4=32���� ;RR57�=&#@�;RR57�=&��

���� "<�� @�;73�1� �E .��'. ���

図 ����� 演習で用いた A�? B�

��� まとめ

� �!���"�を用いた �言語ベース論理シミュレーション方法を説明しました。�.��-0 � �!�"&に比

べてシミュレーション速度は圧倒的に高速であり、ソフトウェア・ハードウェア・コデザインを行

うことも容易にできます。本稿のように、さまざまなツールを有機的に組み合わせ、効率の良い開

発を行うことができます。

演習で用いた E�=�%��を図 ����に示します。

(���( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 123: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���

第�章 プロセッサ設計編

��� はじめに

この演習では ��ビット ����プロセッサである ����の設計を通じてみなさんにマイクロプロ

セッサの設計を理解してもらおうというものです。����は東海大学で行われている演習で使用す

るために設計されたアーキテクチャで、命令数もレジスタ構成も �言語の簡単なサンプルプログ

ラムを動作させる最低限の構成となっています。具体的にはレジスタは全部で つだけ、命令も

データも ��ビット固定長、データ命令のバスが独立したハーバードアーキテクチャで �アドレス

方式を採用しています。プロセッサとアーキテクチャおよびコンパイラの詳細は文献 3�4を御覧く

ださい。

この演習で行うことを大まかに示します。

� ����アーキテクチャ ����の説明

� プロセッサのハードウェア構成

� ����の ���記述の説明

� 論理シミュレーション

� %�,��% ���+へのマッピング

大学の演習では半年かけて行う内容を短時間にまとめていますので、忙しいのですが、一つ一つ

の内容を良く理解して演習を行ってください。

Page 124: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� プロセッサ設計編

��� ���アーキテクチャ �� �

����という言葉を聞いたことがある方も多いかと思います。コンパイラで利用しないような複

雑な命令を ��Gに実装するのはやめて ��Gをコンパクトにした方が総合的に高性能なシステム

が構築できるという思想の下、命令セットやハードウェア構成をコンパクトにしたアーキテクチャ

をこのように呼んでいます。コンパイラ技術の向上によって �年代から �年代にかけて様々な

����アーキテクチャが発表されてきましたが、多くは固定長命令と �オペランド #アドレス'方式

を採用しています。

����は高級言語とプロセッサ命令の関係を授業で取り上げるために使用するので、高級言語の

簡単なサブセットが実行できるように、かつ、なるべくハードウェア構成をシンプルにするとい

う目標を持って設計しました。結果として �年代の代表的な ����アーキテクチャであるA���

アーキテクチャに見た目は良く似ています。A���と違ってアセンブラレベルのプログラムが簡単

になるように遅延分岐やロードスロットなどは採用していません。

PC $0

$1

$2

$3

SN/X CPU

命令メモリ データメモリ

命令アドレス データアドレス

命令 Data

16bit

16bit

16bit

16bit16bit

16bit

図 ���� ����プロセッサの概略図

����� プロセッサの基本動作

プロセッサの命令実行は命令の格納されているメモリから命令を読み出すところから始まりま

す。����では命令とデータは別々のメモリに格納することにしていますが、こういった構成を

ハーバードアーキテクチャと呼びます。プロセッサが命令メモリのどのアドレスから命令を読み出

すのかは特別なレジスタであるプログラムカウンタ #��'が記憶しています。��は電源投入時や

プロセッサがリセットされると に初期化されます。そこで、����は 番地のメモリから命令実

行を開始することになります。

命令メモリから読み出された命令はいったん命令レジスタ #��'に格納され、次に命令レジスタ

の内容がハードウェアによって解釈されます。これを命令デコードと呼びます。命令デコードを

行った結果、命令種類が確定しますから、その命令種別によって指定された演算や操作を行うこと

で命令の実行が行われます。

命令実行後、プログラムカウンタに �を加えて再度命令読み出しを起動することでメモリ上に並

んだ命令を順次実行していくことになります。

����では演算はすべて ��ビットの �の補数で表される整数型のデータに対して行われます。

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 125: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� ��� アーキテクチャ ����

クロック

プログラムカウンタ(PC) 0000 0001 0002 0003

命令メモリ読み出し

命令レジスタ(opreg)

レジスタ読み出し演算

汎用レジスタ

実行命令(0000)

演算結果書き込み

命令読み出し 実行 命令読み出し 実行

実行命令(0001)

命令読み出し

実行命令(0002)

命令メモリ読み出し 命令メモリ読み出し

レジスタ読み出し演算

レジスタ読み出し演算

演算結果書き込み 演算結果書き込み

図 ���� ����命令動作の流れ

命令形式

形式 構成

�形式 �� �� �� ��

�形式 �� �� �� �

演算には表 ���の命令を用います。表中 ��はオペコードの ��進数値を示します。

レジスタだけでなく命令中に示す数値を用いる命令群を即値 #�77 /!�� 'を利用する命令とい

うことで �形式命令と呼びます。�形式命令は表 ��� の �種類定義しています。

表 ���� 実装する �形式命令

動作 命令 �� オペランド 意味

加算 %++ �/5 �0�5 �0; �/ � �0� I �0;

論理積 %�+ � �/5 �0�5 �0; �/ � �0� J �0;

比較 ��, � �/5 �0�5 �0; �/ � #�0� � �0;'K� �

否定 ��, �/5 �0 �/ � ��

右シフト �� � �/5 �0 �/ � ; � �0������

停止 2�, � ��". 00"� 6���

オペランド �/ L ��5 �0� L ��5 �0; L ��5 �0 L ��

(���( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 126: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� プロセッサ設計編

表 ���� 実装する �形式命令

動作 命令 �� オペランド 意味

ロード �+ � �/5 �#�;' �/ � +A�A3 �4

ストア �, � �05 �#�;' �0 � +A�A3 �4

ロードアドレス �+% % �/5 �#�;' �/ � ��

ゼロ時分岐 )M � �.5 �#�;' �� � #�. LL 'K � � ��I�

リンク付分岐 )%� � �/5 �#�;' �� � �5 �/ � ��I�

オペランド �/ L ��5 �0 L ��5 �. L ��5 �; L ��

実効アドレス � �#�;' � � #�N�� � �' I #�; LL C'K � �;

(���( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 127: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� ����演習パッケージ

��� �� �演習パッケージ

����演習のためにコンパイラ、アセンブラを含む演習パッケージを用意しました。図 ���が演

習パッケージのファイルとディレクトリの構成になります。演習パッケージは ����の論理ファイ

ルとシミュレーション環境、および ����アセンブラ、コンパイラのソースコード群から構成され

ます。

�� ND

コマンドによって演習パッケージを置いたディレクトリに移動してください。

CPU snxasm

snxc

Makefile snxasm.h snxasm.l snxasm.y

Makefile snxb1.c snxb2.c snxc.h snxc.l snxc.y

LICENSE mems.v snx.h sort.scMakefile cpu.csf if.sc recur.sc snx.hex test.mainfoo.sc main.v reidai.mem snx.sfl test.sflboardtest.sc mem.h reidai.s veri.v snx.sigcpu.sfl for.sc mem.v snx.dmem 220model.v

図 ���� ����演習パッケージの構成

コンパイラは ��..と � @で文法を記述し、�でコード生成を記述したもので、�言語の簡単な

サブセットになっています。コンパイラの言語仕様を次にまとめます。

変数 メモリ上の �番地から順に格納される大域変数の �~Yまでと、関数引数の ���だけが許さ

れます。変数には添字を付けることができますが、�>"?は �と等しく、�>,0?は Yと等しく

なります。

関数 関数は整数型か :"!/型の %��という関数名一つだけが定義でき、局所変数はありません。

演算 3 ( � � � � が利用できます。

構文 &@�� % ���� %�� ������が利用可能です。

演習パッケージの中の %!��のソースコードを図 ��に示します。このソースコードにおいて、

����文が使われていますが、この構文を実行する時には 番地に対する �,命令が発行されま

す。����文はインタプリッタでプログラム動作を確認するための構文として用意してあります。

#本演習では特に必要無いため説明しません'

論理シミュレーションによって動作を確認してみましょう。シミュレーションの出力は各レジス

タの値が ��進数で表示されることに注意してください。シミュレーション実行のために E�=�%��

を用意してあります。

��=� �8;FG� % ��

(���( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 128: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� プロセッサ設計編

� 6�%��� ���� ������ ���� 6(��@����

図 ��� %文例題のソースコード

と打ち込み、シミュレーションを実行してみましょう。初めての実行ではコンパイラやアセンブ

ラのコンパイルから行なわれます。コンパイラやアセンブラのコンパイルが終了していればシミュ

レーション結果として図 ���の出力が得られます。

C ��=� �8;FG� % ���略 実行状況により異なるメッセージが出力されます�!'��#�'��#� � %!�� + ��� %!�

��� C5$ 6,*�C"���� C6$ 6�C"��� C6$ 5�C"��� C6$ 5�C"�)Y C6$ K"""

�� C6$ 5�C"��� C6$ "�C"�)�� C"$ K""6

K"""���� C6$ 6�C"��� C,$ 5�C"���� C,$ C,��� C,$ 6�C,���� C6$ C6$ C,�� C6$ "�C"�

K""6�@��

!'��#���'��#��� � %!� + ��� %!���8*J 8/"6 7/"5 �/"5 G/"� �/"5 7/"" J""G8/"6 ��"5 /��" 88"6 "0/" 7/"" *"""�%�,�� ��#!�%��JK �� I����� �������������(%��� �������!�����@� ��� ,"",(,""5 9��@=� �@�Y�8�� ��@�� ��������!������ (� !'��# ��#!� ���!��� %!��� ��#!���!'��# + ��� ��!���N�"""" ��� C5$ 6,*�C"� (( C"�#### C6�#### C,�#### C5�""*%N�"""6 ��� C6$ 6�C"� (( C"�#### C6�"""6 C,�#### C5�""*%N�""", �� C6$ 5�C"� (( C"�#### C6�"""6 C,�#### C5�""*%N�"""5 �� C6$ 5�C"� (( C"�#### C6�"""6 C,�#### C5�""*%N�"""/ )Y C6$ ��C"� (( C"�#### C6�"""6 C,�#### C5�""*%N�""". �� C6$ 5�C"� (( C"�#### C6�"""6 C,�#### C5�""*%N�"""0 �� C6$ "�C"� (( C"�#### C6�"""6 C,�#### C5�""*%N�"""* )�� C"$ 6/�C"� (( C"�"""� C6�"""6 C,�#### C5�""*%N�"""� @�� ((S8K�G: �� ,. ����=""""""""� """6 """, """/ """6 """" #### #### ####

図 ���� 実行例 �

このシミュレーションでは、��クロック目で 2�,命令を実行しシミュレーションは停止してい

ます。変数 �は �番地のメモリの内容になることに注意して実行結果を理解してください。

(���( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 129: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� ����演習パッケージ

論理シミュレーションの結果を波形で表示してみましょう。この E�=�%��では I:環境変数に

値を設定することで波形表示を行なうシミュレーションをするようにしています。そこで、

��=� �8;FG� % I: B3��� 6B ��

と打ち込んでください。このシミュレーションの実行で波形ダンプファイルとして ��#!���が出

力されます。そこで、

��=&��� ��#!��� ��#!��

として図 ���に示す波形表示ができます。

図 ���� シミュレーション波形

コンパイラがどのようにコード生成をするのかを例題を見ながら確認しましょう。図 ���は %��

文の例題になります。これを

��=� �8;FG� %�� %��!�

として、コンパイルします。

%��� "��.�33� ���� �@����

図 ���� %��文例題のソースコード

すると、図 ���が得られます。

%��文の処理は次のステップで実行されます。

�� 最初の式を評価 "

�� 次の式 �. を評価し、値が なら終了。

�� 本文の実行 ����

� 最後の式 33 を実行

(���( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 130: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� プロセッサ設計編

��� C5$ 6,*�C"���� C6$ "�C"��� C6$ 7�C"�

K"""��� C6$ 7�C"���� C,$ .�C"���� C6$ C6$ C,)Y C6$ K""6�� C6$ 7�C"��� C6$ "�C"��� C6$ 7�C"���� C,$ 6�C"���� C6$ C6$ C,�� C6$ 7�C"�)�� C"$ K"""

K""6�@��

図 ���� %��文例題のコンパイル結果

�� 条件評価へ戻る

コンパイラはこの処理ステップを忠実に出力します。変数 はメモリの �番地に相当し、����

文は 番地へのストアになることを思い出して図 ���のリストを読んでください�。

次にもう少し複雑な構文を見てみましょう。図 ���は再帰定義の関数 %��とその呼び出しを行

なっています。これを

��=� �8;FG� %�� %��!�

として、コンパイルします。

� %���.��@������ %����� ���� �%���� � 6� ������������������ ��� 3 %������(6���

図 ���� 再帰関数例題のソースコード

すると、図 ���が得られます。

簡易コンパイラには局所変数を定義する機能はありませんが、唯一関数引数�だけは局所変数と

して扱われます。そこで、関数は呼び出しの時に関数フレームを生成することになります。関数の

実行は次のステップで行なわれます。

�� 関数フレームをスタック上に生成

�� 戻りアドレスを関数フレームに格納

�� 引数を関数フレームに格納

���ではレジスタ4!は値を持ちますが、� 形式の �4!" と括弧の中で用いる場合には値を �として扱うことに注意してください。

�これもただ一つ ��-しか許されません

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 131: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� ����演習パッケージ

��� C5$ 6,*�C"���� C6$ .�C"�)�� C,$ %���� C6$ 6�C"�@��)�� C"$ K"""

%������ C5$ (,�C5��� C,$ "�C5��� C6$ 6�C5��� C6$ 6�C5���� C,$ 6�C"���� C6$ C6$ C,)Y C6$ K""6�� C6$ 6�C5�)�� C"$ %���#�

K""6��� C6$ 6�C5���� C5$ (6�C5��� C6$ "�C5��� C6$ ,�C5���� C,$ 6�C"���� C,$ C,��� C,$ 6�C,���� C6$ C6$ C,)�� C,$ %����� C,$ "�C6��� C6$ "�C5���� C5$ 6�C5���� C6$ C6$ C,)�� C"$ %���#�

%���#���� C,$ "�C5���� C5$ ,�C5�)�� C"$ "�C,�

K"""�

図 ���� 再帰関数例題のコンパイル結果

� 関数本体の実行

�� 戻りアドレスを関数フレームより読みだし

�� 関数フレーム解放

�� 戻りアドレスに分岐

関数本体の実行の前の処理を関数プロローグと呼びます。また、関数本体の実行後の処理を関数

エピローグと呼びます。

����では �アドレス��ワードであることに注意して図 ���を見てみましょう。関数本体はラ

ベル %��以降に書かれています。スタックポインタはC5であり、戻りアドレスは関数フレームの

底 "�C5�に、引数はその上 6�C5�に格納します。

演習

%、%��、�����、%��の各例題について論理シミュレーションを実行して、例題の実行にかか

(���( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 132: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� プロセッサ設計編

るクロック数を調べてみましょう。

(���( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 133: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ��� ����のハードウェア構成

��� �� �のハードウェア構成

図 ����に ����のハードウェア構成を示します。

PC

$0$1

$2$3

OP

RE

G

ALU

0

Sign ext.

R3

R2

R1

Instmemory

clain1 opr2

opr1

R3

+1

npc

aluo

I

Datamemory

MUX MUX

MUXMUX

MUX

MUX

MU

X

DE

C

MAR

図 ����� ����のハードウェア構成

ソフトウェアから見えるレジスタとしては

� プログラムカウンタ #��'

� 汎用レジスタファイル #C~C�'

があります。演算回路として主演算回路である %�G、�ビットから ��ビットへの符号拡張回路、

アドレス計算用のI�回路の �つがあります。また、命令メモリ、データメモリをそれぞれ専用に

持っています。

演習ディレクトリの ��#!�%�が ����の ���記述ファイルです。����本体の記述は図 ����の

つのモジュールから構成されます。

��#���が全体の制御を担当する制御モジュールになります。制御モジュールの中は �つのステー

ジがあり、図 ����のタスクの制御が行なわれます。また、制御モジュールからは表 ���の制御信号

が出力され、主モジュールの ��#のデータパスを制御します。

(���( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 134: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� プロセッサ設計編

snx

snxctl reg4

cla16 inc16

制御系レジスタファイル

全加算器 +1回路

ctl gr

cla inc

図 ����� ����の構成モジュール

リセット(PC=0)

iftタスク

exeタスク

tloadタスク tstoreタスクmemexステージ

ifetchステージ

execステージ

PCで示す命令をOPREGに読み出す

命令のデコード、実行PCの更新

メモリ読み出し メモリ書き込み

図 ����� ����のタスク制御

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 135: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ��� ����のハードウェア構成

表 ���� ��#���が出力する制御信号

信号名 意味 信号 意味

��.��!�� 命令 �フィールドを加算器入力

�にセット

��-� . %�G出力をプログラムカウン

タへセット

��-�// %�Gへの加算指示 ��-��/ %�Gへの論理積演算指示

��-�"� %�Gへの否定出力指示 ��-0�� %�Gへの ��,演算指示

��-0� %�Gへの右シフト指示 ;��9; )%�命令のライトバック指示

.���7�� 加算器出力をメモリアドレス

レジスタ #7��'へセット

6�� プロセッサ停止信号

�/�9; �+%命令のライトバック指示 �"�/ �+命令処理指示

� . ��I�の計算 � .� . プログラムカウンタへ � .の

値セット

" ���.��!�� " ��信号を加算器入力 �にセ

ット

" ��0 � 汎用レジスタの読み出し結果

を " ��信号にセット

" ��� & 汎用レジスタ読み出し結果を

" ��信号にセット

" ��O �" " ��信号を強制的に に設定

��&��-7 命令��フィールドの値をレジ

スタ番号ラッチにセット

�9; � 形式命令のライトバック指

0 �" " � &レジスタへの命令セット 0�"� �,命令処理指示

9; 命令動作完了信号

(���( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 136: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� プロセッサ設計編

��� �� �の論理合成 �����をターゲットとした�������ベース合成�

次に、����を論理合成し、性能を評価してみましょう。����はレジスタモジュール #� &'の

修正を行なえば �%�,2����で合成できますが、最終的な合成ターゲットを ��$%とする場合

には ��$%ベンダーのツールを用いて � �!�"&からの合成を行ないます�。

論理シミュレーションを実行した時に ���記述は �����によって � �!�"&に変換されています。

実行ディレクトリの中の ��#!�が変換された � �!�"&ファイルになります。このまま論理合成する

こともできますが、メモリも入出力も接続されていません。そこで、合成して評価ボードで確認で

きる合成用上位モジュールを作成します。����とメモリを下位モジュールとして利用するため、

��#!@と ���!@に、����と �%A5��Aの �������文 #図 ���5 図 ����'を記述します。図 ����

の合成用上位モジュールではプリント基板上の ��+にデータを出力するため、データメモリの下

位 ワードへの書き込みをデコードして外部に出力させています。

図 ����の合成用上位モジュール #���!�%�'を � �!�"&ファイル #���!�'に変換するには �����を

用いて、

�%�,�� ���!�%�

とします。負論理のリセットを用いたい場合や、同期リセットを用いたい場合には、���ファイル

名の後にオプションとして(��� ���、(���� ���を記述します。また、制御端子の合成を最適化

する場合、���ファイル名の後にオプションとして(�を記述します。

������� ��# ����� ����60� ����� �����60� ������� ������60� ������� �����60� ������� �����60� �������� ���������������� ����&����������� ������������������� �������&����������� &)�������� @���

図 ���� ����の宣言

シミュレーションではメモリをシミュレーションモジュールの中で宣言しますが、��$%にフィッ

ティングする場合には、�%A5��Aは ��Aモジュール 3��4として作成します。��Aモジュールの

合成可能な記述 #,,"�����!�'も �+��のH�)ページ 3��4よりダウンロードできますが、�.��-0

� �!�"&のリリース版では一部利用出来ない機能があるのでシミュレーションと合成で異なるファ

イル構成を取ります。

���!�の命令メモリには初期値を入れる必要があります。��Aの記述では初期値として ��#!@�#

ファイルを指定しています。そこで、論理合成を行なう前に ��#!@�#を作成する必要があります。

�� ���� �������で論理合成を行なう場合には、�$�3&� �������-5�$� 6����%�

と、オプションとして6����%� を付けて変換してください。

(���( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 137: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門���� ����の論理合成 �����をターゲットとした �������ベース合成

������� ;�E ����� �����60�������� ����60������� ������������� �����������

�������� ;8E �

���� �����60�������� ����60������ ��60������� ����$&������������ ������������������� &��������$���

図 ����� メモリの宣言

��A初期化データには ��� � 2��形式を用いますが、このデータ作成は ����アセンブラで行な

います。����アセンブラには、コマンドの後ろに*!*を付加することで出力形式を ��� � 2��形

式に変換する機能があります。

��#���'��#��� � ����!�

とすると ��� � 2��形式のファイルを表示できます。

��$%上でプログラムを実行するためには実行したいプログラムをコンパイルし、上記のように

アセンブラを用いて ��� � 2��形式を作成します。この形式を��Aモジュールで指定する ��#!@�#

という名前のファイルにします。#アセンブラ出力をリダイレクトしてください。'

これらに加えて、��$%を電気的に動作させるためには、���のプリント基板上の接続ピンの

情報や ���の種別の情報が必要になります。D-���-0��ではこれらの情報を ��%の拡張子のつい

たファイルで指定します。図 ����に ���ファイルの例を示します。今回の演習ディレクトリには

���!��%を用意してありますので、���のピン接続に変更が必要な場合にはこのファイルを元とし

て変更してください。

これらのファイル #0�@�:5. -�:57 7�:50�@�6 @5. -�.0<'を一つのディレクトリに入れて、上位モ

ジュールである ���!�をプロジェクトのトップモジュールに指定し、D-���-0��で論理合成をして

みます。

図 ����に示すように ��ロジックセルで約 A2Oのクロック周波数が実現できる結果が得ら

れました。#環境やコンパイルオプションの設定によって合成結果は変わります。'

(���( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 138: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� プロセッサ設計編

K� F� ��FK� F�����F

������ �� �� �� �H�D,E��H�D,E������ ���D�/E����D�/E������ � �D�/E�� �D�/E������ ���D,E������ �����D(E������D(E�

� & �4?6 0����4�6 -������� 7�H���M(ND�/E�

�� ������#��� �����#������ # � ������SS& �H SS& ������ ! �

�H�D�E" �� ���� # 7�H���M$N���� # 7�H���M�N�� � # 7�H���M�N�� � # 7�H���M�N��

����" �� ���� # & �������� � # & �� ������ # & ������� � # & ��������

��

� ������ & �� ������� & �� �� # 0���������& ������������� ������ & ������!����� � ! �

& �����D�*E" & ������ # ��� SS �H������" & ������ # -���������& ������������

� ������ & ������!�H���� �� �-����H�����& ������& �����������& �����D�*"�E##�� 7�H���M& �����D�"�EN "# & ��������

図 ����� ����の合成用上位モジュール

(���( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 139: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門���� ����の論理合成 �����をターゲットとした �������ベース合成

������ ;�E ��������$ ������=$ ����$ ���$ ���������� �������$ ������=$ ��������� >6.�"? ����������� >6.�"? ����������� �6 �!������������>7�"?�$ !R���������%����� �6!����&��@ 60���%����� �6!����&��@�� 6"���%����� �6!������������������� BD9;GF ��G;G:B���%����� �6!����������� BD9;GF ��G;G:B���%����� �6!����%�� B��#!@�#B����������

������ ;8E ��������$ ������=$ &���$ ����$ �$ ���$ ���������� �������$ ������=$ ����$ &�������� >6.�"? ����$ �������� >6.�"? �������������R �6 �!������������>7�"?�$ !R�����$!�������$ !&��&����$ !�����=�������=���

��%����� �6!����&��@ 60���%����� �6!����&��@�� 6"���%����� �6!����������� BD9;GF ��G;G:B����������

図 ����� %�,��%合成用 � �!�"&メモリモジュール

図 ����� D-���-0��による ��Gの論理合成

(���( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 140: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� プロセッサ設計編

�) ����%"7'� �/8�3!9�!!:�3;!6�8���������<��(� ��/�����;��������<��(� ��/����=!����>!?�<��(� ��/����@;����>2?�<��(� ��/����@=����>3?�<��(� ��/����@A����>�?�<��(� ��/����@B����>;?�<��(� ��/����@@����>=?�<��(� ��/����2!!����>A?�<��(� ��/����2!2����>C?�<��(� ��/����2!3����>B?�<��(� ��/����2!�����>@?�<��(� ��/����2!;����>2!?�<��(� ��/����2!=����>22?�<��(� ��/����2!@����>23?�<��(� ��/����22!����>2�?�<��(� ��/����222����>2;?�<��(� ��/����223����>2=?�<��(� ��/����22�����>!?�<��(� ��/����22;����>2?�<��(� ��/����22=����>3?�<��(� ��/����22A����>�?�<��(� ��/����22C����>;?�<��(� ��/����22B����>=?�<��(� ��/����22@����>A?�<��(� ��/����232����>C?�<��(� ��/����23�����>B?�<��(� ��/����23;����>@?�<��(� ��/����23=����>2!?�<��(� ��/����23A����>22?�<��(� ��/����23@����>23?�<��(� ��/����2�!����>2�?�<��(� ��/����2�2����>2;?�<��(� ��/����2������>2=?�<��(� ��/����2�;�

�#�>!?�<��(� ��/����32=��#�>2?�<��(� ��/����32A��#�>3?�<��(� ��/����32C��#�>�?�<��(� ��/����32@��#�>;?�<��(� ��/����33!��#�>=?�<��(� ��/����332��#�>A?�<��(� ��/����333��#�>C?�<��(� ��/����33���#�>B?�<��(� ��/����33;��#�>@?�<��(� ��/����33=��#�>2!?�<��(� ��/����33A��#�>22?�<��(� ��/����3�!��#�>23?�<��(� ��/����3�2��#�>2�?�<��(� ��/����3�3��#�>2;?�<��(� ��/����3����#�>2=?�<��(� ��/����3�;��#�>!?�<��(� ��/����3�=��#�>2?�<��(� ��/����3�A��#�>3?�<��(� ��/����3�C��#�>�?�<��(� ��/����3�B��#�>;?�<��(� ��/����3�@��#�>=?�<��(� ��/����3��#�>A?�<��(� ��/�������#�>C?�<��(� ��/����;��#�>B?�<��(� ��/����C��#�>@?�<��(� ��/����B��#�>2!?�<��(� ��/����@��#�>22?�<��(� ��/����2!��#�>23?�<��(� ��/����22��#�>2�?�<��(� ��/����2���#�>2;?�<��(� ��/����2A��#�>2=?�<��(� ��/����2C�

-��>!?�<��(� ��/����CC�-��>2?�<��(� ��/����C@�-��>3?�<��(� ��/����B!�-��>�?�<��(� ��/����B2�-��>;?�<��(� ��/����B3�-��>=?�<��(� ��/����B��-��>A?�<��(� ��/����B;�-��>C?�<��(� ��/����B=�� 2>!?�<��(� ��/����;2�� 2>2?�<��(� ��/����;��� 2>3?�<��(� ��/����;;�� 2>�?�<��(� ��/����;A�� 2>;?�<��(� ��/����;C�� 2>=?�<��(� ��/����;B�� 2>A?�<��(� ��/����;@�� 2>C?�<��(� ��/����2A2�� 3>!?�<��(� ��/����=��� 3>2?�<��(� ��/����=;�� 3>3?�<��(� ��/����==�� 3>�?�<��(� ��/����=C�� 3>;?�<��(� ��/����=B�� 3>=?�<��(� ��/����=@�� 3>A?�<��(� ��/����A2�� 3>C?�<��(� ��/����A3������>!?�<��(� ��/����2C;������>2?�<��(� ��/����2CB������>3?�<��(� ��/����2B!������>�?�<��(� ��/����2B2������>!?�<��(� ��/����2B3������>2?�<��(� ��/����2B�������>3?�<��(� ��/����2B;������>�?�<��(� ��/����2B=�D

図 ����� ���ファイルの例

(�( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 141: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� おわりに

��� おわりに

���を用いると、このように比較的簡単に自分のプロセッサを実現することができます。この

プロセッサ設計演習の経験をベースに、新たなアイデアをつぎこんだハードウェアを考案して新し

いビジネス等にチャレンジして頂ければ幸いです。

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 142: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� プロセッサ設計編

付録 �� �プロセッサコアモジュールO� 8:: "#"O� 89: "#6O� �K� "#5O� 9�� "#/O� �; "#0O� SK� "#*

O� K: "#�O� �� "#7O� K:8 "#�O� HZ "#�O� H8K "#%

O� �[NG ���6.�

O� �N�:G ���6.�6,�O� ;, ���66�6"�O� ;5 ���7���O� ;6 ���*�0�O� ;�GK ���6�"�O� 604���*�"�

O� �;6 ������*�0�O� �;, ������66�6"�O� �;5 ������7���O� � 604������*�"�

������� ��60 ����� ��60� ������� ����60� ������ �� ��������� ����� �

������� ���60 ����� ��$ �6�60�$ �,�60� ������� ����60� ������ �� ��������� �����$�6$�,� �

������� ���/ ����� ��60�$ �����,�$ ��������,�$ ���)����,� ������� �����60�$ ���)�60� ������ �����$ ����)$ &������������ ����������������������� ����)����)������������� &��������$���

������� ��#��� �������� �����$���,��$���,��$&)$���$

@��$���,���$�,�����$���6���$ ,����6$���6,����6$���,Y���$���,���$������$������$������$������$�����$�&)$���&)$)��&)$�����$�����

���� ���60� ����� ���6Y��� ������ �������

������ ��#��� �������� �����$���,��$���,��$&)$���$

@��$���,���$�,�����$���6���$ ,����6$���6,����6$���,Y���$���,���$������$������$

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 143: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� おわりに

������$������$�����$�&)$���&)$)��&)$�����$��������� ���60� ����� ���6Y��� ������ ��������� )����=����������% �8::$ �89:$ ��K�$ �9��$ ��;$ �SK�$�K:$ ���$ �K:8$ �HZ$ �H8K��������% �������

���������� %���@ � ���= %��� � ����������� �#�� � ���= �#��� � ����������� ����# � ���= ��������� ���= �������� �

������� ����� �������� %���@!%����

������� ������ ��� ���N�:G 8::�� �8::�����N�:G 89:�� �89:�����N�:G �K��� ��K������N�:G 9���� �9�������N�:G �; �� ��;�����N�:G SK��� �SK������N�:G K: �� �K:�����N�:G �� �� ��������N�:G K:8�� �K:8�����N�:G HZ �� �HZ�����N�:G H8K�� �H8K���

����� %���@ ���� �

������������� �#��!�#����

��

����� �#�� ���� �

���������)����=�� �H8K + ��HZ - ���6Y�����������

��� �)����=������ �

���,����� &)�������� %���@!%�����

�K:� ��� ����,������ �,�����������,���������� ����#!���������

���� ��� ����,������ �,�����������,���������� ����#!�������� ��

�SK�� ��� �@����� %��@��

����� ��� ����,����� &)�������� %���@!%�����

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 144: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� プロセッサ設計編

���6��������� � �[NG� ,����6������� � ���6,����6����

��� � �[NG - �;5 ")""�����,Y���������� ����,������

���� �� �[NG + �8::�� ���������

��K� � ����������89: � ����������9�� � �����������; � ���������

��� �1 �[NG� �&)����K:8 � ���&)����H8K � )��&)����

������� ����# ���� ���� �����#!������� ������������#!������ ��������

����� %���@!%����&)������

������ ��# ����� ����60� ����� �����60� ������� ������60� ������� �����60� ������� �����60� �������� ���������������� ����&����������� ������������������� �������&����������� &)�������� @���

����&� ���60� �����&� ��" ���� ��6$ ��,���#��� ������60 �� ����60 ��� ����/ ������ ������60�$ ����60�$ �������,����� ���6�60�$ ���,�60�$ �#���60����� �����60�$ ����6�60��

�������� �������&��������$��������������� �������������������������� ���������������

������" � ")6� ��6 � ��"� ��, � ��6�%����, ")"� - ���6 ")6�� ���!��������

(�( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 145: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� おわりに

���!�� ���������!���6Y��� ����6 "#""""���

������� ���!����� ����� � ������������!��� �������� ���!��� �#�� ��!������!����������� ���!���,�� �� � �#���������� ���!���,�� �� � ������������ ���!&) &)���������� ���!@�� @������������ ���!���,��� ��� � ���!����������� ���!�,����� ������ � �;,�������� ���!���6��� ���6 ��!�������;,�!������������ ���! ,����6 ����6 � �������� ���!���6,����6 ����6 ���6�������� ���!���,Y��� ���, "#""""�������� ���!���,��� ���, ��!����)��;5�!���)�������� ���!������ ���� ���!���")"$ ����6$ ���,�!����������� ���!������ ��� �

���!���")6$ ����6$ 1���,������ 6.4")" ++

������6�6.� - 1���,�6.��+����!����6.� - 1����6�6.� - 1���,�6.��+����!����6.� - ����6�6.� - ���,�6.����

�������� ���!������ ���� ���6 - ���,�������� ���!������ ���� 1���6�������� ���!����� ���� ")" ++ ���6�6.�6� �������� ���!�&) ��!&�����;6$������������� ���!���&) ��!&�����;,$ ������������� ���!)��&) ��!&�����;,$ �#����������� ���!����� �������&�������$��!�������������!������������� ���!���� ��!&����������$ ����������������!�������

������ ���/ ����� ��60� ����� �����,� ����� ��������,� ����� ���)����,� ������� �����60� ������� ���)�60� ������ ����������� ����)������ &������� �>/?�60��������� ����� ���� �>�������?�������� ����) ���) �>���)���?�������� &��� �>����? � ��

����� ��60 ����� ��60� ������� ����60� ������ �� �

������� �� ��� � 3 ")6��

����� ���60 ����� �� ����� �6�60� ����� �,�60� ������� ����60� ������ �� �

������� �� ��� �6 3 �, 3 ���

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 146: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 第 �� プロセッサ設計編

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 147: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

��

付 録 ���文法

��� ���言語構造���言語で基本的な構成要素のモジュールは図%��の構造を持ちます。モジュール名以外の各宣

言や定義は省略可能ですが、順序を交換してはいけません。���の動作記述は �文に限定されま

������ モジュール名 �外部端子・構成要素の宣言制御端子の仮引数の定義ステージ・タスクの定義共通動作記述制御端子動作記述ステージ動作記述�

図 %��� モジュールの構造

すが、複合文の構文として用意される並列動作を指示する ���文や条件動作を指示する ���$ ���文により複雑な並列動作を記述します。

��� 外部端子と構成要素���の外部端子と構成要素一覧を表 %��に示します。���ではデータの入出力以外に制御情報

を参照/転送できます。データ入出力の端子が駆動されない時、端子の値は未定義となるが、制御端子は駆動されない時に となることが保証されます。

データ入力端子 ��&'� モジュール外部からのデータを入力する端子。

データ出力端子 �'�&'� モジュール外部へデータを出力する端子。

表 %��� 外部端子と構成要素一覧

分類 タイプ名

制御端子 制御入力端子 �������制御出力端子 ��������

外部端子 データ端子 データ入力端子 �����データ出力端子 ������データ双方向端子 *�)��(��

制御系 制御内部端子 ������(�+データ系 データ内部端子 *��&�(�

構成要素 レジスタ �(�&�(� ,�&�(� ,�メモリ $($

階層設計 サブモジュール モジュール名

Page 148: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 付 録 �� ���文法

データ双方向端子 $�(����� トライステートバッファを用いた双方向データ端子。���において端子への書き込みが生じた時にデータ転送方向が出力となります。

制御入力端子 ������� モジュール外部からモジュールの動作を制御するための端子。�����に対応する �������文によって制御入力に対応する動作を定義します。

制御出力端子 ������'� 外部モジュールを制御するために外部への制御出力を提供する端子。制御端子の駆動は下記の形式をとります。端子名 ���必要に応じて引数を定義して ��内に与えることができます。

制御内部端子 ������� ) モジュール内部の制御のために用いる制御端子。制御端子の駆動は制御出力端子と同様に下記の形式をとります。端子名 ���

データ内部端子 $'� トライステートによるセレクタを表します。

データ内部端子 �� 論理ゲートによるセレクタを表します。

レジスタ ��� パワーオンによるセットもリセットもされないレジスタ。これに対し、��� &�はパワーオンによってセットされ、��� &�はパワーオンによってリセットされるレジスタ。

メモリ %�% メモリを表す構成要素であり、機能回路の中でのみ使えます。��� �����>6",/?�5,�は、�����という名前の ��ワード、��ビット幅のメモリを定義します。記述上メモリのワード数は省略することはできません。メモリのアドレスは から始まるため、動作記述で用いるメモリのアドレスは からワード数��までとなります。

サブモジュール 他のモジュールを内部回路として利用します。サブモジュールは宣言するごとに対象となる回路を新たに生成するものと考えることができます�。

レジスタやメモリ、データ端子のビット幅は �ビットから ���ビットまでです。ビット幅の指定が省略されると、�ビットとみなされます。

��� 引数宣言� ��� ��� 制御端子 �データ入力端子������

��������文により制御端子に対する引数の宣言を行います。制御端子を起動する時、実引数の値が宣言で指定したデータ端子に転送されます。

��� ステージ定義����� ��� ステージ名 � ���� タスク名 �レジスタ名� ����� �ステージとタスクを宣言します。タスクは複数指定可能であり、タスクには引数を宣言できます。タスクを起動する #ジョブの生成'時に与える実引数の値が宣言で指定したレジスタに転送されます。

��� 制御端子動作記述� ������ 制御端子名 動作制御端子が起動された時の動作を指示します。

�オブジェクト指向言語におけるインスタンスと同じ。サブモジュールを利用する場合には当該モジュールのインターフェイスが予め ������� 文によって宣言されている必要があります。宣言中の ���� ��-文は、制御入力端子の引数を受け渡す端子を定義します。

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 149: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� 数値表現

表 %��� ���の演算子

演算子 意味 演算子 意味 備考� 否定 � 論理和

��� ビット切出し � 排他的論理和����� ビット切出し � 論理積� 桁方向論理和 �� ビット連結� 桁方向論理積 加算 機能回路� 桁方向排他的論理和 �� 右シフト 機能回路�� 符号拡張 �� 左シフト 機能回路

�� 一致

��� 数値表現数値定数は固定ビット幅の符号無しデータです。定数は に引続き基数定義文字、値の順で表し

ます。基数定義文字には �進 #)'、�進 #�'、��進 ##'が許されます #例�")6"6'。

�� 演算子���で使用可能な演算子の一覧を、表 %��に示します。演算子には機能回路に限定されたもの

があります。機能回路は �����文で記述し、論理合成の対象となりません�。

��! 内部端子とレジスタへの転送内部端子とレジスタのデータ転送動作を説明します。

� "# � � .% レジスタへの転送 %.�� # � � .% データ内部端子への転送 %.

データ端子への値の転送は、同一クロックサイクルにて転送結果が反映されます。一方、レジスタへの値の転送 #書き込み'は、明示的に示されないシステムクロックの立ち上がりに同期して行われます。例では、入力端子 !�の値がレジスタ �と内部端子 0�に転送されます。転送により入力端子 !�からのデータ値と 0�の値は一致します。一方、同一クロックサイクル内ではレジスタの値は更新されないためレジスタ �の値は一つ前のクロックにおける入力端子 !�の値となります。

��" 複合文���では複数の動作記述を並列に行うための ���文の他、動作を選択的に起動するための条件

文が �種類あります。複数の動作 #動作 �、動作 �、…'を並列に行う場合、���� �を用い、図%��の書式で記述します。

���� �内の動作は、記述の順序とは無関係に、同一クロックサイクル中に全て並列に行われます。���は、条件つきの動作を表し、図%��の書式に従い記述します。条件の値は、それぞれ �ビッ

トの数値として扱います。条件 �が成立 #値が=�='する場合は動作 �、条件 �が成立する場合は動作 �、両方成立する場合は両方の動作、条件が全て満たされない場合は動作 @がそれぞれ起動されます。����の動作は省略可能です。他に条件文として、%文と ���文があります。それぞれ図 %�、図 %��に書式を示します。%

文は ��� � 条件 � 動作 �と同一の動作記述であり、条件が単一の場合における記述を簡単化し

�システム設計において、すべての回路を作成することは少なく、完成された部品を多用して設計を進めます。これらのすでに作成済の回路をモデル化する時に、一意の合成はできなくても利用上便利な演算子を用いるために用意された機構が����%� 文です。ただし、�����では ����%�と ���%�� の区別をしておらず、どちらも同一の �������文に変換します。

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 150: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 付 録 �� ���文法

�� �動作 �動作 �…

図 %��� ���文の書式

� ! �条件 � " 動作 �条件 � " 動作 ����� " 動作

図 %��� ���文の書式

ます。���文は、優先付きの条件を持つ動作を記述する時に用い、先に記述した条件から優先度が高くなります。

���# ステージとステートクロック同期の論理回路を設計する場合に状態遷移やパイプラインなどの制御構造が必要です。

���はこれらの制御構造を支援する言語仕様を持ち、制御構造実現のため状態 #ステート � 0��� 'とステージ #0��& 'と呼ぶ概念を導入します。ステートはその名の通り状態遷移を記述するための論理構造であり、ステージは状態マシンを含む論理機能を実現するための構造です。図 %��にステージ記述の文法を示します。ステージのステージ共通動作もしくは状態は省略可能であり、ステージ共通動作を持たないス

テージや、状態を持たないステージも許されます。タスクの動作記述は ���言語仕様にはありませんので、�����処理系限定になります #�%�,2����ではサポートされません'。ステージは表%��の動作記述により起動�終了します。�����は、現ステージを終了させる同時に他のステージを起動します。また、%��@$ �����はステージの動作記述中しか許されないが、��������はモジュール中のどこに記述しても構いません。�つのステージに対して複数のタスクが同時に起動可能ですが、全てのタスクはいずれか �つのタスクがステージ動作を終了させる #ジョブの終了'時に同時に終了します。

表 %��� ステージ起動終了方法

開始 ジョブの生成 ������ ステージ名� タスク名 引数�…��ジョブの転送 ��� ステージ名� タスク名 引数�…��

終了 ジョブの転送 ��� ステージ名� タスク名 引数�…��ジョブの終了 ������

ステージ動作が起動される #ジョブの生成'時に、そのステージにステートがあるならばステートの起動も行われます。ジョブの生成時にスタートするステートは、リセット直後は %���������で示すステートとなります。ステートは明示的な遷移の指示によって変更します。���� ステート名 �

ステージが停止中もステートの遷移状態は保持されます。

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 151: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ����� ステージとステート

�� � 条件 � 動作

図 %�� %文の書式

��� �条件 � " 動作 �条件 � " 動作 ����� " 動作

図 %��� ���文の書式

����� ステージ名 ����������� ステート名 6$ ステート名,$ !!!�%��������� ステート名�ステージ共通動作����� ステート名 6 動作����� ステート名 , 動作!!!���= タスク名 6 動作���= タスク名 , 動作!!!�

図 %��� ステージ記述

(���( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 152: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル
Page 153: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���

付 録� �������文法

� �!�"&文法を簡単に紹介する。� �!�"&モジュールの基本構造を図)��に示す。端子リストには入

������ モジュール名 � 端子リスト ��

宣言

モジュール要素記述

���������

図 )��� � �!�"&モジュールの構造

表 )��� � �!�"&演算子

演算子 意味 演算子 意味 加算 否定� 減算 � 論理積� 乗算 � 論理和 除算 � 排他的論理和� 剰余 � 論理積 桁方向�� マイナス 単項演算� � 論理和 桁方向�� より大きい � 排他的論理和 桁方向��� 以上 ��� ��� を含めた一致比較� より小さい ��� ��� を含めた不一致比較�� 以下 � � � ビット連結�� 一致 �� 左シフト�� 不一致 �� 右シフト� 真理値否定 �� 条件式�� 真理値積 ��� ビット切り出し�� 真理値和 ����� ビット切り出し

������� � 回繰り返し

力、出力、双方向のデータ端子を記述する。宣言にはレジスタ #���'、配線 #&��'、メモリ #���'、整数 #������'、実数 #����'、時間 #���'を記述する。���������文は定数の定義を記述する。モジュール要素記述には ����、��&���や連続代入文 �����やモジュールインスタンスを記述する。� �!�"&のモジュールインスタンスは部品となる下位モジュールを定義する。

$�� 宣言&�� レンジ 配線名 ���� レンジ レジスタ名 配列範囲 ������� 変数名 配列範囲 ����� 変数名 配列範囲 ���� 変数名 �

レンジは >�����()�����()�?としてビットの範囲を与える。指定しない場合には �ビットと扱う。配列範囲は >�����(���#����(���#?として配列添字範囲を与える。省略時はスカラー値と

Page 154: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 付 録 �� �������文法

表 )��� � �!�"&演算子優先順位

演算優先順位 �降順�

T J UJ S US V UV I <

% . K

I <

DD EE

D D# E EI

## T# ### U##

J UJ V UV

S US

JJ

SS

L"

する。

$�� インスタンス定義モジュール名 パラメータリスト インスタンス名 �端子リスト��

ここでパラメータリストはインスタンスのパラメータを上書きするものであり、可変ビット長の汎用モジュールを作成する場合などに用いるが、ここでは扱わない。インスタンス名はモジュール内で他の要素と競合しない限り自由な名前をつけられる。端子リストには元のモジュールの端子の並びに合わせて本モジュール内で接続する端子を指定する。

インスタンス名!変数名

インスタンス名を付加することで下位のモジュールの内部変数を参照することができる。

$�� 数値表現� �!�"& の数値定数はビット数、基数、値によって指定する。ビット数は � 進で示す。基数

はP)$P�$P�$P@のいずれかであり、それぞれ � 進、�進、� 進、�� 進を意味する。値は各基数で定義される数値表現を与える #例� �P@�/'。特殊な数として、#と Yがあり、それぞれ論理値不明、ハイインピーダンスを表す。

$�� 演算子表 )��、表 )��に � �!�"&の演算子と優先順位を示す。

$�� 連続代入文����� 配線 �または出力端子� 式 �

連続代入文は組み合わせ回路を実現する。式には � �!�"&の演算子を用いたブール代数式を記述する。

(��( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 155: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ���� 動作記述

$�� 動作記述����と ��&���は動作を指示するモジュール要素記述である。動作には遅延制御、順次実行

ブロック、制御構文、手続き代入文、システムタスクなどが記述できる。

$� 遅延制御� �!�"&は遅延制御のために二つの構文が利用できる。固定時間の遅延を与える構文

4 時間 動作

と、イベント待ち合わせの構文

2 イベント 動作

である。イベントは変数名を記述するとその変数値が変化した時刻に、また、�������� 変数�、�������� 変数�の記述で変数値の立ち上がり、立ち下がりイベントを指定できる。

$�! 順次実行ブロック)��� � ラベル名!!!���

)���と ���で囲まれたブロックは順次実行ブロックとなり、ブロック内の文は順次実行される。=�ラベル名=はブロックにラベル名を付加する場合に必要であるが、省略可能である。

$�" 手続き代入文レジスタ変数 式 � 'T ブロッキング代入 T'レジスタ変数 � 式 � 'T ノンブロッキング代入 T'

順次実行ブロックの中では手続き代入文が利用できる。手続き代入文にはブロッキング代入とノンブロッキング代入がある。ブロッキング代入は通常のプログラム言語の代入と同様に代入の効果が即時得られる。一方、ノンブロッキング代入では代入は同時刻にその変数を参照する式の評価が終了した後に行われる。

$��# 制御構文順次実行ブロック内では図 )�� の制御構文が利用できる。これらの動作はおおむね �言語の対

応する構文に準拠する。

$��� システム関数とシステムタスクC���

シミュレーション時間を �ビット整数として記憶するシステム関数。

C������������

乱数を返すシステム関数。乱数シードを与える ����は省略可能。

(���( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 156: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 付 録 �� �������文法

% �式� 動作 6 ���� 動作 ,

���� �式�

値 6� 動作 6

値 ,� 動作 ,

��%����� デフォルト動作�������

%�� �初期設定� ループ条件� ループ更新時処理� 動作

&@�� �式� 動作

������ �式� 動作

%������ 動作

図 )��� � �!�"&の制御構文

C%�����Bファイル名B$B�B��

ファイルを書き込み用にオープンし、そのファイルハンドラを返す関数。ハンドルとなる変数は������として宣言してあること。追記のオプション$B�Bを指定可能。指定しない場合には上書きする。

C%��@�C�����

シミュレーションを終了する。

C�������BフォーマットB$ 変数$ !!!��C%�������ファイルハンドル$BフォーマットB$ 変数$ !!!��C����)��BフォーマットB$ 変数$ !!!��C%����)��ファイルハンドル$BフォーマットB$ 変数$ !!!��C&����BフォーマットB$ 変数$ !!!��C%&����ファイルハンドル$BフォーマットB$ 変数$ !!!��C�������BフォーマットB$ 変数$ !!!��C%�������ファイルハンドル$BフォーマットB$ 変数$ !!!��

�言語とほぼ同一の構文でコンソールに変数をプリントする。C������は表示後改行するので、�の �!��<と同じ使い方をする場合にはC&���を用いる。C������は一度実行すれば、与えられたいずれかの変数値が変化した場合に自動的にC������を起動する。C����)�はC������と同じ動作を行うが、同一シミュレーションサイクルの一番最後に起動されることが保証される。

C�������)�Bファイル名B$ 変数$ 開始番地$ 終了番地��C�������@�Bファイル名B$ 変数$ 開始番地$ 終了番地��

外部のデータを変数に読み込む。C� �/7 7;はバイナリデータファイル、C� �/7 76は ��進で空白もしくは改行で区切られたデータファイルを変数に読み込む。開始番地と終了番地は省略可能。

C%������ファイルハンドラ��

オープンしたファイルをクロースする。

C����%���Bファイル名B��C���������レベル$ 変数'モジュール名$ …��

(���( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 157: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による ���設計入門 ����� システム関数とシステムタスク

波形ダンプを指定する。C/-7 :��0のレベル、変数もしくはモジュール名は省略可能であり、レベルはダンプすべき下位モジュールのレベルを示す。変数、モジュール名が省略されると全変数をダンプ対象とする。

C�����C���������B書式B$変数��

シミュレーション起動時のコマンドライン変数を読み込むシステム関数である。書式で指定した変数が見付かった場合、この関数は �*;�を返し、見付からない時には �*;を返す。次の例はコマンドラインに*I�,��L�����*で示す引数が与えられない場合には既定値として変数 ����に �を設定し、与えられた時にはその値を設定する。

���T@'����@��������F&2?:#K�F������ ���#����

(���( ���������� �� �������� !"���#� ���$�%�& �� '����� '(�(��()�

Page 158: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル
Page 159: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���

関連図書

3�4 清水5 =コンピュータ設計の基礎知識5= 共立出版5 ��

3�4 日本システムハウス協会5 =平成 ��年度 エンベデッドシステム技術者育成に関する調査研究報告書5= P%�%1��15 ��

3�4 飯田5 清水 =商用ソフトを用いない ��� ベースの ��� 試作の試行5= 情処研報5�"���5�"���5 ���(�

34 ���: � %� A �/ ��/ ���� %� �"�9��5����"/-.�!"� �" ���� ��0� 705 %//!0"�1H 0� �5����

3�4 6�� ���999�:/ .�-1�"?�"��.�Q �

3�4 6�� ���999�7"0!0�"�&�

3�4 6�� ���999�! 1��.6�Q �

3�4 6�� ���9991�0!7��! ��<��� .6 �.6 ����!��. �

3�4 )� P"6�0"�5 ����5 =������ � �0!"� � G0 �*0 A��-��5= G�!: �0!�� "< ���!<"��!�5 ���

3�4 @����''&&&!�������!���'��������!@��

3��4 ����-..,,,���"������$.()".�(�����.

3��4 ����-..,,,�()�+����.��$,(*

Page 160: による 設計入門 - コンピュータ設計の基礎知識による 設計入門 第 章 基礎演習 はじめに モジュール間インターフェイス 要求・応答モデル

���による���設計入門

第 ��� 版

発行年月日� ����年 �月 ��日編集・発行� 米国法人 アイピー・アーク・インコーポレイテッド

日本における代表者:清水 尚彦���� ���������� ����

���� �������������� ����

この小冊子についてのお問い合わせは上記連絡先までお願いします。