AN82156 PSoC 3, PSoC 4, and PSoC 5LP - Designing PSoC Creator Components with UDB Datapaths (Japanese).pdf

AN82156
PSoC ® 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™
コンポーネントの設計
著者: Todd Dust および Greg Reynolds
関連プロジェクト: あり
関連製品ファミリー: CY8C3xxx、CY8C5xxx、CY8C42xx
ソフトウェア バージョン: PSoC Creator 3.0 SP1
すべての関連資料の一覧については、ここをクリックしてください。
AN82156 は、PSoC 3、PSoC 4 および PSoC 5LP のユニバーサル デジタル ブロック (UDB) データパスを用いた
PSoC Creator コンポーネントの設計方法を説明します。データパス ベースのコンポーネントは、カウンターや PWM、シフター、
UART、SPI などの一般的な機能を実装することができます。これらはカスタム デジタル ペリフェラルを作成し、CPU の負担を軽
減するためにデータ管理のタスクを実行するためにも使用できます。本書はまた、データパス インスタンスの作成、表示、修正
用に PSoC Creator UDB エディター ツールの使用方法についても説明します。
目次
プロジェクト#2 – 16 ビット PWM ................................... 44
はじめに ............................................................................. 2
プロジェクト#4 – 簡単な UART ..................................... 52
従来の PLD と PSoC UDB の比較 ...................................... 2
プロジェクト#5 – パラレル入力とパラレル出力の例........ 54
データパス設計と PLD ベース設計の比較 ...................... 2
データ パスのアーキテクチャおよび特長 .............................. 4
付録 B – データパス コンフィギュレーション ツールのチート
シート ............................................................................... 58
データパス ベースのコンポーネント ...................................... 5
動的コンフィギュレーション RAM (CFGRAM) セクション... 60
データパス コンフィギュレーション ツール ........................ 5
静的コンフィギュレーションのセクション ........................... 63
UDB エディター .............................................................. 6
初期レジスタ値の設定 ................................................. 70
適切なツールの選択 ...................................................... 7
データパス チェーン接続 .............................................. 71
プロジェクト#1 – 8 ビット ダウンカウンター ............................ 7
データパス レジスタのファームウェア制御 ..................... 72
プロジェクト#3 – アップ/ダウンカウンター .................... 48
プロジェクト#2 – アップ/ダウン カウンター ......................... 20
その他 ......................................................................... 73
プロジェクト#3 – 簡単な UART .......................................... 26
付録 C – 自動生成 Verilog コード ..................................... 74
UDB エディターからデータパス コンフィギュレーション ツールへ
の移植 ............................................................................. 31
PSoC Creator により生成される新しい Verilog ファイル... 74
新しいデータパス インスタンスのある Verilog ファイル ..... 74
まとめ ............................................................................... 31
すべての SimpleCntr8 変更後の Verilog ファイル ......... 77
関連リソース ..................................................................... 32
付録 D – PI と PO を持つ 24 ビット データパスの例 ........... 80
アプリケーション ノート .................................................. 32
KB 記事....................................................................... 32
TRM ........................................................................... 32
ビデオ ......................................................................... 32
著者について.................................................................... 32
付録 A – データパス コンフィギュレーション ツールの使用例
........................................................................................ 33
プロジェクト#1 – 8 ビット ダウンカウンター ..................... 33
www.cypress.com
文書番号: 001-89531 Rev. *A
1
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
はじめに
PSoC® 3、PSoC 4 および PSoC 5LP (以下 PSoC という) は
単なるマイクロコントローラーではありません。PSoC により、
マイクロコントローラー、コンプレックス プログラマブル ロジック
デバイス (CPLD) および高性能アナログの機能を統合し、他
にはない柔軟性を得ることができます。これにより、費用や基
板面積、消費電力、開発時間を低減できます。
CPLD 設計を独立した CPLD から PSoC PLD へ移植するの
は、Verilog コードのコピー & ペーストと同じくらい容易です。
AN82250 は、移植のやり方の順を追った説明を提供しています。
ただし、PSoC の PLD はほとんどの CPLD または FPGA より
小さく、多くのデザインが大きすぎて PSoC に移植することが
できません。この課題を克服するために、ユニバーサル デジタ
ル ブロック (UDB) データパスを使用できます。データパスは
複雑な計算機能を実行するよう設計されます。これにより、
PLD の負荷を軽減して PLD をステートマシンやグルー ロジッ
クとして使用することができます。そのため、データパスは
Verilog コードのフットプリントを大幅に削減できます。
データパスの中心は 8 ビットの算術論理演算ユニット (ALU)
です。ALU は加算、減算、OR、XOR、AND、インクリメント、デ
クリメント、シフトなどの機能を実行します。ALU に関連してい
るいくつかのレジスタおよび条件付き比較ブロックがあります。
データパスはチェーン接続して 1~32 ビット幅の動作を実行で
きます。
データパスを PLD と併用することで、複雑なカスタム デジタル
ペリフェラルを作成できます。これらのペリフェラルは
PSoC Creator コンポーネントに統合されています。現在、
PSoC Creator は UDB データパスを用いた様々なデジタル コ
ンポーネントを備えています。しかし、標準的なコンポーネント
には希望する機能がサポートされないことがあります。本アプ
リケーション ノートは、データパスを用いたユーザー独自のコ
ンポーネントを作成する方法を説明します。
これは上級のアプリケーション ノートであり、読者が PSoC
Creator でアプリケーションを開発することに精通していること
を前提します。
PSoC の初心者である場合、以下の資料をご参照ください。

AN54181 Getting Started with PSoC 3

AN79953 Getting Started with PSoC 4

AN77759 Getting Started with PSoC 5LP
PSoC Creator に慣れていない場合、以下をご覧ください。

PSoC Creator のホームページ
本アプリケーション ノートはまた、デジタル設計および Verilog
の基礎知識を前提にしています。これらの知識に自身のない
場合、以下の資料をご参照ください。


KBA86336 Just Enough Verilog for PSoC

AN82250 Implementing Programmable Logic Designs
with Verilog.
関連のあるデータパスの設計リソースのリストは、「関連リソー
ス」節をご覧ください。
従来の PLD と PSoC UDB の比較
PSoC は最適化されたプログラム可能なデバイスで、はるかに
大きいプログラマブル ロジック製品の機能に匹敵するか、そ
れよりも優れています。PSoC は大きな FPGA または CPLD
の実装を直接統合するよう設計されていません。その代わりに、
PSoC は小型、高速、低消費電力のプログラマブル デジタル
ブロック、すなわち UDB のアレイを備えています。
図 1 に示すように、各 UDB は 2 個の小型 PLD、1 個のデー
タパス モジュールおよびステータス コントロール ロジックで構
成されています。PSoC には最大 24 個の UDB があります。
図 1.簡略化された UDB のブロック図
PLD
Chaining
Clock
and Reset
Control
Status and
Control
PLD
12C4
(8 PTs)
PLD
12C4
(8 PTs)
Datapath
Datapath
Chaining
Routing Channel
データパス モジュールはインクリメント、デクリメント、加算、減
算、ビット単位ロジック、シフトなどの簡単な機能を実行できま
す。データパスは PLD と併用することで、より複雑な機能に使
用するこ とが でき ま す。 こ の組み合わせは 、 カ ウンターや
PWM、シフター、UART、I2C インターフェースなど頻繁に使わ
れる機能を容易に実装できます。
この組み合わせはまた、PSoC の PLD に適合していない
CPLD または FPGA 設計の機能を実装するためにも使用でき
ます。Verilog で書かれた複雑な機能は PSoC デジタル リソー
スをもっと効果的に利用するためにデータパス用に最適化す
ることができます。これらの機能には加算器、減算器、シフター
などがあります。データパスは PLD に比べてこれらをより効果
的に実行できます。
データパス設計と PLD ベース設計の比較
UDB で実装された機能は通常、PLD の代わりにデータパスを
使用して算術演算を実行する場合、必要なリソースが少なくな
AN81623 PSoC Digital Design Best Practices
www.cypress.com
文書番号: 001-89531 Rev. *A
2
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
ります。例えば、表 1 に示す PLD とデータパスで実装する 8
ビット算術演算と論理演算を考えてみましょう。
表 1. PLD 対データパスのリソース使用
機能
PLD でのみ
消費するリソース
PLD
ADD8
SUB8
CMP8
SHIFT8
5
5
3
3
使用量
(%)
10.4%
10.4%
6.3%
6.3%
データパスでのみ
消費するリソース
データパス
1
1
1
1
使用量
(%)
4.2%
4.2%
4.2%
4.2%
デジタル機能を最も効率的に実装するには、データパスを
PLD と併用する必要があります。
経験則として、UDB リソースを利用する最適な方法は以下の
通りです。

PLD: 組み合わせロジック、グルー ロジック、ステートマシン
(PLD の実装の詳細については、「AN82250 PSoC 3,
PSoC 4 and PSoC 5 Implementing Programmable
Logic Designs」および「AN81623 PSoC 3, PSoC 4 and
PSoC 5 Digital Design Best Practices」を参照してくださ
い)。

データパス: CPU との FIFO インターフェース、計算、タイ
ミング、通信、バイト幅またはワード幅の比較。
PSoC PLD で複雑な機能を実装することができますが、リソー
スをすぐに使い果たしてしまいます。
www.cypress.com
文書番号: 001-89531 Rev. *A
3
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
データ パスのアーキテクチャおよび特長
データパスは図 2 に示すように、比較回路と条件生成回路を
備えたコンフィギュレーション可能な 8 ビット ALU、および ALU
の処理と CPU との通信用のレジスタを含んでいます。また、シ
フトおよびマスク用の独立ブロックもあります。
図 2. 簡略化されたデータパス ブロック図
INSTR_
ADDR[2:0]
F1
D0
A1

インクリメント

デクリメント

加算

減算

ビット単位 AND

ビット単位 OR

ビット単位 XOR

パススルー
機能の選択は、CFGRAM に格納された命令によってサイクル
ごとに制御されます。独立したシフト (左と右) およびマスク演
算は ALU の出力で可能です。
A0, A1,
D0, D1
A0, A1
PI
AL U
ALU は 8 つの汎用機能を実行できます。
D1
A0
3 つのアドレス ラインは PLD ロジックまたは外部信号によって
駆動できます。一般的な使用例としては、PLD を使ってステー
トマシンを作成することです。ステートマシンからのロジックは、
データパス命令を制御するためにアドレス入力に接続されま
す。
3 本のアドレス ラインは複数の名称を持っていて、混乱を招く
ことがあります。cs_addr[2:0]、RAD[2:0]および
INSTR_ADDR[2:0]は同じものを示すことに注意してください。
本アプリケーション ノートでは、INSTR_ADDR を使用します。
CFGRAM
F0
8 つの命令があるため、3 本の命令アドレス ライン
(INSTR_ADDR[2:0]) があります。アドレス信号は、どの命令
をデータパスで使用するかをクロックの各立ち上がりエッジで
決定します。
PO
レジスタ
各データパス モジュールは 4 個の 8 ビット ワーキング レジス
タと 2 個の FIFO を含んでいます。
ALU

A0 と A1 – 通常 ALU 演算で使用されるデータを格納す
るアキュムレータ レジスタです。これらのレジスタを使用し
て Dx レジスタまたは FIFO からのデータを格納すること
もできます。

D0 と D1 – 通常カウンターの開始値やリロード値などの
スタティック データを格納するデータ レジスタです。

F0 と F1 – 転送元バッファと転送先バッファとして使用で
きる 4 バイト FIFO であるレジスタです。これらは主に
CPU または DMA をデータパスとインターフェースさせる
ために使用されます。
Shifter & Mask
ZDET
CMP0
FFDET
CMP1
注 詳しいブロック図は、付録 B を参照してください。
ダ イ ナ ミ ッ ク コ ン フ ィ ギ ュ レ ー シ ョ ン R AM ( C F G R AM )
8 つの一意のデータパス命令 (またはコンフィギュレーション) を
ダイナミック コンフィギュレーション RAM (CFGRAM) に格納
できます。命令はデータパスの機能と接続を定義します。これ
らには ALU 機能、ALU 入力、レジスタ書き込み、シフト動作な
どがあります。各命令は 1 クロック サイクル以内に実行します。
www.cypress.com
CFGRAM に格納された命令は、各命令でこれらのレジスタが
どのように使用されるかを判定します。
CPU (PSoC 3 と PSoC 5LP においては DMA) を使用して
データパス レジスタへの読み書きを実行できますが、可能な
限り FIFO を使用してください。アキュムレータ レジスタは互い
に非同期して動作し、CPU または DMA アクセスの時などい
つでも変更される可能性があります。FIFO は CPU/DMA ア
クセス用に同期化されます。
文書番号: 001-89531 Rev. *A
4
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
条件付き演算子
図 3 に示したように、各データパスは「より小さい」と「等しい」と
いう 2 種類の比較機能があります。比較ブロックは、マスクを
使用してビット単位の演算を実行することができます。
図 3. データパスの比較ブロック
A0
D0
A1 A0
D1 A0
PSoC Creatorを用いてデータパス ベースのコンポーネントを
実装するために2つの方法があります。Verilogファイルを書き、
データパス コンフィギュレーション ツールを使用してデータパ
スを設定することができます。Verilogで書くことまたはデータ
パス コンフィギュレーション ツールを使用することが難しい場
合は、UDBエディターを使用できます。各方法には利点もあり
欠点もあります。一般的には、Verilogの方法はUDBエディター
より複雑な設定が可能ですが、UDBエディターはVerilogより
使いやすいです。
CMP0 ==
CMP1 ==
データパス コンフィギュレーション ツール
CMP0 <
CMP1 <
データパス コンフィギュレーション ツールは、Verilog ファイル
内でデータパス インスタンスの作成、表示、変更および削除を
可能にするアプリケーションです。ツールは Verilog ファイルを
解析し、それぞれのデータパスをエンティティとして表示します。
このエンティティはツールで「コンフィギュレーション」と呼ばれ
ます。1 つのコンフィギュレーションは 1 個の物理データパスを
表します。
A0 と A1 レジスタは 0 (ZDET) および全 1 (FFDET) 検出機能
を持っています。FIFO は満杯および空状態の信号があります。
入力と出力
UDB はデジタル信号インターコネクト (DSI) というプログラム
可能なデジタル配線の広範なファブリックによって囲まれてい
ます。DSI は PSoC において UDB 内、また UDB アレイと他
のブロック間で信号を接続します。
データパス入力は命令、制御、データの 3 種類があります。命
令入力 (INSTR_ADDR[2:0]) は CFGRAM からの現時点の
データパス命令を選択します。制御入力は FIFO からデータ
レジスタをロードし、アキュムレータ出力を FIFO に取り込みま
す。データ入力にはシフトイン (SI) とキャリーイン (CI) 信号が
あります。データパスは最大 6 本の入力を持っています。これ
らの入力は、チップにおいて DSI に接続しているどのブロック
からも来られます。
Verilog ファイルにデータパスがなければ、新しいデータパスを
作成して追加できます。複数のデータパスを 1 つのファイルに
追加し、それらをリンク (連鎖) してマルチバイト機能を作成す
ることができます。
図 4 に示すように、各データパスはグラフィカル ユーザー イン
ターフェース (GUI) を介して表示されます。GUI 画面は単にデー
タパスの CFGRAM およびスタティック コンフィギュレーション
レジスタを表示します。
図 4. データパス コンフィギュレーション ツールのインターフェース
データパスは最大 6 本の出力を持っています。これらの出力
は、FIFO 状態、比較状態、オーバーフロー検出、キャリーアウ
ト、シフトアウトなど様々なデータパス状態信号に接続できます。
そして、出力は DSI に接続してからその他の内蔵リソースに
送信されます。
Dynamic Configuration
チェーン接続
各データパスは 8 ビット演算を実行することができます。複数
のデータパスをチェーン接続して 1~32 ビット幅の機能を作成
することができます。
シフト、キャプチャおよびその他の条件付き信号をチェーン接
続してより高精度の算術とシフト機能を形成することができま
す。チェーン接続された信号はデータパス入力と出力を消費し
ません。
UDB およびデータパスの完全な仕様については、「PSoC 3
Architecture TRM」を参照してください。
データパス ベースのコンポーネント
カスタム PSoC Creator コンポーネントは、データパスを効果
的に使用する最適な手段です。サイプレスは、コンポーネント
作成手 順の 全 体を 説明 す る 「 Component Author Guide 」
(CAG) を提供しています。PSoC Creator 内でこのガイドを開
く に は 、 Help > Documentation > Component Author
Guide を選択します。
www.cypress.com
Static Configuration
「付録 B – データパス コンフィギュレーション ツールのチート
シート」で GUI の各フィールドを説明します。GUI のフィールド
は PSoC デバイス内のレジスタに対応します。これらのレジス
タは「PSoC 3 Architecture TRM」、「PSoC 5LP Architecture
TRM」および「PSoC 4 Architecture TRM」で詳しく説明されて
います。
データパス コンフィギュレーション ツールを PSoC Creator 内
からでも起動できます (Tools > Datapath Config Tool…)。
文書番号: 001-89531 Rev. *A
5
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
本アプリケーション ノートの本文はデータパス コンフィギュレー
ション ツールではなく、UDB エディターに焦点を合わせます。
付録 A は本アプリケーション ノートで言及するすべての例をデ
ータパス コンフィギュレーション ツールを使用して実施する方
法を説明します。また、付録 A にパラレル入力とパラレル出力
を使用する例も示します。
UDB エディター
UDBエディターは図5に示すようにUDBベース デザインを設
計するために使用されるグラフィカル ツールです。Verilogコー
ドを書くことや上級のデータパス コンフィギュレーション ツール
を使用せずにコンポーネントを設計するために使用できます。
UDBエディターはすべてグラフィカルで、データパスや制御レ
ジスタ、ステータス レジスタ、ステータス割り込みレジスタ、
count7カウンター、PLDなど様々なUDB内の要素へのアクセ
スを可能にします。
UDB エディターにより、デジタル ロジックや Verilog について
の知識がほとんどなくても UDB ベースのハードウェアを設計
することができます。コードを書く必要なくドラッグ & ドロップし
てハードウェアをコンフィギュレーションできるよう設計されてい
ます。これはまた、リアルタイムにデザインを Verilog に変換し
て、UDB ブロックがどのように Verilog に変換されるかを示し
ます。
UDBエディターはグラフィカル ツールであるため、Verilogや
UDBの込み入った細部についての知識はほとんど必要ありま
せん。しかし、抽象概念の簡素化の結果として、柔軟性および
ハードウェアに対する細かい制御が低下してしまいます。また、
いくつかの高度なUDB機能を統合せず、複雑な制限となること
があります。
図5. UDBエディター
以下ではUDBエディターの構造を説明します。
ページ – UDBエディターのドキュメントを開くと、回路図ページ
と同様な編集可能なページが表示されます。これはUDB要素
を配置およびコンフィギュレーションするためのキャンバスです。
Page 1タブからUDBエディターのページをいくつでも追加でき
ます。ページは1つのデザインで一緒に変換されます。
Verilog – ページのタブの隣にVerilogタブがあります。これは、
デザインで変換されたハードウェアの読み取り専用のビューで
す。これは動的に更新されます。すなわち、デザインが変更さ
れると、Verilogコードも更新されます。このコードは編集および
削除が不可能であるため、望ましい結果を見るにはデザイン
www.cypress.com
に対して適切な変更を行う必要があります。Verilogによりデザ
インを編集するためにこのコードをVerilogファイルにコピー &
ペーストすることもできます。
デザイン プロパティー – デザイン プロパティーはデザイン キ
ャンバスの右側にあります。これにより、設計で使用する入力、
出力、変数などをコンフィギュレーションできます。設計が完了
した時、入力と出力はコンポーネント端末を形成します。デザ
インにデータパスが含まれている場合、デザイン プロパティー
ウィンドウはグローバルなデータパス コンフィギュレーションを
設定するために使用されます。
文書番号: 001-89531 Rev. *A
6
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
デザイン要素パレット – デザイン要素パレットはデザイン キャン
バスの左側にあります。これはデザインに含めるUDB要素を
選択するためのメニューです。それらは:

データパス (DP)

制御レジスタ (CR)

ステータス レジスタ (SR)

ステータス割り込みレジスタ (SI)

count7 カウンター (C7)

ステートマシンの状態 (SM)
プロジェクト#1 – 8 ビット ダウンカウンター
このプロジェクトの目的は、簡単なデータパス ベースのコン
ポーネントを作成するために必要な手順を紹介することです。
まず、8 ビット ダウンカウンター コンポーネントを作成します。
次に、それを 8 ビット PWM に変更し、その後、16 ビット PWM
に変更します。
8 ビット カウンター コンポーネントの詳細
図 6 に示すように、簡単なダウンカウンターは 2 つの状態を持
つステートマシンで示すことができます。状態遷移はデータパ
ス クロックの立ち上がりエッジで行われます。
適切なツールの選択
図 6. 簡単なカウンターの状態図
ほとんどのデザインは UDB エディターで行えます。UDB エディ
ターはデータパスの最も一般的な機能を実装します。但し、実
装されない機能はいくつかあります。これらの機能を実装する
ためには、データパス コンフィギュレーション ツールを使用し
なければなりません。UDB エディターが対応していない機能
は以下の通りです。

ダイナミックな FIFO 制御

FIFO クロック反転

パラレル入力とパラレル入力。付録 A で、データパス コン
フィギュレーション ツールを使用してこれを実装する一
例を説明します。

巡回冗長チェック (CRC)

擬似乱数シーケンス (RPS)

選択可能キャリーイン

ダイナミック キャリーイン
Count != 0
Decrement
Count
Count == 0
Count != 0
Reload
Count
これらの機能はほとんどの設計で必要ありません。そのため、
まずはるかに使いやすい UDB エディターで開始してください。
開発中に、望ましい機能が UDB エディターで実装されていな
いことに気付いた時、いつでも UDB エディターによって生成さ
れた Verilog コードをコピー & ペーストし、データパス コンフィ
ギュレーション ツールを使用して Verilog ファイルを変更でき
ます。
注: UDB エディターは、データパス コンフィギュレーション ツー
ルによって生成された Verilog ファイルを読むことができません。
これらの高度な機能のいずれかを必要とする場合、自分の
Verilog コードを書いてデータパス コンフィギュレーション ツー
ルを使用するオプションがあります。付録 A は UDB エディター
の代わりにデータパス コンフィギュレーション ツールを使用す
るすべての例を示します。
UDB エディターがふさわしいツールである場合、本アプリケー
ション ノートは UDB エディターを用いた簡単なデータパス ベー
スのコンポーネントを作成する順を追った説明を提供しています。
Count == 0
カウンターは初期値で開始し、その値をデクリメントします。カ
ウントが 0 に達すると、イベントがトリガーされ、周期はリロード
されます。この種のカウンターは容易にデータパスに実装され
ます。
カウンターを実装するためには CFGRAM に格納された 2 つ
のデータパス命令のみ必要です。1 つの命令は、ワーキング
レジスタの 1 つに格納されたカウント値をデクリメントします。2
番目の命令は、他のレジスタに格納された初期値でカウントを
リロードします。残りの 6 つの CFGRAM 命令は未使用です。
この例で使用される 2 つのデータパス レジスタは以下の通り
です。

A0 – カウント値を格納し、ALU によってデクリメントされま
す。

D0 – カウントが 0 に達した時に A0 にリロードされる値を
格納します。
各クロック サイクルでロード命令かデクリメント命令かどちらを
実行するかを決定するための方法が必要となります。図 6 は、
遷移がカウントの値 (0 または 0 以外) によって制御されること
を示します。
www.cypress.com
文書番号: 001-89531 Rev. *A
7
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
データパスは、A0 と A1 のデータの値を監視するゼロ検出ブ
ロック (ZDET) を備えています。このブロックは z0 (A0 == 0)
と z1 (A1 == 0) という 2 つの出力があり、それぞれが A0 と
A1 の状態を示します。各出力は、値が 0 であれば HIGH にな
り、値が 0 ではなければ LOW になります。
図 7. 強調表示される簡単なカウンター ブロック図
INSTR_
ADDR[2:0]
CFGRAM
この例では、z0 出力を使用してどの命令を実行するかを制御
します。命令のアドレッシングには 3 ビットが必要です。ビット 0
を z0 に接続し、他のビットを LOW に維持することができます。
表 2 は遷移表です。
F0
F1
表 2. データパスの命令
CFGRAM の
命令
D0
命令アドレス ビット
(INSTR_ADDR)
D1
(Reload Value)
2
1
0
動作
0
0
0
z0 = 0
デクリメント カウント
1
0
0
z0 = 1
リロード カウント
2-7
X
X
X
未使用
A0
A0 でのカウントは 0 に達すると、z0 は 1 になります。これによ
り、次のデータパス命令は「リロード カウント」になります。カウン
トが D0 から A0 にリロードされる時、z0 は 0 になり、次のコン
フィギュレーションは「デクリメント カウント」になります。
(Count Value)
A1
A0, A1
A0, A1,
D0, D1
PO
PI
ALU
動作方法を視覚化するには、図 7 で強調表示されるデータパ
ス ブロック図をご覧ください。
(Decrement A0)
z0
z1
ZDET
CMP0
FFDET
CMP1
INSTR_ADDR = 000 (Decrement A0)
INSTR_ADDR = 001 (Reload A0 from D0)
z0 = INSTR_ADDR lsb
www.cypress.com
文書番号: 001-89531 Rev. *A
8
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
8 ビット カウンター コンポーネントの作成手順
3.
この例では、空のプロジェクトで開始します。
1.
図 10 に示すように、UDB Document を選択し、コンポー
ネントを SimpleCntr8_v1_0 と名付けます。
図 10. UDB ドキュメントの追加
PSoC Creator を起動して、図 8 に示すように
「AN82156」というプロジェクトを作成します。「AN82156」
ワークスペースもデフォルトで作成されます。
図 8. 新しいプロジェクトの追加
コンポーネントの名前に版数を含んだ方が良いです。コンポー
ネントの名前に「_vX_Y」タグ (X がメジャー バージョン、Y が
マイナー バージョン) を追加します。PSoC Creator はバージョ
ニング機能を持ち、コンポーネントの複数のバージョンを追跡
して使用できます。
4.
これで、一般的にはコンポーネントを格納する新しいライブラリ
を作成します。しかし、PSoC Creator 3.0 と 3.0 SP1 の UDB
エディターはライブラリでは正常に動作しません。今回は、ライ
ブラリの代わりにプロジェクトのコンポーネントを作成します。こ
の問題は PSoC Creator の次回のリリースで修正されます。
2.
UDB ドキュメント回路図を作成するために Create New
を作成します。
UDB ドキュメント回路図は、UDB ベースのコンポーネントを作
成するためのキャンバスです。この回路図に UDB 要素をド
ラッグ & ドロップする方法は、普通の PSoC Creator 回路図と
全く同じです。回路図にドラッグできるコンポーネントは回路図
の左側のサイドバーに表示されます (図 11)。
図 11. UDB 要素
Workspace Explorer の Components タブに切り替え、
プロジェクト「AN82156」を右クリックします。図 9 に示す
ように、ドロップダウン メニューから Add Component
Item... を選択します。
図 9. コンポーネント アイテムの追加
www.cypress.com
文書番号: 001-89531 Rev. *A
9
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
5.
データパス要素を UDB ドキュメント回路図にドラッグします
(図 12)。
7.
図 12. データパス要素
データパス cntr8 では、Inst. Addr が 3’b000 の緑色の
ボックス (図 14) をダブルクリックして図 15 に示すコンフィ
ギュレーション ダイアログを開きます。
図 14. 命令 0
図 15. 空白命令コンフィギュレーション ダイアログ
6.
データパス インスタンスをシングルクリックします。UDB
エディターの右側にあるプロパティー ウィンドウの最下部
には Datapath properties があります。図 13 に示すよう
にデータパス名を「Datapath_1」から「cntr8」に変更します。
図 13. データパス プロパティー
このダイアログ ボックスでは、最初のデータパス命令をコン
フィギュレーションします。表 2 に示すように、命令 0 コンフィ
ギュレーションではデータパスはカウント (A0 に格納された) を
デクリメントします。
8.
ALU operation Function を A0 – 1 (デクリメント) に設
定します。Register Writes セクションでは A0 = ALUout
に設定します。これにより、最初の命令が A0 レジスタを
デクリメントしてその値を A0 に戻って書き込むよう設定さ
れます。この命令をコメントとして記述することもできます。
この場合は「Decrement Count」 (デクリメント カウント) で
す。図 16 を参照してください。
図 16.命令 0 コンフィギュレーション
www.cypress.com
文書番号: 001-89531 Rev. *A
10
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
9.
次に、命令アドレス 3’b001 を設定します。そのボックスを
ダブルクリックします。表 2 に示すように、命令 1 は D0 に
格納された値を A0 にリロードします。Register Writes
セクションでは、A0 = D0 に設定します。図 17 を参照して
ください。
図 19 に示すように「Configure Datapath Outputs」ダイアログ
が表示されます。
11. Output 0 を A0 == 0 に、Name を「Zero_Detect」に設定
します。
図 19.データパス出力コンフィギュレーション
図 17. 命令 1 コンフィギュレーション
次に、各クロック サイクル中にデータパスが実行する命令を選
択する必要があります。この例では、データパス内蔵のゼロ検
出器を使用します。まず、ゼロ検出器の信号にラベルを付けま
す。
Zero_Detect 信 号 は デ ー タ パ ス の z0 出 力 を 表 し ま す 。
Zero_Detect は、A0 が 0 になった時に HIGH になり、A0 が 0
以外になった時に LOW になります。
この信号をデータパスの命令アドレスに接続します。これは
データパスの入力セクションで設定されます。
10. 図 18 に示す青色の出力ボックスをダブルクリックします。
12. 図 20 に示すように青色の入力ボックスをダブルクリックし
ます。
図 18.データパス 出力
図 20. データパス入力
13. Input 0 は図 21 に示すように、Selection が
INST_ADDR[0]に、Expression が Zero_Detect に設定
されたことを確認します。
図 21.データパス入力コンフィギュレーション
www.cypress.com
文書番号: 001-89531 Rev. *A
11
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
Zero_Detect 信号はデータパスが実行する命令を選択します。
データパスは、Zero_Detect が HIGH の場合命令 1 を実行し、
LOW の場合命令 0 を実行します。
次に、カウンターおよび周期レジスタの初期値を定義します。
16. 図 24 に示すように‘SimpleCntr8_v1_0’ Properties
ウィンドウでは、Outputs の下で「TC」と名付けられた新
しい出力を定義し、Expression を「Zero_Detect」に設定
します。
図 24.コンポーネント出力
14. 図 22 に示す灰色と紫色のコンフィギュレーション ボックス
をダブルクリックします。
図 22.データパス レジスタ
15. 図 23 に示すように A0 と D0 の初期値を 15 に設定します。
図 23. データパス レジスタ コンフィギュレーション
このコンポーネントのシンボルを生成します。これはトップ デザ
イン 回路図に表示されるシンボルです。
17. 図 25 に示すように、UDB ドキュメント (.cyudb) の空白領
域を右クリックして Generate Symbol を選択します。
図 25. シンボルの生成
これで、データパスのコンフィギュレーションが完了しました。
次に、コンポーネント出力を定義します。この出力はターミナル
カウント (TC) です。これは、カウンターが 0 に達した時に
HIGH になり、その他の時に LOW になります。
図 26 に示すように回路図シンボルが表示されます。
図 26: 回路図シンボル
18. (シンボル自身ではなく) シンボル エディター空白領域を
右クリックして、ドロップダウン メニューから Properties
を選択します。
www.cypress.com
文書番号: 001-89531 Rev. *A
12
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
19. 図 27 に示すようにプロパティー フィールドの Symbol セ
クションに値を入力します。

Doc.APIPrefix = SimpleCntr8
この値は、コンポーネント用に生成されたいかなる API フ
ァイル名の先頭にも付加されます。この例では、API を生
成しませんが、コンポーネントを作成するたびにここに値
を入力してください。
コンポーネントは使用可能になりました。図 28 に示すように、
新しいコンポーネントは Component Catalog の AN82156 タ
ブに表示されます。
図 28.Component Catalog での新しいコンポーネント

Doc.CatalogPlacement = AN82156/Digital/Cntr8
「…」ボタンをクリックして「Catalog Placement」ダイアロ
グを開き、この値を入力します。PSoC Creator はこの値
を使って、Component Catalog の階層を定義します。最
初のアイテムは、カタログにおいてコンポーネントを表示
するタブです。その後の各「/」はサブレベルを表します。階
層は少なくとも 1 つのサブレベルを含む必要があります。
上記の値は、コンポーネントが AN82156 タブの「Digital」
サブレベル内で「Cntr8」として表示されることを示します。

Doc.DefaultInstanceName = SimpleCntr8
これは、コンポーネントが回路図に配置された時に表示さ
れるデフォルト名です。
コンポーネントが Component Catalog に表示された後、それ
を回路図に配置して他のコンポーネントと同じように使用する
ことができます。
それをテストするには、クロック ソースおよびカウンターの
「TC」出力を表示する方法を追加する必要があります。
21. Cntr8 コンポーネントをプロジェクト回路図に配置します。
22. クロック コンポーネントを「clock」端末に接続します。クロ
ックを 10kHz に設定します。どの値でも構いませんが、
10kHz ならオシロスコープでの表示が容易になります。
図 27.シンボル プロパティーの追加
23. オシロスコープで観察できるように、デジタル出力ピンを
「clock」端末に接続します。それを P0_0_clk と名付け、
他のすべての設定をデフォルト値のままにします。
注: PSoC 4 では、クロックをピンに直接接続することはできま
せん。クロックをピンへルーティングするために、以下の手順を
行います。
20. File > Save All を選択して、すべての変更がプロジェクト
に適用されたことを確実にします。
www.cypress.com
a.
デジタル出力ピン コンポーネントを回路図に配置し
ます。
b.
ピン カスタマイザーで、Clocking タブを選択します。
c.
Out Clock: を External に設定します。
d.
Pins タブに戻って、Output サブタブに移動します。
e.
Output Mode: で、Clock を選択します。
f.
OK をクリックします。
g.
クロック信号をピン コンポーネントの out_clk 端末に
接続します。
24. デジタル出力ピン コンポーネントを「TC」端末に接続しま
す。それを P0_1_tc と名付け、他のすべての設定をデフ
ォルト値のままにします。カウントが 0 になると、このピン
は HIGH になります。
文書番号: 001-89531 Rev. *A
13
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
図 29 に完全なプロジェクトの回路図を示します。
カウンターから PWM への変更
図 29. 簡単なカウンター プロジェクトの回路図
PWM は単に比較機能を備えたカウンターです。PWM を作成
するには、A0 の値を他の固定値と比較する方法が必要です。
比較対象の固定値を D1 レジスタに格納し、A0 が D1 未満で
あるかどうかを確認するように比較ブロックを設定することが
できます。
図 31 に示すように、強調表示されたブロック図を用いてそれ
を視覚化することができます。
図 31.簡単な PWM の強調表示されたブロック図
25. cydwr の Pins タブで、ピンの名前に応じてピンを P0[0]と
P0[1]に割り当てます。
INSTR_
ADDR[2:0]
CFGRAM
これで、プロジェクトのビルドおよび PSoC のプログラミングの
準備ができました。P0[0]と P0[1]でクロックとターミナル カウン
トを確認することができます。
F0
F1
26. プロジェクトを保存してビルドし、PSoC をプログラムしま
す。
図 30 に示すように、オシロスコープを出力ピンに接続すれば、
「clock」と「tc」出力を観察できます。
D0
D1
(Reload Value)
(Compare)
図 30.簡単なカウンターの出力
A0
(Count Value)
A1
A0, A1
A0, A1,
D0, D1
tc
PI
PO
PI
ALU
(Decrement A0)
clk
z0
z1
ZDET
CMP0
ce1
FFDET
A0 に開始値 15 をロードしたため、周期が 16 (15 から 0 まで
カウント) クロックサイクル幅です。A0 が 0 に達する時、A0 が
D0 の値でリロードされるため、「TC」ピンは 1 クロック サイク
ルだけの HIGH パルスを発します。A0 が 0 ではなくなる時、
「TC」が LOW にセットされ、コンフィギュレーションは再び A0
のデクリメントに戻ります。
これで、ファームウェアを書くことが全く必要なく初めてのデー
タパス ベースのコンポーネントの設計を完了しました。
www.cypress.com
cl1
CMP1
INSTR_ADDR ==000 (Decrment A0)
INSTR_ADDR == 001 (Reload A0)
z0 = INSTR_ADDR lsb
cl1 = Compare A0 < D1
この例は、前の節で作成した 8 ビット カウンター コンポーネン
トを変更します。空のコンポーネントで、または以前のカウンタ
ー コンポーネントのコピーを作成することで開始することがで
きますが、以下の手順は既存のカウンターを変更することを前
提とします。
1.
SimpleCntr8_v1_0 用のコンポーネント シンボル
(.cysym) ファイルを開きます。
2.
「O」を押して、デジタル出力端末を追加します。それを
「cmp」と名付け、図 32 に示すように配置します。
文書番号: 001-89531 Rev. *A
14
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
図 32.「cmp」端末付きのコンポーネント シンボル
6.
図 35 に示すように、出力ボックスをダブルクリックして
Output 1: を Config A: A0 <D1… に 、 Name を
「Compare」に設定します。
図 35. 比較出力の設定
3.
File > Save All をクリックして変更を保存します。
4.
UDB ドキュメント (.cyudb) に戻ってデータパスをクリック
します。Datapath properties ウィンドウで、図 33 に示
すように Configurable comparator inputs の Config
A が A0 compare to D1 に設定されたことを確認します。
図 33: データパス比較コンフィギュレーション
7.
図 36 に示すように、「cmp」と名付けられた新しいコン
ポーネント出力を定義し、Expression を Compare に設
定します。
図 36.比較出力
5.
図 34 に示すように命令 0 と命令 1 両方で、Compare
Option 1 が ConfigA: A0 compare to D1 に設定された
ことを確認します。このダイアログを開くために、適切な緑
色のボックスをダブルクリックします。
図 34. 比較オプションの設定
最後に、比較レジスタ (D1) の初期値を設定します。
8.
www.cypress.com
Configure Datapath Registers ダイアログを開きます。
図 37 に示すように D1 の初期値を 7 に設定します。
文書番号: 001-89531 Rev. *A
15
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
図 37. D1 の初期値
図 39. 簡単な PWM の出力
cmp
clk
9.
File > Save All を選択します。
このコンフィギュレーションでは、比較ブロックの出力は A0 が
D1 より小さい時に HIGH になり、A0 が D1 より大きい時に
LOW になります。
PWM コンポーネントおよびシンボルは Component Catalog
の AN82156 タブにまだ表示されています。コンポーネントは
プロジェクト回路図で自動的に更新されます。
10. 出力ピンを追加し、「cmp」端末に接続します。図 38 に示
すように、それを P0_2_cmp と名付け、P0[2]ピンに割り
当てます。
図 38.簡単な PWM プロジェクトの回路図
A0 に開始値 15 をロードしたため、周期が 16 クロック サイク
ル幅となります。D1 を 7 に設定したため、A0 が 7 より小さくな
ると「cmp」ピンが HIGH になります。D1 の比較値を変更して
PWM をテストすることができます。
パラメーターの追加
コンポーネントのパラメーターのいずれかを変更するたびに
Verilog コードを変更することは不便です。さらに、もし異なる
周期および比較値を持つ 2 個の PWM を必要としたらどうなる
でしょうか。ほとんどのサイプレスのコンポーネントと同様に、
ユーザー設定可能なパラメーターをコンポーネントに追加する
ことができます。
1.
コンポーネントのシンボル エディター ページ (.cysym) を
開き、空白領域を右クリックします。
2.
ドロップダウン メニューから Symbol Parameters を選
択します。
3.
既存のパラメーターの下の空の行に新しいパラメーターを
入力します。
これで、プロジェクトのビルドおよび PSoC のプログラミングの
準備ができました。クロックおよびターミナル カウントは P0[0]
と P0[1]ピンで確認することができます。PWM 出力は P0[2]で
確認できます。



Name = Compare_Value
Type = uint8
Value = 8
図 40 に示すように、ウィンドウの右側にある Misc 設定
で「Hardware」フラグを「True」にセットします。
11. プロジェクトを保存してビルドし、PSoC をプログラムしま
す。
4.
オシロスコープを出力ピンに接続すれば、「clock」、「tc」および
「cmp」出力を観察することができます。図 39 は「clk」と「cmp」
信号を示します。
これは、UDB ハードウェアがパラメーターを使用できるように
パラメーターを Verilog コードに変換します。
www.cypress.com
文書番号: 001-89531 Rev. *A
16
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
図 40. コンポーネント パラメーターの追加
5.
図 42. パラメーターの初期値
作成した比較値の定義の下の行に他の新しいパラメータ
ーを入力します。



6.
Name = Counter_Period
Type = uint8
Value = 15
図 41 に示すように、ウィンドウの右側にある Misc 設定
で「Hardware」フラグを「True」にセットします。
図 41. 他のコンポーネント パラメーターの追加
このコードは A0、D0 および D1 の初期値をコンポーネント パ
ラメーターにリンクさせます。
これで、周期値と比較値は UDB エディターで変更せずにビル
ド時に設定することができます。
10. File > Save All を選択します。
プロジェクト回路図に戻って、SimpleCntr8_1 コンポーネントを
ダブルクリックしてプロパティー ダイアログを開きます。
11. 図 43 に示すように比較値を 3 に、カウンター周期を 10
に変更します。
図 43. コンポーネント パラメーターの設定
7.
OK をクリックして File > Save All を選択することで、コン
ポーネントに変更を適用します。
コンポーネント シンボルのパラメーターをデータパスの初期値
にリンクさせます。
8.
UDB エ デ ィ タ ー (.cyudb) に 移 動 し て Configure
Datapath Register ダイアログを開きます。
9.
A0 と D0 では、Initial value: を「`=$Counter_Period`」
に設定します。単一引用符「‘」ではなく、アクセント符号「`」
を使うことに注意してください。図 42 に示すように D1 で
は、Initial value: を「`=$Compare_Value`」に設定します。
www.cypress.com
12. OK をクリックして変更を適用します。
13. File > Save All を選択して、プロジェクトをビルドし、
PSoC をプログラムします。
図 44 に示すように、周期と比較出力が変更されます。
文書番号: 001-89531 Rev. *A
17
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
図 44. パラメーターの変更された PWM 出力
3.
図 45 に示すように Item name を SimpleCntr8.h に変更
します。
図 45. ヘッダー ファイルの追加
cmp
clk
周期を 11 サイクルに設定し (カウンターがリロードの前に 0~
10 に進むため、周期は 10+1)、比較値を 3 に設定しました。
結果は、8 クロック サイクルの LOW 出力および 3 クロック サ
イクルの HIGH 出力となります。
4.
Create New をクリックします。これにより、ヘッダー ファ
イルがコンポーネントに追加されます。
比較値 (D1) と周期値 (D0) の定義を加えます。
パラメーターの値が uint8 である限り、ほとんど何の値にも変
更することができます。また、複数のコンポーネントのインスタ
ンスをプロジェクトに配置し、それらを異なる値に設定すること
もできます。
5.
入力値制限の設定を含むコンポーネント パラメーターを追加
する詳細については、「Component Author Guide」を参照し
てください。
#define `$INSTANCE_NAME`_Period_Reg
`$INSTANCE_NAME`_cntr8_D0_REG
ヘッダー ファイルの追加
PWM の動作を設計時に変更することだけでなく、C コードによ
り PWM のレジスタを変更することで実行時に PWM を変更す
ることもできます。例えば、レジスタ D0 に周期値を格納し、レ
ジスタ D1 に比較値を格納しました。これらのレジスタに容易
にアクセスできるように、使用されるレジスタを定義するヘッダー
ファイルを作成します。
1.
Components タブで、SimpleCntr8_v1_0 を右クリック
して Add Component Item を選択します。
2.
Add Component Item ウィンドウで、API セクションに移
動して API Header File をクリックします。
www.cypress.com
ヘッダー ファイルで//[]END OF FILE の上に以下の
定義を加えます。
#include "`$INSTANCE_NAME`_defs.h"
#define `$INSTANCE_NAME`_Compare_Reg
`$INSTANCE_NAME`_cntr8_D1_REG
これらの 2 つの定義により、ファームウェア内で D0 と D1 レジ
スタに直接書き込むことができます。
INSTANCE_NAME`_defs.h ファイルはデータパス内のレジス
タの定義一式を含んでいます。
INSTANCE_NAME`_defs.h は図 46 に示すように、ソース タ
ブの生成されたソース フォルダーにあります。
文書番号: 001-89531 Rev. *A
18
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
図 46.defs.h ファイル
図 48 に示すように、各データパス内の ALU はキャリー、シフ
ト データおよび条件付き信号を最も近い ALU にチェーン接続す
るように設計されています。すべての条件付き信号とキャプチ
ャ信号は、最下位バイトから最上位バイトへの方向でチェーン接
続されます。左シフト信号も最下位バイトから最上位バイトへ
の方向でチェーン接続されます。右シフト信号は最上位バイト
から最下位バイトへの方向でチェーン接続されます。
図 48. データパスのチェーン接続フロー
実行時に比較値を更新するために、作成したばかりの定義に
書き込みます。コンポーネントがSimpleCntr8_1と名付けられ
た場合、Cコードは以下の通りです。
UDB エディターはデータパスをチェーン接続すること容易にし
ます。作成した PWM を使用してそれを 16 ビット幅にします。
SimpleCntr8_1_Period_Reg = 0x08;
1.
UDB ドキュメント (.cyudb) に移動します。
SimpleCntr8_1_Compare_Reg = 0x02;
2.
図 49 に示すように Datapath properties パネルで、
Width (bits) を 16 に設定します。
これにより、周期値が0x08に、比較値が0x02に更新されます。
これらの定義の使用方法については、「Component Author
Guide」を参照してください。上記のCコードに示したレジスタへ
直接書き込む方法は8ビット レジスタにのみ適用できます。16
ビット以上のレジスタに対しては、次のプロジェクトで説明する
他の方法を使用しなければなりません。
図 49. 16 ビット コンフィギュレーション
16 ビットへの PWM の拡張
データパス チェーニングについて説明します。データパスは隣
接のデータパスに接続される専用信号を持っています。これら
の信号により、1~32 ビット幅の機能を作成することができま
す。この例では図 47 に示すように、最初のサンプル プロジェ
クトと同様な PWM を作成しますが、16 ビット幅です。
図 47. チェーン接続された UDB による 16 ビット機能
www.cypress.com
文書番号: 001-89531 Rev. *A
19
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
3.
図50に示すように周期値 (D0) と初期周期値 (A0) を512
に、比較値 (D1) を256に設定します。
PSoC3 における 16 ビット コンポーネントのヘッダー
ファイル
前述したように、16 ビット レジスタへの書き込みは、8 ビット レ
ジスタへの書き込みと違います。プロセッサとデータパス レジ
スタの間のエンディアンの相違を気にしなくてもかまわないた
め、8 ビット レジスタへ直接書き込むことができます。しかし、
16 ビット以上のレジスタに書き込む際、エンディアンの相違を
考慮しなければなりません。
図 50. 16 ビット初期値
PSoC 3 の 8051 のエンディアン性は、ペリフェラル レジスタの
ものとは異なります。レジスタへの書き込みを簡単にするため
に、サイプレスは CY_SET_REG16、CY_SET_REG24 およ
び CY_SET_REG32 のマクロを提供しています。これらのマ
クロは、最初のパラメーターに、設定したいレジスタ アドレス、
2 番目のパラメーターに、設定したい値を受けます。これらの
マクロはエンディアン スワッピングを処理します。
4.
プロジェクト ウィンドウでFile > Save Allを選択します。
5.
トップ デザイン回路図 (.cysch) に戻って、クロックを
10kHzに1MHzに変更します (オシロスコープで表示しや
すくするため)。
6.
File > Save All を選択して、プロジェクトをビルドし、
PSoC をプログラムします。
図 51 に示すように、周期値と比較値が作成した 8 ビット
PWM よりはるかに大きいことを出力で確認できます。それら
をいかなる 16 ビット値にも設定することができます。
図 51. 簡単な 16 ビット PWM の出力
そのため、データパス レジスタのアドレスを知る必要がありま
す。これは、自動生成されたヘッダー ファイル (_defs.h) 内の
_PTR で終わる定義により自動的に行われます。
値を更新するために、CY_SET_REG16 およびヘッダー ファ
イルからのポインターを使用します。本アプリケーション ノート
に同梱されたサンプル プロジェクトを再度ご覧ください。
16 ビット パラメーター
前述した例では、シンボル パラメーターのタイプを uint8 に設
定しましたが、16 ビットの PWM のパラメーターを追加すること
もできます。単にタイプを uint16 に変更するだけです。
プロジェクト#2 – アップ/ダウン カウンター
この例の目的は、高度な機能をデータパス コンポーネントに
追加する手順を説明することです。同じ基本的な PWM 概念
は、カウントアップ/カウントダウンの機能を追加するよう更新
されます。カウント方向は、実行時に設定できるパラメーターに
基づいています。
cmp
この例は、ユーザーが前述のサンプル プロジェクトで紹介され
た概念に精通していることを前提とします。本アプリケーション
ノートには、1 つの完成したアップ/ダウン PWM プロジェクト
が同梱されています。
clk
チェーン接続を使用して 32 ビット幅までの機能を作成すること
ができます。この例で説明する原理はより大きいビット幅の機
能に適用できます。
www.cypress.com
文書番号: 001-89531 Rev. *A
20
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
追加詳細
3.
簡単なダウンカウント PWM は 2 つの状態を使用しました。
図 52 に示すようにアップ/ダウン カウンターを実装するため
に、4 つの状態が必要です。
UDB ド キ ュ メ ン ト を 選 択 し 、 Component name: を
UpDwnCntrPwm_v1_0 に変更します。Create New をク
リックします。
図 53. 新しいコンポーネントの作成
図 52. アップ/ダウン カウンターの状態図
Count Dwn
Count Up
Count < X
Count != 0
REG 000
Decrement
Count
REG 010
Increment
Count
Count >= X
Count == 0
Count < X
Count != 0
REG 001
Reload
Count
Count == 0
REG 011
Clear
Count
Count >= X
データパスは、セットしたパラメーターによって A0 をデクリメン
トするか、またはインクリメントします。周期値と比較値もセット
できます。
サンプル プロジェクトの手順
混乱を避けるために、以前のサンプル プロジェクトのコンポー
ネントを変更する代わりに、新しいコンポーネントを作成しま
す。コンポーネント作成の基本手順は同じです。
1.
2.
PSoC Creator を起動し、簡単な 8 ビット例で使用した
「AN82156」ワークスペースを開きます。
「UpDwnCntrPwm」という新しいプロジェクトをワークス
ペースに追加します。
Components タブで、Project ‘UpDwnCntrPwm’ を右
クリックして Add Component Item を選択します。
4.
データパス要素をデザイン キャンバスにドラッグします。
5.
Datapath properties に移動し、Name を「UpDwn」に
変更します。
図 52 に示す機能を実装するようにデータパスをコンフィギュレ
ーションして機能を実装します。最初の 2 つの命令は簡単な 8
ビット PWM と同じで、もう 2 つの命令が追加されます。表 3 に
示すように 2 つの追加の命令はアップ/カウント機能を実装し
ます。
表 3. アップ/ダウン カウンターの命令表
INSTR_ADDR
関数
レジスタ書き込み
コメント
000
ALU = A0 - 1
A0 = ALUout
デクリメント
カウント
001
No-op
A0 = D0
リロード
カウント
010
ALU = A0 + 1
A0 = ALUout
インクリメント
カウント
011
ALU = A0 ^ A0
A0 = ALUout
クリア
カウント
XOR コンフィギュレーションはカウント (A0) レジスタをクリアす
るために使用されます。カウント (A0) レジスタは周期値に達し
た後、自身を XOR します。すると、カウントが 0 にクリアされま
す。
www.cypress.com
文書番号: 001-89531 Rev. *A
21
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
各命令は表 3 に示すように設定する必要があります。図 54
は各命令がデータパス要素にどのように表示されるかを示し
ます。
9.
図 56 に示すように制御レジスタ (CR) を回路図にドラッグ
します。
図 56. 制御レジスタ
図 54. UpDwnCntr の命令
6.
Datapath properties パネルで、Configurable
comparator inputs の Config A が「A0 compare to
D1」に設定されたことを確認します。
7.
Compare options の各命令が「ConfigA: A0 compares
to D1」に設定されたことを確認します。
8.
最初の例と同じように Zero_Detect と比較出力を設定し、
また 3 番目の出力 (Period) を追加します。3 番目の出力
はカウンターが周期レジスタ (D0) の値に達すると HIGH
になります。これは、アップカウンターが周期値に達してリ
セットの必要があることを示します。図 55 を参照してくだ
さい。
10. 制御レジスタをダブルクリックします。ビット 0 の Name を
Up_Down に設定します。図 57 に示すように制御レジス
タ名を CtrlReg に変更します。
制御レジスタは CPU によって書き込まれます。そのため、
CPU はこの制御レジスタのビットに書き込むことでカウント方
向を制御します。値 1 はアップ カウントを示し、値 0 はダウン
カウントを示します。
図 57.制御レジスタのコンフィギュレーション
図 55. UpDwnCntr の出力
www.cypress.com
文書番号: 001-89531 Rev. *A
22
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
最初の例では、データパス命令が2つあるため、Zero_Detect
信号を使用してCFGRAMから実行される命令を容易に選択で
きました。この例では、命令が4つあります: ダウン カウント用
の2つおよびアップ カウント用の2つ。
Zero_Detectをダウン カウントに依然として使用できます。アッ
プ カウントにはPeriod信号を使用します。カウントアップしてい
るかカウントダウンしているかを判定するための信号もありま
す (Up_Dwn)。4つの命令があるため、2つのアドレス ビットが
必 要 で す 。 し か し 、 表 4 に 示 す よ う に Up_Dwn 、 Period 、
Zero_Dectectの3本の信号があります。したがって、これらの3
本の信号を2本のアドレス ラインに減らすためにロジックを使
用する必要があります。
表 4.UpDwnPWM 命令の復号化
Zero_Detect INSTR_ADDR
機能
Up_Dwn
Period
Down
該当なし
0
000
デクリメント
Down
該当なし
1
001
リロード
Up
0
該当なし
010
インクリメン
ト
Up
1
該当なし
011
クリア
表4に示すように、Up_Dwn信号に常に接続するアドレス ビッ
トが1つあります。その他のアドレス ビットはPeriodと
Zero_Detect間で多重化されます。Up_Dwn信号が「Down」
にセットされた場合、アドレス ビットにZero_Detectの値を使用
し、Up_Dwnが「Up」にセットされた場合、Periodの値を使用し
ます。
INSTR_ADDR[0] = if(up) Period else if(down) Zero_Detect
INSTR_ADDR[1] = Up_Dwn
UDBエディターでは、様々なフィールドに標準Verilog構文を入
力することができます。また、ロジックで制御できる変数を作成
することもできます。この例では、INSTR_ADDR[0]にPeriod
かZero_Detectを使用するかを決定するための変数を作成し
ます。
Reload = ( Up_Dwn ) ? ( Period ) : ( Zero_Detect ) 式は三項演算
子です。 これは、簡単な if-else 文を書くよりコンパクトな方法
です。
形式は以下の通りです。
A = B ? C: D。B が真 (HIGH) であれば、A = C とな
り、B が偽 (LOW) であれば、A = D となります。
この例では、Up_Dwn が HIGH であれば、Reload = Period
となります。Up_Dwn が LOW であれば、Reload =
Zero_Detect となります。
リロードはデータパス命令を選択するために使用されます。
13. デ ー タ パ ス 入 力 に 移 動 し て 、 図 59 に 示 す よ う に
INSTR_ADDR[0] を 「 Reload 」 に 、 INSTR_ADDR[1] を
「Up_Dwn」に設定します。
図 59.命令のアドレス指定
次に、PWM 出力を設定します。前述したように、ターミナル カ
ウント (TC) および比較 (cmp) 出力があります。 cmp は
Compare 信号の出力です。TC 信号は新しい Reload 変数で
す。
14. 図 60 に示すように出力を設定します。
図 60.出力
11. Variables の Properties ウィンドウで、Reload と名付け
た変数を追加し、式を以下のように設定します。
( Up_Dwn ) ? ( Period ) : ( Zero_Detect )
12. 図 58 に示すようにこの変数が Combinatorial にセットさ
れたことを確認します。
15. .cyudb ファイル内の空白領域を右クリックして Generate
Symbol を選択します。
図 58.変数の定義
16. シンボル回路図ページ (.cysym) を右クリックして以下の
ようにシンボル プロパティーを追加します。
注: 「Combinatorial」設定は「Registered」にリセットされること
があります。そのため、プロジェクトのビルド前に変数が
「Combinatorial」にセットされたことを確認する必要があります。
この問題は PSoC Creator の次回のリリースで修正されます。
www.cypress.com



Doc.APIPrefix = UpDwnCntrPwm
Doc.CatalogPlacement =
AN82156/Digital/UpDwnCntrPwm
Doc.DefaultInstanceName =
UpDwnCntrPwm
文書番号: 001-89531 Rev. *A
23
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
カウンター周期、比較値、カウント モード (アップ/ダウン) な
どいくつかの変更可能なパラメーターを追加します。 カウント
モードの設定のために、新しいパラメーター タイプおよび値一
式を定義します。
23. 図 62 に示すように、すべての 3 つの新しいパラメーター
に対して Hardware フラグを「True」にセットします。
図 62. 新しいコンポーネント パラメーターの追加
17. シンボル エディター ページを右クリックして Symbol
Parameters ダイアログを開きます。
18. Types をクリックしてウィンドウを開き、新しいパラメーター
タイプを作成します。
19. 緑色の「+」ボタンをクリックして新しいタイプを追加します。
それを UpDwnCntrPwm_UpDwn を名付けます。
20. 図 61 に示すように Enum Set フィールドに値を入力して
「CountDwn」と「CountUp」を定義します。
図 61.新しいコンポーネント パラメーター タイプの作成
24. OK をクリックしてコンポーネントへの変更を保存します。
25. .cyudb ファイルに戻って、前の例と同じようにレジスタの
初期値を変更します。図 63 を参照してください。
図 63.パラメーターおよび初期値
21. OK をクリックして Symbol Parameters ダイアログに戻り
ます。
この新しいタイプにパラメーターを割り当て、0 (CountDwn) ま
たは 1 (CountUp) の初期値をセットすることができます。
22. 前の例と同じようにコンポーネントの 3 つの新しいパラメ
ーターを追加します。表 5 を参照してください。
これでは、ハードウェアで制御レジスタの値をセットすることは
できません。そのため、ファームウェアで設定を行います。
表 5. アップ/ダウン カウンターのパラメーター
パラメーター名
タイプ
値
Compare_Value
uint8
4
Count_Mode
UpDwnCntrPWM_UpDwn
Count Down
Counter_Period
uint8
9
Count_Mode パラメーターは新しいタイプと値の定義を使用し
ます。
26. ヘッダー ファイルを作成します。Components タブで、
UpDwnCntrPwm_v1_0 を右クリックして Add
Component Item を選択します。API Header File を選
択してそれを UpDwnCntrPwm.h と名付けます。Create
New をクリックします。
27. ヘッダー ファイルで、以下のコード行を /* [] END
OF FILE */: の上に加えます。
#define UP_DOWN
`$Count_Mode`
これで、UP_DOWN 定義はコンポーネント カスタマイザー
でセットした Count_Mode パラメーターにリンクさせられ
ます。
www.cypress.com
文書番号: 001-89531 Rev. *A
24
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
インクルードされた制御レジスタを使用してカウンターの方向を
main.c ファイルで設定します。すべての標準 API は使用可能
であることに注意してください。
図 65. ダウン カウント PWM の波形
28. main.c ファイルで、以下のコード行を加えます。
UpDwnCntrPwm_1_CtrlReg_Write(UP_DOWN);
コンポーネントを「UpDwnCntrPwm_1」と名付けなかった場合、
コンポーネント名で置き換える必要があります。制御レジスタ
を「CtrlReg」と名付けなかった場合、制御レジスタ名で置き換
えてください。ステップ 28 に示すように.cyudb ファイルに制御
レジスタを配置することで、標準制御レジスタの API へ直接ア
クセスことができるようになります。
これで、コンポーネントは使用可能になりました。
最初のサンプル プロジェクトと同じすべてのコンポーネントを
追加します。
29. UpDwnCntrPwm コンポーネントをプロジェクト回路図にド
ラッグします。
30. クロック コンポーネントをコンポーネントの「clock」端末に
接続して 10kHz に設定します。
31. 図 64 に示すようにデジタル出力ピン コンポーネントを
コンポーネントの P0_0_clk、P0_1_tc、P0_2_cmp 端末
に接続します。
簡単な PWM の例で行ったように、周期値と比較値を変更す
ることができます。PWM がカウントダウンする代わりにカウン
トアップするようにモード パラメーターを変更することも可能です。
34. プロジェクト回路図に戻り、UpDwnCntrPwm コンポーネン
トをダブルクリックしてプロパティー ダイアログを開きます。
35. 図 66 に示すように Count_Mode を「Count Up」に変更
します。
図 66. アップ カウントへの PWM の設定
図 64.アップ/ダウン カウンターPWM プロジェクトの回路図
32. File > Save All を選択します。
33. プロジェクトをビルドし、PSoC をプログラムします。
比較値パラメーターを 4 に、周期値を 9 に、Count_Mode を
Count_down に設定します。オシロスコープで clk、cmp およ
び TC 波形を観察します。図 65 に示すように、TC が HIGH
になった後、カウントがリロードする時に cmp ラインは LOW
になるため、ダウン カウントを確認できます。
36. OK をクリックして変更を適用します。
37. File > Save All を選択して、プロジェクトをビルドし、
PSoC をプログラムします。
図 67 に示すように、TC の後にカウンターが 0 でリロードされ
る時 cmp 値が HIGH になるため、アップ カウンターを確認で
きます。
www.cypress.com
文書番号: 001-89531 Rev. *A
25
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
図 67. アップ カウント PWM の波形
このシフターはビットを左か右にシフトできます。データパスの各
命令は個別にシフターの動作を設定できます。このオプションは
図 69 に示すように、各命令の Configure Instruction ダイア
ログでセットされます。
図 69. シフト動作の設定
TC の後に出力が HIGH になる理由は、カウントの開始値が
比較値より小さく、その後インクリメントされたためであることに
注意してください。Down モードの始まりに出力が LOW になる
理由は、カウントの開始値が比較値より大きく、その後デクリメン
トされたためです。
プロジェクト#3 – 簡単な UART
Config A と Config B コンフィギュレーションを設定するために、
Datapath properties に移動して、図 70 に示すように Shift
configuration A と Shift configuration B を設定します。
図 70. データパス シフト コンフィギュレーション
このサンプル プロジェクトは、簡単な TX UART を単一のデー
タパスで作成することをデモします。ここでは、コンポーネント
の作成の各ステップについて説明しません。その代わりに、関
連したプロジェクト内でコンポーネントと UDB エディター ドキュ
メントを読むことができます。完成した例の中の Simple_Tx プ
ロジェクト内の「Simple_Tx」というコンポーネントを探します。
このコンポーネントの使用方法を示す例は同じワークスペース
内の「SimpleTx」プロジェクトに含まれています。
T X U AR T コ ン ポ ー ネ ン ト の 詳 細
このコンポーネントでのデータパスの使用方法は、値を F0 か
らシフトして A0 にロードする動作を使用します。
図 68 に示すように、ALU の出力に 1 個のシフターがあります。
図 68. シフター ブロック
シフトイン ソースは DSI からのシフトイン (SI) 信号であるか、
または初期設定のシフトイン値 (0、1) です。
データパス出力マルチプレクサには 1 本のみのシフトアウト
(SO) 出力があります。この出力は、右シフトアウトと左シフトア
ウ ト の 間 で 共 有 さ れ ま す。 図 70 に 示 す Shift common
configuration の Shift Out でこのマルチプレクサを設定する
必要があります。
この例では、データパスの命令を制御するステートマシンを作
成します。このステートマシンは UDB PLD に実装され、
UART 送信のどの部分 (IDLE、Start、Data、あるいは Stop)
を次に行うかを決めます。
www.cypress.com
文書番号: 001-89531 Rev. *A
26
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
ステートマシンは、データパスの動作を制御するために使用さ
れる状態を4つだけ持っています。そのため、データパスは4種
の個別の動作を必要とします。
コードはステートマシンを移動するにしたがって、データパス命
令を変更します。これは一般的な使用例です。
ほとんどの複雑なコンポーネントは、データパスの動作に順序
付けるためにステートマシンを必要とします。図 71 は簡単な
TX のステートマシンの動作方法を示します。
表 6. 3 つのデータパス命令の例
状態
INSTR_ADDR
機能
SHIFT
レジスタ
書き込み
IDLE_STOP
000
No-op
なし
なし
STOP
001
No-op
なし
なし
TX_START
010
No-op
なし
A0 = F0
TX_DATA
011
No-op
SR
A0 = ALU
図 71. TX UART ステートマシンのフロー図
!Enable || fifoEmpty
DP: INSTR 000: IDLE
TX Pin: High
000
IDLE_STOP
Enable && !fifoEmpty
DP: INSTR 010: LOAD A0 from F0
TX Pin: Low
DP: INSTR 001: IDLE
TX Pin: High
001
STOP
bitCnt==7 &&
TWO_STOP_BITS
bitCnt == 7 &&
!TWO_STOP_BITS
010
TX_START
011
TX_DATA
DP: INSTR 011: Shift A0
TX Pin: Shifter
bitCnt ! = 7
最初に、ステートマシンは fifoEmpty ステータス ビットを監視
することで、新しいデータが FIFO に書き込まれるのを待ちま
す。FIFO にデータが書き込まれると、ステートマシンは Start
状態に進み、TX ラインを LOW にセットすることで START
ビットを送信します。この状態では、データパスは FIFO (F0)
内の値を A0 にロードします。
UDB エディターでは、図 71 のようなステートマシンを作成する
ことが可能です。このためには、図 72 に示すようにステートマ
シンの要素をデザイン キャンバスにドラッグ & ドロップします。
図 72. ステートマシンの要素
次の状態で、データパスは A0 内のデータを LSB ファースト方
式 (右シフト) で TX ピンにシフトアウトします。次に、ステートマ
シンは 1 個か 2 個の STOP ビットを送信します。
www.cypress.com
文書番号: 001-89531 Rev. *A
27
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
これらの 4 つの要素をデザイン キャンバスにドラッグして、図
71 に示すように接続します。状態を接続するために線を描くた
びに、遷移が行われるタイミングを決める式を書くためのダイ
アログが表示されます。図 73 を参照してください。
図 74. データパスの出力
図 73. 状態遷移の式
各状態中に、変数を追加してそれらに対しロジックや算術関数
を実行することができます。例えば、簡単な UART は 8 データ
ビットをシフトアウトします。つまり、データパスは Data (シフト)
状態を 8 クロック サイクル維持する必要があります。
図 73 に 示 し た 遷 移 は 、 イ ネ ー ブ ル 信 号 が HIGH 、 か つ
fifoEmpty 信号が HIGH でない時に行われます。これは、ステ
ートマシンが IDLE 状態から Start 状態に進むタイミングを制
御する遷移です。遷移が行われるには、制御レジスタからのイ
ネーブル信号は HIGH、かつデータパスの FIFO が空でない
ことが必要です。図 74 に示すように fifoEmpty 信号はデータ
パスのいずれかの出力から来ます。この信号は、FIFO にデー
タがない時に HIGH になり、FIFO にデータがある時に LOW
になります。
www.cypress.com
表 6 に示すように INSTR_ADDR が 011b になるとシフトが行
われます。図 75 は第 3 状態 (011b) のコンフィギュレーション
を示します。図 75 に示すように、Variable assignment の中
で、bitCnt 変数は bitCnt +1 という式を持っていることに注意し
てください。つまり、状態が行われるたびに、bitCnt = bitCnt+1
となります。
ステートマシンの状態は、データパスが実行されるクロックであ
る入力クロックのポジティブ エッジで行われます。
文書番号: 001-89531 Rev. *A
28
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
図 75. 状態のコンフィギュレーション
図 75 は、状態遷移を設定するための Outbound transition
priority order ダイアログを示します。bitCnt が 7 に等しくな
い限り、ステートマシンは Data 状態を維持することに注意して
ください。前述したように、8 ビットをシフトアウトする必要があり
ますが、この状態を 7 サイクル維持する理由は何でしょうか。
実際には、この状態を 8 サイクル維持します。遷移は bitCnt
が増える前に評価されました。この式が初めて評価される時、
bitCnt は 0 です。
www.cypress.com
図 71 に一致するように、状態が遷移するたびに同じステップ
が行われます。図 76 は、UDB エディターが複製した図 71 を
示します。
文書番号: 001-89531 Rev. *A
29
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
図 76. UDB エディターのステートマシン図
次に、ステートマシンによりデータパス命令を制御します。図
76 に示すようにステートマシンは TXState と名付けられてい
ます。このステートマシンには 4 つの状態があるため、UDB エ
ディターは TxState のために 2 ビット信号を作成します。この
2 ビット信号はデータパスの INSTR_ADDR 信号に接続する
ことができます。図 77 を参照してください。
図 78. Tx 出力の式
図 77. ステートマシンで制御されるデータパス入力
ステートマシンは Data 状態にない場合、「TxState」の最上位
ビットの反転を TX ラインに駆動します。Start 状態では、最上
位ビットが 1 であるため、「0」を出力します。Stop および IDLE
状態では、最上位ビットが 0 であるため、「1」を出力します。
Data 状態では、SO (シフトアウト) 信号を出力します。
このデザインに追加された唯一の要素は、ステータス レジスタ
です。スタータス レジスタの目的は、ステートマシンおよびデー
タパスの状態を CPU に通知することです。
次に、TX 出力ラインの制御方法を説明します。前述したように、
Data 状態中にデータがシフトアウトされます。Start 状態では
TX ラインを LOW にセットし、Stop および IDLE 状態では TX
ラインを HIGH にセットします。これは、図 78 に示す出力の式
で行います。
www.cypress.com
文書番号: 001-89531 Rev. *A
30
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
図 79. ステータス レジスタのコンフィギュレーション
このステータス レジスタのビット 1 は UART がビジーであるタ
イミングを CPU に通知します。ステートマシンは、UART がデ
ータ送信を完了するまでこの状態にあります。ビット 2 は FIFO
が満杯でない状態にあるかを通知します。この信号は、FIFO
が満杯になるまでデータを FIFO にロードするために CPU に
よって使用されます。
このコンポーネントにはヘッダー ファイルが追加されています。
ヘッダー ファイルは、コンポーネントを有効にして 1 ストップ
ビット モードまたは 2 ストップ ビット モードに設定すること、お
よびステータス レジスタの定義のためにいくつかの定数を定
義します。ヘッダー ファイルでは、定義がステータス レジスタと
制御レジスタで選択されたビット位置に一致することに注意を
払う必要があります。
このプロジェクトの main コードは 2 ストップ ビットでコンポーネ
ントを有効にしてから、値 0~10 を連続して送信します。これ
は 9600 ボーで行います。レシーバーを 9600 ボーおよび 2 ス
トップ ビットにコンフィギュレーションします。
ブリッジ コントロール パネル (BCP) というプログラムが
PSoC Creator のインストールに含まれています。BCP を使用
して RX キャラクタを受信することができます。BCP では、TX
出 力 が 接 続 す る COM ポ ー ト に 接 続 し ま す 。 Tools >
Protocol Configuration では、図 80 のように RX8 (UART)
をコンフィギュレーションします。
図 80. BCP RX8 のコンフィギュレーション
BCP のエディターでは、次のテキストを加えます: rx8 x x x x x
x x x x x x。これは、選択した COM ポートから 11 バイトを読
み出します。引き続きデータを受信するために「Repeat」ボタン
を押すことができます。
UDB エディターからデータパス コンフィギュ
レーション ツールへの移植
望ましい機能を UDB エディターで実装することが不可能であ
る場合があります。この場合、Verilog ファイルおよびデータパ
ス コンフィギュレーション ツールに移植するほかありません。
この手順はかなり簡単です。付録 A に述べる Verilog ファイル
の作成手順に従って、UDB エディターで生成された Verilog コ
ードを作成したばかりの Verilog ファイルにコピー & ペーストし
ます。これで、データパス コンフィギュレーション ツールを用い
て Verilog ファイルを自由に変更することができます。コンポー
ネントの作成およびデータパス コンフィギュレーション ツール
の使用例は、付録 A を参照してください。
まとめ
UDB データパスを使用すると、PSoC のプログラム可能なロ
ジックでコンポーネント作成に柔軟性が増します。UDB データ
パスの理解と効果的な使用により、PSoC 3、PSoC 4 および
PSoC 5LP の能力を、従来のマイクロプロセッサが提供するも
のよりも拡張することができます。
本アプリケーション ノートで説明したサンプル プロジェクトは、
カスタマイズする独自のソリューションを作成するための単な
る出発点に過ぎません。コンポーネントの機能および複雑さの
追加の詳細については、PSoC のアーキテクチャ TRM および
CAG をご覧ください。
www.cypress.com
文書番号: 001-89531 Rev. *A
31
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
PSoC Creator Tutorial: Using the UDB Editor – Part 4
関連リソース
PSoC Creator Tutorial: Using the UDB Editor – Part 5
PSoC Creator Tutorial: Using the UDB Editor – Part 6
アプリケーション ノート
AN54181 – Getting Started with PSoC 3
AN79953 – Getting Started with PSoC 4
AN77759 – Getting Started with PSoC 5
AN81623 – PSoC 3 and PSoC 5 Digital Design Best
Practices
AN82250 – PSoC 3, PSoC 4 and PSoC 5 Implementing
Programmable Logic Designs
KB 記事
著者について
氏名:
Todd Dust
肩書:
アプリケーション エンジニア
経歴:
シアトルパシフィック大学で電気工学の学
士号を取得しました。それ以来、サイプレ
スでアプリケーション エンジニアとして働
いてきます。
氏名:
Greg Reynolds
経歴:
10 年以上にわたってサイプレスでいくつ
かの職務をこなしてきました。
KBA86838 – Datapath Configuration Tool Cheat Sheet
KBA86336 – Just EnoughVerilogfor PSoC
KBA86338 – Creating a Verilog-based Component
KBA81772 – Adding Component Primitives
/VerilogComponents to a Project
Basics ofVerilogand Datapath Configuration Tool for
Component Creation
TRM
PSoC 3 Architecture TRM
PSoC 5LP Architecture TRM
PSoC 4 Architecture TRM
ビデオ
以下のビデオは、PSoC Creator と Verilog コンポーネントの
作成プロセスについて説明します。
基本
Creating a New Component Symbol
Creating aVerilogImplementation
コンポーネント作成
PSoC Creator 113: PLD BasedVerilogComponents
PSoC Creator 210: Intro to Datapath Components
PSoC Creator 211: Datapath Computation
PSoC Creator 212: Datapath FIFOs
PSoC Creator 213: Multi-Byte Datapath Components
PSoC Creator 214: Datapath API Generation
PSoC Creator Tutorial: Using the UDB Editor – Part 1
PSoC Creator Tutorial: Using the UDB Editor – Part 2
PSoC Creator Tutorial: Using the UDB Editor – Part 3
www.cypress.com
文書番号: 001-89531 Rev. *A
32
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
図 81. 簡単なカウンターの状態図
付録 A – データパス コンフィギュレーショ
ン ツールの使用例
PSoC の特長を身につける最適な方法は、設計で使用するこ
とです。アプリケーション ノートは、6 個の簡単なデータパス ベ
ース コンポーネントを作成する方法を示す以下の 5 つの事例
プロジェクトを含みます。






Count != 0
Decrement
Count
Count == 0
8 ビット ダウンカウンター
8 ビット PWM
Count != 0
16 ビット PWM
Reload
Count
8 ビット アップ/ダウンカウント PWM
Count == 0
TX 専用の簡単な UART
パラレル入力およびパラレル入力
サンプル プロジェクトは PSoC 3、PSoC 4 または PSoC 5LP
どのデバイスにも使用できます。完全なサンプル プロジェクト
はサイプレスのウェブサイトでのこのアプリケーション ノートの
ランディング ページに掲載されます。
プロジェクト#1 – 8 ビット ダウンカウンター
このプロジェクトの目的は、簡単なデータパスベースのコン
ポーネントを作成するために必要な手順を紹介することです。
まず、8 ビットのダウンカウンター コンポーネントを作成し、次
に、それを 8 ビット PWM に変更します。
8 ビット カウンター コンポーネントの詳細
図 81 に示した通り、簡単なダウンカウンターは 2 つの状態を
持つステート マシンと考えられます。状態遷移はデータパス ク
ロックの立ち上がりエッジで行われます。
カウンターは初期値で開始し、その値をデクリメントします。カ
ウントが 0 になると、イベントがトリガーされ、周期の値はカウ
ンターに再びロードされます。この種類のカウンターは容易に
データパスに実装されます。
その実装には、コンフィギュレーション RAM エントリ 2 つのみ
が必要となります。1 つは、ワーキング レジスタの 1 つに格納
されるカウント値をデクリメントします。もう 1 つはカウントを初
期値で再びロードします。残りの 6 つの CFGRAM エントリは
未使用です。
この例で使用される 2 つのデータパス レジスタは以下の通り
です。


A0 – カウント値を格納し、ALU によってデクリメントされる。
D0 – カウントが 0 に達した時に A0 に再びロードされる値
を格納する。
データパスのコンフィギュレーションがロードとデクリメントとど
ちらにするかを決定する方法が必要です。図 81 は、遷移がカ
ウントの値 (0 または 0 以外) によって制御されることを示しま
す。
データパスは、A0 と A1 のデータの値を監視するゼロ検出ブ
ロック (ZDET) があります。このブロックは z0 (A0 == 0) と z1
(A1 == 0) という 2 つの出力があり、それぞれ A0 と A1 の状
態を示します。各出力は、値が 0 であれば HIGH になり、値が
0 ではなければ LOW になります。
www.cypress.com
文書番号: 001-89531 Rev. *A
33
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
この例では、z0 出力を使用してコンフィギュレーションを選択
することができます。CFGRAM のアドレッシングには 3 ビット
が必要となります。ビット 0 を z0 に接続し、他のビットを LOW
に維持することが可能です。表 7 はコンフィギュレーション遷移
をまとめます。
8 ビット カウンター コンポーネントの作成手順
既存の PSoC Creator プロジェクトを使用し、それに新しいコ
ンポーネント ライブラリを追加することが可能です。しかし、こ
の例では、開始点として空のプロジェクトを使用します。
1.
表 7.例 1 の遷移表
CFGRAM コン
フィギュレーション
CFGRAM アドレス
ビット
2
1
0
動作
0
0
0
z0 = 0
デクリメン ト
カウント
1
0
0
z0 = 1
リロード カウント
2~7
X
X
X
未使用
図 83 に 示 し た 通 り 、 PSoC Creator を 起 動 し て 、
「AN82156_Appendix」というプロジェクトを開始します。
「AN82156_Appendix」ワークスペースもデフォルトで作
成されます。
図 83. 新しいプロジェクトの追加
A0 でのカウントは 0 に達すると、z0 は 1 になります。これに
よって、次のデータパス コンフィギュレーションは「リロード カ
ウント」になります。カウントが D0 から A0 に再ロードされる時、
z0 は 0 になり、次のコンフィギュレーションは「デクリメント カウ
ント」になります。
動作方法を視覚化するには、図 82 に示すように強調表示さ
れるデータパス ブロック図をご覧ください。
図 82. 強調表示される簡単なカウンター ブロック図
CS_ADDR
[2:0]
CFGRAM
F0
F1
コンポーネントは PSoC Creator ライブラリ プロジェクトに格納
されます。自分のライブラリとコンポーネントがサイプレスの標
準コンポーネント ライブラリと混同しないように、唯一の名前を
付けます。
D0
D1
(Reload Value)
2.
A0
(Count Value)
A1
A0, A1
A0, A1,
D0, D1
Workspace Explorer の Source タブ内のワークスペー
ス「AN82156_Appendix」を右クリックし、表示するドロッ
プダウン メニューから Add > New Project…を選択しま
す。
PO
PI
ALU
(Decrement A0)
z0
z1
ZDET
CMP0
FFDET
CMP1
CS_ADDR = 000 (Decrement Count)
CS_ADDR = 001 (Reload Count from D0)
Z0 = CS_ADDR lsb
www.cypress.com
文書番号: 001-89531 Rev. *A
34
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
3.
図 84 に示すように、Other タブを選択して PSoC Library
テンプレートを表示させます。「AN82156_Appendix_Lib」
の名を付けて、デフォルトの値を使用します。これによって、
ライブラリは AN82156_Appendix ワークスペースと同じ
場所で作成されます。
5.
コンポーネント テンプレートの Symbol Wizard を選択し
て、コンポーネントを SimpleCntr8_v1_0 の名を付けます。
図 86 を参照してください。
図 86. Symbol Wizard の使用
図 84. 新しいライブラリの追加
新しいライブラリは Workspace Explorer に表示されます。そ
して、このライブラリに格納されるコンポーネントを使用できる
ようにライブラリをサンプル プロジェクトにリンクします。
次に、その新しいライブラリに新しいコンポーネントを追加する
必要があります。
4.
Workspace Explorer のタブ Components に切り替え、
プロジェクト AN82156_Appendix_Lib を右クリックしま
す。ドロップダウン メニューから Add Component Item
を選択します。図 85 を参照。
コンポーネントの名前に版数を含んだ方が良いです。コンポー
ネントの名前に「_vX_Y」タグ (X がメジャー バージョン、Y が
マイナー バージョン) を追加します。PSoC Creator はバージョ
ニング機能を持ち、コンポーネントの複数のバージョンを追跡
して使用できます。
6.
Create New ボタンをクリックして、コンポーネント シンボ
ル ウィザードを起動します。
ウィザードは、ユーザーに入力と出力を定義するように求め、
これらの情報を使って、コンポーネント シンボルを作成します。
7.
2 個の端末 (clk 入力と tc 出力)を Terminal Name フィ
ールドに追加します。図 87 を参照してください。
図 87. 入力と出力の追加
図 85. コンポーネント アイテムの追加
「clk」入力はデータパス クロックです。「tc」出力はカウント値が
0 になった時点を通知するのに使用します。
www.cypress.com
文書番号: 001-89531 Rev. *A
35
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
8.
OK をクリックして、シンボルをシンボル エディタ ページで
生成します。図 88 を参照してください。
図 89. 「Symbol Properties」 (シンボル プロパティー) の追加
図 88. 生成したコンポーネント シンボル
この点で、「clk」と「tc」端末は回路図の一部だけで、何もしま
せん。後で Verilog を使って、それらの機能を定義します。
9.
(シンボル自身ではなく) シンボル エディタの空の領域を
右クリックして、ドロップダウンメニューから Properties を
選択します。
10. プロパティー フィールドの Symbol セクションに値を入力
します。図 89 を参照してください。

Doc.APIPrefix = SimpleCntr8
この値は、コンポーネント用に生成された任意の API のフ
ァイル名の先頭に付加されます。この例では、API を生成
しませんが、コンポーネントを作成するたびに、ここに値を
入力してください。

Doc.CatalogPlacement =
AN82156_Appendix/Digital/Cntr8
「…」をクリックして Catalog Placement ダイアログを開き、
値を入力します。PSoC Creator はこの値を使って、コン
ポーネント カタログの階層を定義します。最初のアイテム
は、コンポーネントをカタログに表示するタブです。次の各
「/」はサブレベルを表します。階層は少なくとも 1 つのサブ
レベルを含む必要があります。ここで表す値は、コンポー
ネントが AN82156_Appendix タブの「Digital」サブレベル
で「Cntr8」として表示されることを示します。
11. 「Save All」 (Ctrl+Shift+S) を行い、変更がすべてのプロ
ジェクトに適用されることを確実にします。新しいシンボル
は、Workspace Explorer の Components タブの
AN82156_Appendix_Lib の下に表示されます。図 90
を参照してください。
図 90. ライブラリの新しいコンポーネント

Doc.DefaultInstanceName = SimpleCntr8
これは、コンポーネントが回路図に配置する時に表示され
るデフォルト名です。コンポーネントをプロジェクト回路図
に配置した後に、変更できます。
回路図シンボルをデータパス実装にリンクする必要があります。
12. Symbol Editor ページの領域を右クリックして、ドロップダ
ウン メニューから Generate Verilog を選択します。
www.cypress.com
文書番号: 001-89531 Rev. *A
36
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
13. Generate Verilog ダイアログ ボックスのすべての設定
を初期値のままにして、Generate をクリックします。図 91
を参照してください。
図 91. Generate Verilog ダイアログ
16. データパス コンフィギュレーション ツールで、File> Open
を 選 択 し て 、 PSoC Creator に よ り 生 成 さ れ る
SimpleCntr8_v1_0.v ファイルを参照します。この例での
手順 に従えば、 そのファイルは、 図 92 に示すように
AN82156_Appendix ワ ー ク ス ペ ー ス フ ォ ル ダ 内 の
AN82156_Appendix_Lib プロジェクト フォルダに配置さ
れます。
図 92. コンポーネント Verilog ファイルの例
14. 「Save All」を実行して、変更がプロジェクトにすべて適用
されることを確実にします。新しい Verilog ファイルが生成
され、コンポーネントに追加されます。
Verilog ファイルにはデータパス実装と、データパス制御用に
必要な Verilog コードが含まれます。付録 C で、新しいコンポ
ーネント Verilog ファイルの例を記述します。データパスのイン
ス タ ン ス を 追 加 お よ び 編 集 す る に は 、 Datapath
Configuration Tool (データパス コンフィギュレーション ツー
ル) を使用してください。
15. データパス コンフィギュレーション ツールを起動
Tools > Datapath Config Tool を選択して、ツールを起動す
る こ と が で き ま す 。 Start メ ニ ュ ー (Start > All
Programs > Cypress > PSoC Creator
3.x > Component Development
Kit > DatapathConfiguration Tool) からデータパス コ
ンフィギュレーション ツールを起動することも可能です。
17. ファイルを選択して Open をクリックし、Verilog ファイルを
データパス ツールに読み込みます。
まず、新しいデータパス コンフィギュレーションを作成します。
18. メニューから Edit > New Datapath を選択して、New
Datapath ダイアログウィンドウを開きます。
19. 図 93 示すように、Instance Name にインスタンス名
(「cntr8」を使用) を入力し、Instance Type には
cy_psoc3_dp8 を選択します。OK をクリックします。
図 93. 新しい 8 ビットのデータパス インスタンス
これは 8 ビットのカウンターです。データパスを 8 ビッ
ト (cy_psoc3_dp8) より大きく定義する必要はありません。他
のサンプル プロジェクトは 8 ビットより大きいコンポーネントを
デモします。
www.cypress.com
文書番号: 001-89531 Rev. *A
37
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
20. File > Save を ク リ ッ ク し て 、 コ ン フ ィ ギ ュ レ ー シ ョ ン を
Verilog ファイルに保存します。
データパス コンフィギュレーション ツールは、最初にコンフィ
ギュレーションを保存する時に、Verilog ファイル内でデータパ
ス構造をインスタンス化します (付録 C を参照)。コンフィギュレ
ーションを変更してカウンター機能を実装することができます。
24. a0_init_a と d0_init_a のボックスにチェックを入れます。
図 95 に示すように、値を 15 にセットして、開始カウントと
再ロード カウントを定義します。
図 95. SimpleCntr8 の「Initial Register Values」
21. Reg0 と Reg1 フィールドの値を選択して、データパスを設
定します。
22. 図 94 を参照してください。他のフィールドはそれらのデ
フォルト設定のままにして良いです。
Reg0 はコンフィギュレーション 0 または命令 0 と同様で、
Reg1 はコンフィギュレーション 1 または命令 1 と同様です。
図 94. SimpleCntr8 コンポーネントのコンフィギュレーション
25. 完了したら、OK をクリックします。
表 8. 例 1 のデータパス コンフィギュレーション
FUNC
SRCA
SRCB
SHIFT
A0 WR SRC
DEC
A0
D0
PASS
ALU
PASS
A0
D0
PASS
D0
Reg0 と Reg1 列は CFGRAM に保存される 8 つのデータパ
ス コンフィギュレーションの最初の 2 つを表しています。1 つは
カウンターをデクリメントするように、もう 1 つはカウンターを再
ロードするようにコンフィギュレーションされます。
A0 と D0 レジスタにロードされるカウント値で開始する必要が
あります。Ax と Dx レジスタは CPU でアクセス可能であるた
め、main.c ファイル内のコードを使用してロードすることができ
ます。また、Verilog ファイル内で定義することで、それらにデ
フォルトの初期値をロードすることもできます。データパス ツー
ルはこれらの設定を行うことができます。
23. View > Initial Register Values を選択して、レジスタ値
のダイアログを開きます。
この場合、開始値と同じカウント値を A0 に再ロードするように
D0 と A0 値は同一にします。最初の期間が他のと異なるよう
にするために、別の値を選択することが可能です。この場合、
カウント シーケンスが 15~0 のため、期間は 16 です。
26. メニューから File > Save を選択して、変更を Verilog フ
ァイルに保存します。データパス コンフィギュレーション ツ
ールを閉じて、PSoC Creator での Counter_8bit_v1_0.v
ファイルを開いて確認します。
設定を保存すると、データパス コンフィギュレーション ツール
は Verilog ファイルを変更します。PSoC Creator は、戻って切
り替える時、Verilog ファイルを再ロードように求めることがあり
ます。
この時点で、Verilog ファイルに変更を行って、回路図シンボル
をデータパス論理にリンクする必要があります。ここで討論す
るコード部分は Verilog ファイルの 77 行目からの部分です。
27. .clk(1'b0)を.clk(clk)に変更します。これによって、
データパス クロックがシンボルの clk 端末にリンクされま
す。この端末を使用して、データパスが動作する速度をセ
ットします。
28. .z0(),から.z0(tc)に変更します。これによって、ゼロ
検索ブロック (ZDET) の z0 出力がシンボルの tc 端末に
リンクされます。リンクされると、tc 端末は z0 出力の値を
表します。
29. .cs_addr(3'b0) か ら .cs_addr({2'b00,tc}) に
変更します。これによって、CFGRAM アドレスの上位 2 ビ
ットが 0 にセットされ、ビット 0 が tc の値にセットされしま
す。
tc が常に z0 の値を反映することに注意してください。つまり、
z0 はコンフィギュレーションを決定します;表 7 を参照。
www.cypress.com
文書番号: 001-89531 Rev. *A
38
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
30. すべての変更を Verilog ファイルに保存します。付録 C で
は、すべてが正しく入力されれば、完成した Verilog コード
がどのように見えるかを示しています。
33. クロック コンポーネントを「clk」端末に接続します。それを
10kHz にセットします。他の値でも良いですが、10kHz の
場合にはオシロスコープ表示が容易になります。
これで、コンポーネントが使用可能になりました。コンポーネン
トがプロジェクトのコンポーネントカタログに表示されるように、
AN82156_Library をプロジェクトの依存としてセットします。
34. オシロスコープで観察できるように、デジタル出力ピンを
「clk」端末に接続します。それに「P0_0_clk」の名を付け、
他のすべての設定をデフォルト値のままにします。
31. Source タブで、プロジェクト「AN82156_Appendix」を右
クリックして、Dependencies… を選択します。図 96 に
示 す よ う に 、 新 し い AN82156_Appendix_Lib を
AN82156 プロジェクトのユーザー依存として追加し、コン
ポーネント ボックスにチェックを入れます。
注: PSoC 4 では、クロック出力をピンへ直接ルーティングする
ことはできません。クロックをピンへルーティングするために、
以下の手順に従ってください。
図 96. MyLibrary をプロジェクトの依存として追加する
a.
デジタル出力ピン コンポーネントを回路図に配置し
ます。
b.
ピン カスタマイザーで、Clocking タブを選択します。
c.
Out Clock: を External に設定します。
d.
Pins タブに戻って、Output サブタブに移動します。
e.
Output Mode: で、Clock を選択します。
f.
「OK」をクリックします。
g.
クロック信号をピン コンポーネントの out_clk 端末に
接続します。
35. デジタル出力ピン コンポーネントを「tc」端末に接続します。
それに P0_1_tc の名を付け、他のすべての設定をデフォ
ルト値のままにします。カウントが 0 になると、このピンは
HIGH になります。図 98 に完全なプロジェクトの回路図を
示します。
図 98. 簡単なカウンタープロジェクト回路図
図 97 に示した通り、新しい AN82156_Appendix_Lib コン
ポーネントは AN82156 タブ下の Component Catalog に表示
されます。
図 97. カタログ内の新しいコンポーネント
36. cydwr の Pins タブで、ピンの名前に応じてピンを P0[0]と
P0[1]に割り当てます。
ここで、プロジェクトのビルドと PSoC のプログラミングの準備
ができました。P0[0]と P0[1]上のクロックと端末カウントを観測
することができます。
37. プロジェクトを保存してビルドし、PSoC をプログラムしま
す。
コンポーネントが Component Catalog に表示された後、それ
を回路図に配置して他のコンポーネントと同じように使用する
ことができます。
それをテストするには、クロック ソースとカウンターの tc 出力
を表示する方法を追加する必要があります。
32. Cntr8 コンポーネントをプロジェクト回路図に配置します。
www.cypress.com
文書番号: 001-89531 Rev. *A
39
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
38. 図 99 に示すように、オシロスコープを出力ピンに接続す
れば、「clock」と「tc」出力を観察できます。
図 100 に示すように、強調表示されたブロック図を用いてそれ
を視覚化することができます。
図 99. 簡単なカウンターの出力
図 100. 簡単な PWM の強調表示されたブロック図
CS_ADDR
[2:0]
CFGRAM
tc
F0
F1
clk
D0
D1
(Reload Value)
(Compare)
A0
(Count Value)
A1
A0, A1
A0, A1,
D0, D1
PI
A0 に開始値 15 をロードしたため、周期が 16 (15 から 0 まで
カウントダウン) クロックサイクル幅です。tc ピンは 1 クロック
サイクルだけ (A0 が 0 になる時) HIGH になります。それは、
その時、A0 が D0 の値でリロードされるためです。A0 が 0 で
なくなると、tc が LOW にセットされ、設定は後方に遷移して再
び A0 のデクリメントを開始します。
PO
PI
ALU
(Decrement A0)
これで、ファームウェアを書くことが全く必要なしに初めてのデ
ータパス ベースのコンポーネントの設計を完了しました。
PWM になるようにカウンターを変更
z0
PWM は単に比較機能のあるカウンターです。PWM を追加す
るには、A0 の値を他の固定の値と比較する方法が必要です。
比較対象の固定値を D1 レジスタに格納し、A0 が D1 未満で
あるかどうかを確認するように比較ブロックを設定できます。
z1
ZDET
CMP0
ce1
FFDET
cl1
CMP1
CS_ADDR = 000 (Decrement Count)
CS_ADDR = 001 (Reload Count from D0)
Z0 = CS_ADDR lsb
cl1 = Compare A0 < D1
この例は、前の節で作成した 8 ビット カウンター コンポーネン
トを変更します。空のコンポーネントで、または以前のカウンタ
ー コンポーネントのコピーを作成することで開始することがで
きますが、以下の手順は既存のカウンターを変更することを前
提とします。
1.
www.cypress.com
SimpleCntr8_v1_0 用 の コ ン ポ ー ネ ン ト シ ン ボ ル
(.cysym) ファイルを開きます。
文書番号: 001-89531 Rev. *A
40
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
2.
「O」を押して、デジタル出力端末を追加します。それに
cmp を名前付け、図 101 に示した通りに配置します。
9.
d1 値に 7 を入力します。図 104 に示すように、これによっ
て、比較値は 7 にセットされます。
図 101. 「cmp」端末付きのコンポーネント シンボル
3.
「Save All」を選択して、すべての変更を保存します。
4.
データパス コンフィギュレーション ツールを起動して、
SimpleCntr8_v1_0.v の Verilog ファイルを開きます。
データパス コンフィギュレーション ツールは自動的に
Verilog ファイルを解析して、最初のコンフィギュレーション
を表示します。
前述したように、PWM は単に比較機能のあるカウンターです。
ここでも必要なコンフィギュレーションは 2 つのみで、A0 での
カウント値はデクリメントされて、リロードされます。つまり、図
102 に示すようにデータパス コンフィギュレーション ツールで
のほとんどの設定は変更されません。
図 102. PWM 用の CFGRAM の設定
図 104. PWM のレジスタの初期値
10. OK をクリックして、レジスタにそれらの値を適用します。
11. Verilog ファイルに変更を保存します。
A0 が D1 未満の間、比較ブロックの出力は常に HIGH です。
カウンターと同じように、Verilog ファイルを使ってシンボルをデ
ータパス ハードウェアにリンクします。
12. データパス コンフ ィギ ュレーシ ョン ツールを閉じて、
PSoC Creator 内の Verilog ファイルを開きます。
13. output tc の下に、output cmp を追加します。これ
により、コンポーネント シンボルでの cmp 端末へのリンク
が作成されます。
14. .cl1() 行を .cl1(cmp) に変更します。これにより、
cmp 信号が Compare1 ブロックの「より小さい」出力にリ
ンクされます。
(A0 < D1) の比較を追加する必要があります。それを行うには、
コンフィギュレーション可能な比較ブロックを設定します。
5.
図 103 に示すように、CMP SELA を A0_D1 にセットして、
比較用に A0 と D1 を使用するように比較機能を設定しま
す。
図 103. 比較ブロック 1 のマルチプレクサの設定
15. すべての変更を Verilog ファイルに保存します。
PWM コンポーネントとシンボルは Component Catalog の
AN82156_Appendix タブに表示されてい るままです。コ ン
ポーネントはプロジェクト回路図で自動的に更新されます。
16. 出力ピンを追加し、cmp 端末に接続させます。図 105 に
示すように、それに P0_2_cmp の名を付け、P0[2]ピンに
割り当てます。
図 105. 簡単な PWM プロジェクト回路図
A0 と D0 がカウント値およびリロード値を格納することに注意
してください。D1 レジスタにデフォルトの比較値を追加すること
が必要です。
6.
メニューから View > Initial Register Values を選択し
て、ダイアログ ウィンドウを開きます。
7.
d1_init_a のチェックボックスをチェックします。
8.
a0 と d0 の値に 15 を入力します。これによって、期間が
16 クロックサイクルにセットされます。
www.cypress.com
ここで、プロジェクトのビルドと PSoC のプログラミングの準備
が整いました。クロックと端末カウントは P0[0]と P0[1]ピンで観
察することができます。PWM 出力は P0[2]で観察されます。
文書番号: 001-89531 Rev. *A
41
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
17. プロジェクトを保存してビルドし、PSoC をプログラムしま
す。
4.
図 107 に示すように、ウィンドウの右側の Misc 設定
フィールドで、Hardware フラグを「True」に設定します。
18. オシロスコープを出力ピンに接続すれば、clock、tc およ
び cmp 出力を観察することができます。図 106 に「clk」と
「cmp」信号を示します。
これは、UDB ハードウェアがパラメーターを使用することがで
きるようにパラメーターを Verilog に表示します。
図 107. 新しいコンポーネントパラメーターの追加
図 106. 簡単な PWM の出力
cmp
clk
5.
A0 に開始値 15 をロードしたため、周期が 16 クロック サイク
ル幅となります。D1 を 7 に設定したため、A0 が 7 より小さくな
ると「cmp」ピンが HIGH になります。D1 の比較値を変更して
PWM をテストすることができます。



6.
パラメーターの追加
コンポーネントのシンボル エディター ページ (.cysym)を
開き、空白領域を右クリックします。
2.
ドロップダウン メニューから Symbol Parameters を選
択します。
3.
既存のパラメーターの下の空の列に新しいパラメーターを
追加します。



名前 = Counter_Period
タイプ = uint8
値 = 15
図 108 に示すように、ウィンドウの右側の Misc 設定
フィールドで、Hardware フラグを「True」に設定します。
図 108. 他の新しいコンポーネント パラメーターの追加
コンポーネントのパラメーターのいずれかを変更するたびに
Verilog コードを変更することは不便です。また、もし異なる期
間および比較値を持つ 2 つの PWM を必要とする場合、どう
なるでしょうか。ほとんどのサイプレスのコンポーネントと同様
に、ユーザー コンフィギュレーション可能なパラメーターをコン
ポーネントに追加することができます。
1.
既に作成した比較値の定義の下の列に他の新しいパラ
メーターを追加します。
名前 = Compare_Value
タイプ = uint8
値=8
7.
OK をクリックし、「Save All」を選択して、コンポーネントに
変更を適用します。
新しいコンポーネントシンボルパラメーターを Verilog ロジック
にリンクする必要があります。
www.cypress.com
文書番号: 001-89531 Rev. *A
42
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
8.
コンポーネントの Verilog ファイルを開いて、25 行目また
はその近くの、以下テキストを探します。
//
9.
Your code goes here
16. 「Save All」を選択して、プロジェクトをビルドして PSoC を
プログラムします。
図 110 に示すように、周期と比較出力が変更されます。
図 110. パラメーターの変更された PWM 出力
そしてそのテキストを以下の部分で置き換えます。
parameter [7:0] Counter_Period = 8'd0;
parameter [7:0] Compare_Value = 8'd0;
cmp
10. レジスタの初期値を含む 29 行目またはその近くのテキス
トを探します。
cy_psoc3_dp8 #(.a0_init_a(15),
.d0_init_a(15), .d1_init_a(7),
11. 固定値を先ほど定義したパラメーターで置き換えます。
cy_psoc3_dp8 #(.a0_init_a(Counter_Period),
.d0_init_a(Counter_Period),
.d1_init_a(Compare_Value),
clk
このコードは A0、D0 および D1 の初期値をコンポーネント パ
ラメーターにリンクさせます。これ以降の例では、データパス コ
ンフィギュレーション ツールを使用してこれらの手順を行う方
法を説明します。
コンポーネントを変更せず、コンパイル時にそれらを設定する
ことができます。
12. 「Save All」を選択して、プロジェクトをビルドして PSoC を
プログラムします。
デフォルトの比較値は以前に 7 に設定されました。ここで、プ
ロジェクト回路図内でパラメーターを変更することができます。
13. プロジェクト回路図に戻って、SimpleCntr8_1 コンポーネ
ントをダブルクリックしてプロパティー ダイアログを開きま
す。
14. 図 109 に示すように、比較値を「3」に、カウンター周期を
「10」に変更します。
図 109. コンポーネント パラメーターの選択
周期を 11 サイクルに設定し (カウンターがリロードの前に 0~
10 に進むため、周期は 10+1)、比較値を 3 に設定しました。
結果は、8 クロック サイクルの LOW 出力および 3 クロック サ
イクルの HIGH 出力となります。
パラメーターの値が uint8 である限り、ほとんど何の値にも変
更することができます。また、複数のコンポーネントのインスタ
ンスをプロジェクトに配置し、それらを異なる値に設定すること
もできます。
コンポーネント パラメーターの追加の詳細 (入力値制限の設
定を含む) については、Component Author Guide を参照して
ください。
ヘッダー ファイルの追加
PWM の動作を設計時に変更するだけでなく、C コードにより
PWM のレジスタを変更することで実行時に PWM を変更する
こともできます。例えば、レジスタ D0 に周期値を格納し、レジ
スタ D1 に比較値を格納しました。これらのレジスタに容易に
アクセスできるように、使用されるレジスタを定義するヘッ
ダー ファイルを作成します。
1.
Components タブで、SimpleCntr8_v1_0 を右クリック
し、Add Component Item を選択します。
2.
Add Component Item ウィンドウで、API セクションに移
動して API Header File をクリックします。
15. OK をクリックして変更を適用します。
www.cypress.com
文書番号: 001-89531 Rev. *A
43
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
3.
図 111 に示すように Item name を SimpleCntr8.h に変
更します。
図 111. ヘッダー ファイルの追加
プロジェクト#2 – 16ビットPWM
このサンプル プロジェクトは、データパス チェーン接続の概念
を説明します。データパスは隣接のデータパスに接続される専
用信号を持っています。これらの信号により、最大 32 ビット幅
の機能を作成することができます。この例では図 112 に示す
ように、最初のサンプル プロジェクトと同様な PWM を作成し
ますが、16 ビット幅です。
図 112. チェーン接続された UDB を使用する 16 ビット機能
4.
Create New をクリックします。これにより、ヘッダー ファ
イルがコンポーネントに追加されます。
ここで、比較値 (D1) と周期値 (D0)の定義を追加します。
5.
ヘッダー ファイルで//[]END OF FILE の上に以下の
定義を加えます。
図 113 に示すように、各データパス内の ALU はキャリー、シ
フト データおよび条件付き信号を最も近い ALU にチェーン接
続するように設計されています。すべての条件付き信号とキャ
プチャ信号は、最下位バイトから最上位バイトへの方向でチェ
ーン接続されます。左シフト信号も最下位バイトから最上位バ
イトへの方向でチェーン接続されます。右シフト信号は最上位
バイトから最下位バイトへの方向でチェーン接続されます。
図 113. データパスのチェーン接続フロー
#define `$INSTANCE_NAME`_Period_Reg (*(reg8 *)
`$INSTANCE_NAME`_cntr8_u0__D0_REG )
#define `$INSTANCE_NAME`_Compare_Reg (*(reg8
*) `$INSTANCE_NAME`_cntr8_u0__D1_REG )
これらの 2 つの定義により、ファームウェア内で D0 と D1 レジ
スタに直接書き込むことができます。cyfitter.h ファイルは、プ
ロジェクトに使用されるコンポーネント内にあるレジスタの一連
の定義を含みます。このアプリケーションノートに記載されてい
る手順と異なって行った場合は、レジスタ定義を cyfitter.h ファ
イルで検索して、ここに示している定義とは異なるものを使う必
要があります。
実行時に比較値を更新するために、作成したばかりの定義に
書き込みます。コンポーネントがSimpleCntr8_1の名が付けら
れた場合、Cコードは以下の通りです。
SimpleCntr8_1_Period_Reg = 0x08;
SimpleCntr8_1_Compare_Reg = 0x02;
これにより、周期値が0x08に、比較値が0x02に更新されます。
これとその定義の使用方法については、「Component Author
Guide」を参照してください。上記のCコードの場合のようにレ
ジスタへ直接書き込む方法は8ビットのレジスタのみに対して
実行できることに注意してください。16ビット以上のレジスタに
対しては、次のプロジェクトで説明する他の方法を使用しなけ
ればなりません。
www.cypress.com
この例は、ユーザーが前述の例に説明された概念に精通して
いることを前提にします。参考のために、完成された 16 ビット
PWM プロジェクトが、このアプリケーション ノートに含まれて
います。
16 ビット PWM コンポーネント詳細
16 ビット PWM の基本的な機能は最初のサンプル プロジェク
トの 8 ビット PWM の基本的な機能と同じです。どの場合でも、
カウントがデクリメントされ、カウントが比較値より少ない時に
出力が HIGH になります。異なる点は、すべての 16 ビットを
操作するために 2 つのデータパスを使用する必要があること
です。
16 ビット PWM コンポーネントの作成手順
混乱を避けるために、最初のサンプル プロジェクトの 1 つのコ
ンポーネントを修正する代わりに新しいコンポーネントを作成し
ます。コンポーネント作成の基本手順は同じです。
文書番号: 001-89531 Rev. *A
44
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
1.
PSoC Creator を 起 動 し 、 前 回 の 例 で 使 用 さ れ た
「 AN82156_Appendix 」 ワ ー ク ス ペ ー ス を 開 き ま す 。
「16bitCounter」という新しいプロジェクトをワークスペース
に追加します。
新しいワークスペースを起動することが可能ですが、この例で
は、ユーザーが以前と同じようなワークスペースを使用してい
ることを前提にします。同じワークスペースを使用すると、ライ
ブラリ管理と依存関係管理が簡単になります。
2.
図 114 に示すように、Symbol Wizard を使用して新しい
コンポーネントを AN82156_Appendix_Lib に追加しま
す。この例ではコンポーネントに「SimpleCntr16_v1_0」の
名を付けます。
図 114. 新しいシンボル作成
4.
シンボル回路図のあるページを右クリックし、シンボルの
プロパティーを追加します。


Doc.APIPrefix = SimpleCntr16
Doc.CatalogPlacement =
AN82156_Appendix/Digital/Cntr16

5.
Doc.DefaultInstanceName = SimpleCntr16
新しいコンポーネント シンボルの Verilog ファイルを生成
します。すべてのアイテムをデフォルト値のままにします。
6.
「Save All」を選択して、すべての変更を適用します。
7.
データパス コンフィギュレーション ツールを起動して、作
成したばかりの Verilog ファイルを開きます。
6.
新しいデータパスコンフィギュレーションを追加します。こ
の例では、コンフィギュレーションに「cntr16」の名を付けま
す。図 116 に示すように、「cy_psoc3_dp16」を選択しま
す。
図 116. 新しい PWM データパスの作成
3.
図 115 に示すように、8 ビット PWM の例の通りに clk 入
力と tc と cmp 出力を追加します。
7.
図 115. PWM への端末追加
OK をクリックしてデータパスのコンフィギュレーションを作
成します。
cntr16_a(16)と cntr16_b(16)のコンフィギュレーションがあり
ます。2 つの個別のデータパスのコンフィギュレーションが
Verilog ファイルに加えられます。「a」コンフィギュレーションは
LSB に、「b」コンフィギュレーションは MSB に加えられます。
8.
図 117 と図 118 に示すように、「_a」コンフィギュレーション
CFGRAM と CFG13-12 セクションを 8 ビット PWM の例
の通りにセットします。
図 117. SimpleCntr16 コンポーネントのコンフィギュレーション
www.cypress.com
文書番号: 001-89531 Rev. *A
45
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
表 9. 例 2 のデータパス コンフィギュレーション
REG
FUNC
SRCA
SRCB
SHIFT
A0 WR SRC
000
DEC
A0
D0
PASS
ALU
001
PASS
A0
D0
PASS
D0
図 118. 比較ブロック 1 のマルチプレクサの設定
15. 「Save」をクリックして Verilog ファイルの変更を保存しま
す。
レジスタの初期値をセットする必要があります。以前の例では、
周期値と比較値を設定するためのパラメーターの使用方法を
示しました。この例はチェーン接続を中心に説明するので、話
を簡単にするため、固定値を使います。
16. View > Initial Register Values を選択します。
17. 図 121 のように DP「_a」と DP「_b」の値をセットします。
この例では、各レジスタが 8 ビット幅であることを明らかに
するために、数値をバイナリで示します。
図 121. 16 ビット PWM のレジスタの初期値
8 ビットの例のように ALU 関数と比較ブロックをセットすること
を忘れないでください。この時、チェーン接続をまだコンフィギュ
レーションしていないため、設定は同様です。
9.
「Save」をクリックして Verilog ファイルの変更を保存しま
す。
「_b」コンフィギュレーションが PWM の上位 8 ビットであるた
め、同様の変更を行ってください。データパス コンフィギュレー
ション ツールは、コンフィギュレーション間で設定をコピーする
ことができます。
10. Edit > Copy Datapath を選択してコンフィギュレーション
をコピーします。
「_a」コンフィギュレーションは LSB で、「_b」コンフィギュレー
ションは MSB です。これらの値により、PWM の周期値が
511 クロック サイクルに、比較値が 255 になります。
11. 「cntr16_b」コンフィギュレーションに切り替え、 Edit >
Paste Datapath を選択して、「_a」 コンフィギュレーショ
ンを「_b」コンフィギュレーションに貼り付けます。
18. Verilog ファイルの変更を保存して、データパス コンフィ
ギュレーション ツールを閉じるために「Save」を選択します。
12. 「Save」をクリックして Verilog ファイルの変更を保存しま
す。
チェーン接続をコンフィギュレーションします。「_b」コンフィギュ
レーションでのみこれらの設定を使用します。
13. 図 119 に示すように、「cntr16_b」コンフィギュレーション
で、CI_SELA を「CHAIN」にセットします。これにより、キャ
リーイン信号が前のデータパスから送信されることを設定
できます。
図 119. キャリーイン信号のチェーンのコンフィギュレーション
14. 図 120 に示すように、CHAIN1 と CHAIN0 を「CHNED」
にセットします。これらは ce0、ce1、cl0、cl1、z0、z1、ff0、
ff1 の比較条件をチェーン接続に設定します。
図 120. データパスのチェーン接続のコンフィギュレーション
19. SimpleCntr16_v1_0.v Verilog ファイルを開きます。
Verilog コードに 2 つのデータパスコンフィギュレーションがあ
ることに注意してください。これらの 2 つのデータパスはお互い
にチェーン接続され、16 ビットの PWM を形成します。次に、
Verilog 論理に使用できるために幾つかの信号を追加する必
要があります。
20. 25 行目またはその近くの「#start body」の後に、以下
のコードを加えます。
// Unused Datapath Connections
wire tc_lsb, cmp_lsb;
ハードウェアリンクは 8 ビット PWM のリンクと同様です。違い
は出力が 1 ではなく 2 ビット幅です。Chain0 と Chain1 をデー
タパス コンフィギュレーション ツールでチェーン接続したため、
出力の上位ビットが最終結果となります。例えば、z0 出力の
上位ビットは、2 つのデータパスの A0 レジスタの値がすべて
0 になる時点を示します。「tc」と「cmp」を上位ビットに割り当て、
ステップ 22 で定義した 2 本のワイヤを下位ビットに使用しま
す。これらのワイヤは使用されませんが、追加していないと、
シンセサイザが警告を出します。
21. .clk() を .clk(clk) に変更します。
22. .z0() を .z0({tc, tc_lsb}) に変更します。
23. .cl1() を .cl1({cmp, cmp_lsb}) に変更します。
www.cypress.com
文書番号: 001-89531 Rev. *A
46
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
24. .cs_addr(3'b0) を .cs_addr({2'b0,tc}) に変更
します。
PSoC3 における 16 ビット コンポーネントのヘッダー
ファイル
25. 「Save All」を選択して、すべての変更を適用します。
前述したように、16 ビット レジスタへの書き込みは、8 ビット レ
ジスタへの書き込みと違います。プロセッサとデータパス レジ
スタの間のエンディアンの相違を気にしなくてもかまわないた
め、8 ビット レジスタへ直接書き込むことができます。しかし、
16 ビット以上のレジスタに書き込む場合は、エンディアンの相
違を考慮しなければなりません。
コンポーネント準備が出来上がって、コンポーネントをプロジェ
クトで使用することが可能です。
26. AN82156_Appendix_Lib を 16bitCounter プロジェクトの
依存に設定します。
新しいコンポーネントはコンポーネント カタログに示されます。
コンポーネントの準備が完了し、それをプロジェクトで使用する
ことが可能です。
27. Cntr16 コンポーネントを回路図にドラッグします。
28. クロックを「clk」端末に接続させ、1MHz に設定します。
29. 図 122 に示すように、デジタル出力ピン コンポーネントを
「clk」、「tc」と「cmp」端末に接続します。
図 122. 簡単な 16 ビット PWM プロジェクト回路図
30. 上図のようにピンに名前を付けて、そしてそれらの名前に
基づいて P0[0]、P0[1]、P0[2]に割り当てます。
PSoC 3 の 8051 のエンディアン性は、ペリフェラル レジスタの
ものとは異なります。レジスタへの書き込みを単純化するため
に 、 Cypress は CY_SET_REG16 、 CY_SET_REG24 、
CY_SET_REG32 の幾つかのマクロを提供します。これらの
マクロは、最初のパラメーターとしてセットしたいレジスタ アドレ
ス、その後にセットしたい値を受けます。これらのマクロは必要
に応じて、エンディアン スワッピングを処理します。そのため、
データパス レジスタのアドレスを把握しなければなりません。
これらの定義の作成手順は前と同じです。しかし、1 つの違う
点があります。それは、定義で ((reg8 *) を (*(reg8
*) の代わりに使用します。これにより、データパス レジスタへ
のポインタが提供されます。_PTR を定義の名前に追加するこ
とはいい方法であり、これにより、識別することができます。
値を更新したい場合、CY_SET_REG16 とヘッダー ファイルで
定義したポインタを使用してください。これでは、本アプリケー
ション ノートに同梱されたサンプル プロジェクトを再度ご覧くだ
さい。
31. 「Save All」を選択して、プロジェクトをビルドして PSoC を
プログラムします。
図 123 に示すように、周期値と比較値が以前に作成した 8 ビット
PWM よりはるかに大きいことを出力で確認できます。それら
の値はどんな 16 ビットの値にも設定することが可能です。
図 123. 簡単な 16 ビット PWM の出力
cmp
clk
チェーン接続を使用して関数を 32 ビット幅に上げることも可能
です。この例で説明される原理をより幅広い関数に適用できま
す。
www.cypress.com
文書番号: 001-89531 Rev. *A
47
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
プロジェクト#3 – アップ/ダウンカウンター
2.
この例は、高度な機能をデータパス コンポーネントに追加する
手順を説明します。同様な基本的な PWM を変更して、カウン
トアップ/カウントダウンの機能を追加します。カウントアップ
/カウントダウンの方向は、ユーザーが設計時または実行中
に設定したパラメーターに基づいて決定します。
図 125 に示すように、Symbol Wizard を使用して新しい
コンポーネントを AN82156_Appendix_Lib に追加しま
す。この例ではコンポーネントに
「UpDwnCntrPwm_v1_0」の名を付けます。
図 125. アップ/ダウンカウンター用の新しいシンボルの作成
この例は、ユーザーが前述のサンプル プロジェクトで紹介され
た概念に精通していることを前提とします。本アプリケーション
ノートには、完成したアップ/ダウン PWM プロジェクトが同梱
されています。
追加詳細
簡単なダウンカウント PWM は 2 つの状態を使用しました。図
124 に示すように、アップ/ダウン カウンターを実装するため
に、4 つの状態が必要です。
図 124. アップ/ダウン カウンターの状態図
Count Dwn
Count Up
Count < X
Count != 0
3.
REG 000
Decrement
Count
REG 010
Increment
Count
図 126 に示すように、8 ビッ PWM コンポーネントのように
clk 入力と tc と cmp 出力を追加します。
図 126. アップ/ダウンカウンターへの端末追加
Count >= X
Count == 0
Count < X
Count != 0
REG 001
Reload
Count
Count == 0
REG 011
Clear
Count
Count >= X
データパスは、セットしたパラメーターによって A0 をデクリメン
トするか、またはインクリメントします。
サンプルプロジェクトのステップ
混乱を避けるために、以前のサンプル プロジェクトのコンポー
ネントを変更する代わりに、新しいコンポーネントを作成します。
コンポーネント作成の基本手順は同じです。
1.
PSoC Creator を起動し、簡単な 8 ビットの例で使用され
る「AN82156_Appendix」ワークスペースを開きます。
「UpDwnCntrPwm」という新しいプロジェクトをワークスペ
ースに追加します。
新しいワークスペースを起動することが可能ですが、この例で
は、ユーザーが以前と同じようなワークスペースを使用してい
ることを前提にします。これにより、ライブラリ管理と依存関係
が簡単になります。
www.cypress.com
4.
シンボル回路図のあるページを右クリックし、シンボルの
プロパティーを追加します。


Doc.APIPrefix = UpDwnCntrPwm
Doc.CatalogPlacement =
AN82156_Appendix/Digital/UpDwnCntrPwm

Doc.DefaultInstanceName =
UpDwnCntrPwm
カウンター期間、比較値、およびカウントアップ/カウントダウン
モードなどのユーザーが変更できるパラメーターを追加する必
要があります。
文書番号: 001-89531 Rev. *A
48
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
カウント モードの設定のために、新しいパラメーター タイプを
定義します。
5.
シンボル エディター ページを右クリックして Symbol
Parameters ダイアログを開きます。
6.
「Types」ボタンをクリックして、ウィンドウを開いて新しい
パラメーター タイプを作成します。
7.
緑色の「+」ボタンをクリックして新しいタイプを追加します。
その新しいタイプの名前を UpDwnCntrPwm_UpDwn と
します。
8.
図 127 に示しているように値を Enum Set フィールドに
入力して、「CountDwn」と「CountUp」を定義します。
11. 図 128 に示すように、すべての 3 つの新しいパラメーター
に対して Hardware フラグを「True」にセットします。
図 128. 新しいコンポーネント パラメーターの追加
図 127. 新しいコンポーネント パラメーター タイプの作成
12. OK をクリックしてコンポーネントへの変更を保存します。
13. シンボル エディター内の何も無い場所を右クリックして、
新しいコンポーネントシンボルの Verilog ファイルを生成し
ます (この時、すべての設定はデフォルトの値にします)。
14. 「Save All」を選択して、すべての変更を適用します。
15. データパス コンフィギュレーション ツールを起動して、作
成した UpDwnCntrPwm_v1_0.v ファイルを開きます。
最初の 2 つのコンフィギュレーションは、簡単な 8 ビット PWM
と同様ですが、アップカウント用にもう 2 つの追加コンフィギュ
レーションが必要です。
9.
OK をクリックして Symbol Parameters ダイアログに戻り
ます。
この新しいタイプにパラメーターを割り当て、0 (CountDwn) ま
たは 1 (CountUp) の初期値をセットすることができます。
10. 前の例と同じようにコンポーネントに 3 つの新しいパラ
メーターを追加します。表 10 と図 128 を参照してください。
表 10.アップ/ダウン カウンターのパラメーター
Name (名称)
タイプ
値
Compare_Value
uint8
4
Count_Mode
UpDwnCntrPWM_UpDwn
カウントダウン
Counter_Period
uint8
9
Count_Mode パラメーターは新しいタイプと値の定義を使用し
ます。
16. デ ー タ パ ス の コ ン フ ィ ギ ュ レ ー シ ョ ン を 新 規 作 成 し
「UpDwn」の名を付けます。「cy_psoc3_dp8」タイプを使
用します。
17. 表 11 のように CFGRAM セクションをコンフィギュレーシ
ョンします。
表 11.例 3 のデータパス コンフィギュレーション
REG
FUNC
SRCA
SRCB
SHIFT
A0 WR SRC
000
DEC
A0
D0
PASS
ALU
001
PASS
A0
D0
PASS
D0
010
INC
A0
D0
PASS
ALU
011
XOR
A0
A0
PASS
ALU
XOR コンフィギュレーションはカウント レジスタをクリアするた
めに使用されます。カウント レジスタは周期値に達した後、そ
れ自身の XOR を取ります。すると、カウントが 0 にクリアされ
ます。
18. 簡単な 8 ビット PWM のように、CMP SELA フィールドを
「A0_D1」にセットして、D1 を比較値として設定します。
以前、ユーザーが調整できる幾つかのパラメーターを追加しま
した。Verilog ファイルを手動で修正して変更する必要がない
ようにそれらの名前を「Initial Register Values」フィールドに入
力します。
www.cypress.com
文書番号: 001-89531 Rev. *A
49
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
8 ビット PWM の場合のように、この例では、
「Counter_Period」と「Compare_Value」をパラメーターの名
前にします。
19. 図 129 に示しているように Initial Register Values ウィン
ドウを開いて、パラメーター名を A0、D0、および D1 に加
えます。
図 129. 「Initial Register Values」のパラメーター使用
assign upDwn=control[CNTL_CNT_UP_DWN];
// Logic for the 'reload' signal
assign reload = ( upDwn ) ? ( up_reload ) :
( zero_detect );
//assign termnical count output
assign tc = reload;
// Control register instance. This text is
// found in the Component Author Guide.
cy_psoc3_control #(.cy_init_value
(Count_Mode), .cy_force_order(`TRUE))
pwmCntlReg(
/* output [07:00] */ .control(control)
);
24. データパス論理に以下のリンクを作ります。





20. OK をクリックして変更点を保存し Verilog ファイルに適用
します。
21. 変更を保存して、データパス コンフィギュレーション ツー
ルを閉じます。
次に、これらの機能を実装するために幾つかの Verilog コード
をコンポーネントに追加する必要があります。
22. UpDwnCntrPwm_v1_0.v ファイルを開いて、以下のテキ
ストを見つけます。
// Your code goes here
ここまで、これらの変更しましたが、何が行われているか分か
るようにこれらの変更点について簡単に説明しましょう。まず、
実行時にコードによりカウント方向を変更できる制御レジスタ
(cy_psoc3_control)を追加しました。制御レジスタおよび異
な っ たオプションの詳細については、 「Component Author
Guide」を参照してください。
メインコードから方向を制御したい場合、制御レジスタの定義
をヘッダー ファイルに加えてください。例として、添付されたプ
ロジェクトを参照してください。
次に、.cs_addr が制御 1 ビットではなく、制御 2 ビットを持つこ
とに注意してください。前述の例では、データパスに 2 状態の
みがあるため、制御 1 ビットで充分です。ここでは状態が 4 つ
あるため、制御 2 ビットが必要です。
23. そしてそのテキストを以下部分で置き換えます。
// Control Register "pwmCntlReg" bits
localparam CNTL_CNT_UP_DWN = 0;
// Compare0 less than signal
wire up_reload;
//Zero Detect Signal
wire zero_detect;
// Up/down control
wire upDwn;
// Signal to control reload of counter
wire reload;
.clk() を .clk(clk) に変更します。
.cs_addr(3'b0) を .cs_addr({1'b0,
upDwn, reload}) に変更します。
.ce0() を .ce0(up_reload) に変更します。
.z0() を .zo(tc) に変更します。
.cl1() を .cl1(cmp) に変更します。
さらに、データパス コンフィギュレーションを制御する時、「tc」
信号のみを使用する代わりに「reload」信号を使用することに
注意をしてください。こうすることが必要な理由は、カウントアップ
もするので、ZDET を使用するだけでは、周期の終わりを示す
ことができないためです。ce0 比較を使用する必要があります。
そのため、カウンターはアップカウンターとして設定されると、
A0 の値が D0 に格納された周期値に等しくない限り、カウント
アップし続けます。カウンターが、D0 と等しくなるとレジスタの
リロードをトリガーします。
// Control register signals
「upDwn」信号はカウントアップの動作 (INC, XOR) かカウント
ダウンの動作 (DEC, Load) を行うかを制御します。
wire [07:00] control;
25. すべての変更を Verilog ファイルに保存します。
// Up/down control
www.cypress.com
文書番号: 001-89531 Rev. *A
50
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
Verilog ファイルを変更した後、コンポーネントの準備が完了し、
コンポーネントをプロジェクトに使用することができます。最初
のサンプル プロジェクトと同じすべてのコンポーネントを追加し
ます。
26. AN82156_Appendix_Lib を UpDwnCntrPwm プロジェ
クトに依存したものとして加えます。
31. プロジェクト回路図に戻り、UpDwnCntrPwm コンポーネ
ントをダブルクリックしてプロパティー ダイアログを開きま
す。
32. 図 132 に示すように Count_Mode を「Count Up」に変
更します。
図 132. アップ カウントへの PWM の設定
27. UpDwnCntrPwm コンポーネントをプロジェクト回路図にド
ラッグします。
28. クロック コンポーネントをコンポーネントの「clk」端末に接
続して 10kHz に設定します。
29. 図 130 に示すようにデジタル出力ピン コンポーネントをコ
ンポーネントの P0_0_clk、P0_1_tc、P0_2_cmp 端末に
接続します。
図 130. アップ/ダウンカウンター PWM プロジェクトの回路図
33. OK をクリックして変更を適用します。
30. 「Save All」を選択して、プロジェクトをビルドして PSoC を
プログラムします。
34. 「Save All」を選択して、プロジェクトをビルドして PSoC を
プログラムします。
デフォルトの比較値を 4 に、周期値 9 に設定します。これは、
プロジェクトに追加されたピンを使用して観測することができま
す。
図 133 に示すように、TC の後にカウンターが 0 でリロードさ
れる時 cmp 値が HIGH になるため、アップ カウンターを確認
できます。
図 131. ダウン カウント PWM の波形
図 133. アップ カウント PWM の波形
簡単な PWM の例で行ったように、周期値と比較値を変更す
ることができます。PWM がカウントダウンする代わりにカウン
トアップするようにモード パラメーターを変更することも可能で
す。
TC の後に出力が HIGH になる理由は、カウントの開始値が
比較値より小さく、その後インクリメントされるためであることに
注意してください。Down モードの始まりに出力が LOW になる
理由は、カウントの開始値が比較値より大きく、その後デクリメ
ントされるためです。
www.cypress.com
文書番号: 001-89531 Rev. *A
51
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
cl0
5
z1
6
3
cl1
ff1
図 134. シフター ブロック
sor
sol_msb
7
このコンポーネントのデータパスの使用方法は簡単です。デー
タパスの動作は、F0 から 値を A0 にシフトしロードするだけで
す。図 134 に示すように、ALU の出力に 1 個のシフターがあ
ります。
ce1
ov_msb
co_msb
cmsb
f0_bus_stat
f0_blk_stat
f1_bus_stat
f1_blk_stat
Output Mux (6 - 16 to 1)
T X U AR T コ ン ポ ー ネ ン ト の 詳 細
ff0
4
z0
2 1
ce0
0
図 136. データパス出力マルチプレクサ図
8
このサンプル プロジェクトは、簡単な TX UART を単一のデー
タパスで作成することをデモします。ここではコンポーネントの
作成の各ステップについて説明しません。その代わりに、関連
したプロジェクトにおいてコンポーネントと Verilog ファイルをご
覧ください。完成した AN82156_Appendix_Lib サンプル プ
ロジェクトで「Simple_Tx」というコンポーネントを検索します。
このコンポーネントの使用方法を示す例は「SimpleTx」プロジ
ェクト内の同じワークスペースに含まれています。
データパス出力マルチプレクサには 1 本のみのシフトアウト
(SO)出力があります。図 136 に示すように、この出力は、右シ
フトアウトと左シフトアウトの間で共有されます。
15 14 13 12 11 10 9
プロジェクト#4 – 簡単な UART
6
dp_out[5:0]
このマルチプレクサを適切に設定しなければなりません。この
設定は、図 137 に示すように、CFG15-14 SHIFT SEL の下
の静的コンフィギュレーション (Static Configuration) で行われ
ます。
シフターはビットを左または右にシフトし、ニブル交換が可能で
す。データパスの各コンフィギュレーションは独立してシフター
の動作を設定することができます。図 135 に示すように、この
オプションは、データパス コンフィギュレーション ツールの動的
コンフィギュレーション領域でセットされます。
図 137. SHIFT SEL コンフィギュレーション
図 135. シフト動作設定
この例では、データパスのコンフィギュレーションを制御する
Verilog ステート マシンを作成します。このステート マシンは、
UDB PLD で実装され、UART (スタートビット、データ、あるい
はストップ ビット) 送信のどの部分が次に送信されるかを決め
ます。
Verilog コードで、以下のコード行を探します。
reg
[1:0]
state;
// Main state
machine variable and datapath control
データパスの入出力を見ると、state は CS_Addr を制御する
ために使用されることが分かります。
/*
input
[02:00]
.cs_addr({1'b0, state}),
www.cypress.com
文書番号: 001-89531 Rev. *A
*/
52
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
データパス コンフィギュレーション/命令の値は Verilog のケ
ースのステートメントで実装されるステート マシンにより変更さ
れます。
ステート マシンは状態4つのみを持っています。これらの 4 ス
テートはデータパスのコンフィギュレーションを制御するために
使用されます。そのため、データパスは4種の個別のコンフィギ
ュレーションを必要とします。
case (state)
表 12.簡単な Tx データパス コンフィギュレーション
STATE_IDLE:…
STATE_START:…
STATE_DATA:…
STATE_STOP:…
endcase
REG
FUNC
SRCA
SHIFT
A0 WR SRC
000
Pass
A0
なし
なし
001
Pass
A0
なし
なし
010
Pass
A0
なし
F0
011
Pass
A0
SR
ALU
これらのケースはそれぞれ以下の通りに定義されます。
コードが Verilog ステート マシンを通ることによって、データパ
スのコンフィギュレーションが変更されます。これは一般的な使
用方法です。殆どの複雑なコンポーネントは、データパスのコ
ンフィギュレーションを順序付けるために Verilog ステート マシ
ンを必要とします。
// Main State machine states
// Idle / Stop bit 1
localparam STATE_IDLE
// Stop bit 2
localparam STATE_STOP
// Start bit
localparam STATE_START
// Data
localparam STATE_DATA
= 2'b00;
= 2'b01;
図 138 に簡単な TX Verilog ステート マシンの動作を示します。
= 2'b10;
= 2'b11;
図 138. TX UART Verilog フローチャート
!Enable || fifoEmpty
DP: Reg0 (IDLE)
TX Pin: High
000
IDLE
Enable && !fifoEmpty
DP: Reg2: LOAD A0 from F0
TX Pin: Low
DP: Reg1: IDLE
TX Pin: High
001
STOP
bitCnt == 7 &&
!TWO_STOP_BITS
bitCnt==7 &&
TWO_STOP_BITS
010
START
011
DART
DP: Reg3: Shift A0 (011)
TX Pin: Shifter
bitCnt ! = 7
まず、ステート マシンは、fifoEmpty ステータス ビットを監視す
ることで、新しいデータが FIFO に書き込まれるのを待ちます。
新しいデータが入った後、TX ラインを LOW にすることで、
START ビットを送信します。この状態では、データパスは F0
内の値を A0 にロードします。
www.cypress.com
次の状態で、データパスは A0 のデータをシフトアウトします。
これが完了した後、ストップビットを送信します。1 つか 2 つの
ストップビットを送信することができます。
文書番号: 001-89531 Rev. *A
53
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
データ状態にある時は、データをシフトアウトします。Start 状
態は、TX ラインを LOW に、Stop および IDLE 状態は TX ラ
インを HIGH にします。これは以下の Verilog コードにより実
行できます。
// This next statement determines the tx
output. if in data state, output the
shift register output "srOut", else
output a low during the start state, and
a high during stop state.
assign tx = (state[1:0] == STATE_DATA ) ?
srOut : ( !state[1] );
ステート マシンは、Data 状態にない場合、「state」の msb の
反対符号のものを TX ラインに駆動します。Start 状態では、
msb が 1 のため、「0」を出力します。Stop および IDLE 状態
では、最上位ビットが 0 であるため、「1」を出力します。
プロジェクト#5 – パラレル入力とパラレル出力の
例
本サンプル プロジェクトでは、データパスのパラレル入力とパ
ラレル出力の使用方法をデモします。デモするために 8 ビット
並列加算器を 1 つ使用します。加算器はパラレル入力 (PI) か
ら 8 ビット パラレル値を読み出して、その値を A1 に格納しま
す。次に、A1 に格納する値を取得して D0 に格納される固定
値を追加します。その後、その値はパラレル出力 (PO) で出力
されます。
図 140. 並列加算器の実装
CS_ADDR
[2:0]
CFGRAM
F0
F1
D0
D1
A0
A1
A0, A1
A0, A1,
D0
D0, D1
このプロジェクトの main コードは 2 ストップ ビットでコンポーネ
ントを有効にしてから、9600 ボーで値 0~10 を連続して送信
します。レシーバーを 9600 ボーおよび 2 ストップ ビットにコン
フィギュレーションします。
ブリッジ コントロール パネル (BCP) というプログラムが
PSoC Creator のインストールに含まれています。BCP を使用
して RX キャラクタを受信することができます。BCP でも、TX
出 力 が 接 続 す る COM ポ ー ト に 接 続 し ま す 。 Tools >
Protocol Configuration では、図 139 のように RX8 (UART)
をコンフィギュレーションします。
PI
図 139. BCP RX8 のコンフィギュレーション
PO
ALU
(Pass)
(Add)
CS_ADDR = 000 (Pass P1 to A1)
CS_ADDR = 001 (Add A1 to D0, Store in A0)
この例は、ユーザーが前述のサンプル プロジェクトに説明され
た概念に精通していることを前提とします。1 つの完成した
tPI_PO_Example プロジェクトがこのアプリケーション ノートに
含まれています。
BCP のエディターでは、次のテキストを加えます: rx8 x x x x x
x x x x x x。これは、選択した COM ポートから 11 バイトを読
み出します。引き続きデータを受信するために「Repeat」ボタ
ンを押すことができます。
www.cypress.com
サンプル プロジェクトの手順
混乱を避けるために、以前のサンプル プロジェクトのコンポー
ネントを変更する代わりに、新しいコンポーネントを作成します。
コンポーネント作成の基本手順は同じです。
文書番号: 001-89531 Rev. *A
54
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
1.
PSoC Creator を起動し、簡単な 8 ビットの例で使用され
る「AN82156_Appendix」ワークスペースを開きます。
「PI_PO_Example」という新しいプロジェクトをワークスペ
ースに追加します。
9.
データパスのコンフィギュレーションを新規作成し「adder」
と名付けます。「cy_psoc3_dp」タイプを使用します;図
142 を参照してください。
図 142. データパス選択
新しいワークスペースを起動することが可能ですが、この例で
は、ユーザーが以前と同じようなワークスペースを使用してい
ることを前提にします。これにより、ライブラリ管理と依存関係
が簡単になります。
2.
Symbol Wizard を 使 用 し て 新 し い コ ン ポ ー ネ ン ト を
AN82156_Appendix_Lib に追加します。この例ではコ
ンポーネントに「Parallel_Adder_v1_0」の名を付けます。
3.
clk 入力と Parallel_In[7:0]入力 (これは 8 ビット入力を定
義) を追加します。図 141 に示すように、Parallel_Out[7:0]
出力も定義します。
図 141. 並列加算器用の端末を追加
この選択肢ではデータパスの PI と PO 信号へアクセスするこ
とができます。その他の 4 つのインスタンス タイプは PI と PO
へのアクセスを許可しません。
cy_psoc3_dp は 8 ビットのみのインスタンスです。8 ビット以
上必要な場合、これらのインスタンスを 2 つ以上配置し、
Verilog で変更する必要があります。付録 D にそれらをチェーン
接続して、24 ビットのデータパスを構成する例を示します。
10. 表 13 のように CFGRAM セクションをコンフィギュレー
ションします。
表 13. 例 5 のデータパス コンフィギュレーション
4.
シンボル回路図のあるページを右クリックし、シンボルの
プロパティーを追加します。


Doc.APIPrefix = Parallel_Adder
Doc.CatalogPlacement =
AN82156_Appendix/Digital/Parallel_Adder

5.
Doc.DefaultInstanceName = Parallel_Adder
Add_Value という新しいシンボル パラメーターを追加し、
タイプを uint8 にセットし、Hardware を True にセットしま
す。
6.
シンボル エディター内の何も無い場所を右クリックして、
新しいコンポーネントシンボルの Verilog ファイルを生成し
ます (この時、すべての設定はデフォルトの値にします)。
7.
「Save All」を選択して、すべての変更を適用します。
8.
データパス コンフィギュレーション ツールを起動して、作
成したばかりの Parallel_Adder_v1_0.v ファイルを開きま
す。
REG
FUNC
SRCA
SRCB
A0 WR
SRC
A1 WR
SRC
CFB EN
000
PASS
A0
D0
なし
ALU
ENBL
001
ADD
A1
D0
ALU
なし
DSBL
最初のコンフィギュレーション (REG 000) は PI の値を取得し
て、それを A1 に格納します。2 番目のコンフィギュレーション
(REG 001) は A1 に格納された値を取得して、それに D0 を
追加し、A0 に格納します。
次に、PI 制御をコンフィギュレーションします。
12. 図 143 に示すように、CFG15-14 フィールドで、PI DYN
のフィールドを右クリックし、Enable Bit を選択します。
図 143. 動的な PI 制御を有効にする
13. PI DYN を EN にセットします。
www.cypress.com
文書番号: 001-89531 Rev. *A
55
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
これにより、SRCA 入力を PI、と A0 または A1 から動的に選
択することができます;図 144 を参照してください。
図 144. SRCA マルチプレクサ
always @( posedge clk )
begin
case (state)
/* Datapath loads in value from PI to A1,
the value in A0 is latched to PO*/
STATE_LOAD:
begin
state <= STATE_ADD;
/*we must latch the PO value here, because
in the next state PO is not valid*/
Parallel_Out <= po;
end
STATE_ADD:
begin
state <= STATE_LOAD;
end
endcase
このマルチプレクサの選択は CFGRAM で、ビット CFB EN で
制御されます。このビットが DSBL にセットされた場合、SRCA
入力は A0 と A1 のいずれかから取得されます。ENBL にセッ
トされた場合、SRCA 入力は PI から取得されます。
表 13 を見ると、最初のコンフィギュレーションでは、CFB EN
は ENBL にセットされます。これは SRCA が PI から取得され
ることを意味します。よって、最初のコンフィギュレーションでは
データパスは PI から A1 に値を渡します。
2 番目のコンフィギュレーションでは、CFB EN は DSBL にセット
されます。これは SRCA 入力が CFGRAM により制御され、こ
の場合には A1 にセットされることを意味します。
14. D0 の初期値を Add_Value にセットします。
15. 変更を保存して、データパス コンフィギュレーション ツー
ルを閉じます。
次に、これらの機能を実装するために幾つかの Verilog コード
をコンポーネントに追加する必要があります。
16. Parallel_Adder_v1_0.v ファイルを開いて、以下のテキス
トを見つけます。
//
Your code goes here
17. そのテキストを以下部分で置き換えます。


.clk() を .clk(clk) に変更します。
.cs_addr(3'b0) を .cs_addr({2'b0,
state}) に変更します。


.pi() を .pi(Parallel_In) に変更します。
.p0() を .p0(po) に変更します。
2 つのデータパスのコンフィギュレーション間をトグルする 2 ス
テートのステート マシンを作成しました。1 つ目のコンフィギュ
レーションは PI 上の値を取得して、それを A1 に格納します。
2 つ目は A1 に格納される値を取得して、それを D0 に追加し、
その値を A0 に格納します。
A1 と A0 のいずれを選択しても、PO はその選択したレジスタ
に接続します。A0 が SRCA のために選択された時にのみ結
果が有効なため、適切なタイミングに PO を登録する必要があ
ります。下記はこのラインに必要なものです。
Parallel_Out <= po;
/* Register to hold state of statemachine*/
reg state;
wire[7:0] po;
/*State loads the value from the PI into
A1, latches value in A0 out to PO*/
localparam STATE_LOAD = 2'b00;
/*State adds the value in A1 toD0and stores
in A0*/
localparam STATE_ADD = 2'b01;
/*State machine is always run on positive
edge of clock*/
www.cypress.com
18. データパス論理に以下のリンクを作ります。
PO から値を直接取得して、Parallel_Out 信号 (コンポーネン
ト出力) に格納します。次の状態では、SRCA が A1 として選
択されたため、PO は有効ではありません。よって、PO をロー
ド状態で登録する必要があります。
19. すべての変更を行った後、Save All (すべて保存)を行い
ます。
20. AN82156_Appendix_Lib を PI_PO_Example プロジェク
トに依存したものとして加えます。
21. 回路図に Parallel_Adder をドラッグします。
22. 図 145 のように回路図を構成します。
文書番号: 001-89531 Rev. *A
56
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
図 145. 並列加算器回路図
P6_1 と P15_5 はデジタル入力ピン コンポーネントであり、抵
抗プルアップとしてコンフィギュレーションされます。
P6_3、P6_2 と P0_7 はデジタル出力ピン コンポーネントです。
ワイヤに名前を付けるには (図 146 を参照):
a. [Wire] (ワイヤ) をダブルクリックします。
b. Use Computed name and width チェックボックスから
チェックを外します。
c. Specify Full Name チェックボックスにチェックを入れます。
d. ネット (ワイヤ) の名前を入力して、Indices があるのかを
選択します。
SW2 は入力のビット 0 を表示し、SW3 は入力のビット 1 を表
示します。
押されたスイッチがない場合 LED3 (ビット 1) は点灯する必要
があります。これは D0 が 2 という値を持っているためです。
SW2 を押すと LED 4 と LED 3 の両方は点灯し、3 という値を
示します。
これはデータパスの PI 及び PO を使用する方法をデモする非
常に簡単な例です。ここまで、これらの信号を使用して PI と
PO でより複雑なデザインを作る方法を身につけました。
図 146. ワイヤ名付けダイアログ
この回路図は特に CY8CKIT-030 と CY8CKIT-050 向けに設
計されます。別のハードウェア プラットフォームを使用している
場合ピン配置を変更する必要があります。
23. コンポーネント カスタマイザ内で Add_Value を 2 にセット
します。
24. CY8CKIT-050 または CY8CKIT-030 上でワイヤ P0_7 と
LED2 の間に配置します。
25. 「Save All」を行い、プロジェクトをプログラムします。
ボタンと LED は簡単な加算器がどのように動作するかを示し
ます。LED 4 は出力のビット 0 を表示し、LED 3 はビット 1 を
表示し、LED 2 はビット 2 を表示します。
www.cypress.com
文書番号: 001-89531 Rev. *A
57
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
付録 B – データパス コンフィギュレーション ツールのチートシート
本節では、データパス コンフィギュレーション ツールと基礎となるデータパス ハードウェアとの関係を示します。
GUI は、図 147 に示すように動的コンフィギュレーションと静的コンフィギュレーションの 2 つのセクションに分けられています。

動的コンフィギュレーション – データパスを異なる状態で異なる動作をするように設定することが可能

静的コンフィギュレーション – すべての状態で同様に動作
図 147. データパス コンフィギュレーション ツール インターフェースのセクション
Dynamic Configuration
Static Configuration
www.cypress.com
文書番号: 001-89531 Rev. *A
58
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
図 148. データパス ブロック図
8-bit Datapath
8-bits
parallel I/O
In/Out FIFOs
f1_blk_stat
f1_bus_stat
f0_blk_stat
f0_bus_stat
F1
8
PO 8
PI
F0
Output Mux
A0
cmsbi
cfbo
co_msb-1
co_msb
co_msb_reg
srcb
cmsbo
cfbi
ALU
ALU
sor
sol_msb
ci
z1
ov_msb
co_msb
cmsb
f0_bus_stat
f0_blk_stat
sol_msb
sol_msb_reg
sil
sir
sor_reg
sor
Shift
8
Mask
1
3
cl1
ff1
cfb_en
srca
ce1
5
A1
6
16
ff0
4
z0
2
cl0
8
f0_ld
f1_ld
d0_ld
d1_ld
ci
si
D0
7
Accumulators
ce0
Sink
Source
15 14 13 12 11 10 9
Input Mux
(9 6-to-1)
dp_in[5:0]
D1
f1_bus_stat
f1_blk_stat
Output Mux (6 - 16 to 1)
rad0
rad1
rad2
Control
RAM
8x16
Dynamic
Configuratio
n RAM
Input Mux
0
Data Registers
6
dp_out[5:0]
amask
out
cmsb
A0
A0
z0
z1
ZDET
ZDET
A0
ff0
ff1
ov_msb
www.cypress.com
D0
z0i
ce0
CMP ==
ce0i
z1i
cl0
CMP <
cl0i
A1 A0
A1
ff0i
FFDET
co_msb-1
D1 A0
cmask1
ff1i
FFDET
co_msb
cmask0
Conditions
A1
ce1
CMP ==
ce1i
cl1
CMP <
cl1i
OVDET
文書番号: 001-89531 Rev. *A
59
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
動的コンフィギュレーション RAM (CFGRAM) セクション
動的コンフィギュレーションセクションは動的コンフィギュレーション RAM を表示するものです。8 つのコンフィギュレーション/命令の
データパスの動作をコンフィギュレーションします。以下の表は GUI 内の各フィールドの機能を示します。
表 14.データパス コンフィギュレーション ツールの CFGRAM セクション
静的コンフィギュレーションの RAM セクション
データパス コンフィギュレーション ツール
データパス ブロック図
www.cypress.com
文書番号: 001-89531 Rev. *A
60
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
表 15. 動的なコンフィギュレーションのセクションのカラムの説明
動的コンフィギュレーションのセクション
Reg
このカラムは、行が該当する「コ
ンフィギュレーション/命令」を示
す。3 CFGRAM アドレス信号の
値がどのコンフィギュレーション
が選択されるかを決定するため、
それぞれのコンフィギュレーショ
ンに適切な行を選択
RAM Address 000
RAM Address 001
RAM Address 010
RAM Address 011
FUNC
このカラムは、8 つ ALU 機能の
中でどれがそのコンフィギュレー
ションで実行されるかを決定
FUNC
A
A+1
A-1
A+B
A-B
A^B
A&B
A|B
PASS
INC
DEC
ADD
SUB
XOR
AND
OR
SRCA
このカラムは ALU の「SRCA」入
力のソースを決定
A1
A0
A1
A0
A0
A1
D1
D0
A1
A0
D1
D0
A1
A0
D1
D0
A1
A0
D1
D0
A1
A0
A0
A1
D0
D1
PASS
<<
SL
>>
SR
SWAP
SRCA
PI も SRCA のソースになること
が可能。 表 19 (CFG 15-14) を
参照してください。
SRCB
このカラムは ALU の srcb 入力
のソースを決定
SRCB
SHIFT
このカラムはシフトブロックの機
能を決定
SHIFT
A0 WR SRC
このカラムは、ALU 演算が完了
した後の A0 レジスタの値を決定
www.cypress.com
A0 WR
SRC
F1
F0
D1
D0
A1
A0
F1
F0
D1
D0
A1
A0
F1
F0
D1
D0
A1
A0
F1
F0
D1
D0
A1
A0
ALU
D0
F0
NONE
文書番号: 001-89531 Rev. *A
61
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
表 15. 動的なコンフィギュレーションのセクションのカラムの説明 (続き)
動的コンフィギュレーションのセクション
A1 WR SRC
このカラムは、ALU 演算が完了
した後の A1 レジスタの値を決定
A1 WR
SRC
F1
F0
D1
D0
A1
A0
F1
F0
D1
D0
A1
A0
F1
F0
D1
D0
A1
A0
F1
F0
D1
D0
A1
A0
ALU
D1
F1
NONE
CFB EN
CRC コンフィギュレーション イ
ネーブル – 以下の PI DYN を参
照してください。
CFG15 と CFG14 レジスタ
表 19. CFG15 と CFG14 レジス
タの定義
CI SEL、SI SEL、CMP SEL
キャリーイン セレクト、シフトイン
セレクトおよびコンペア セレクトそ
れぞれには A と B という 2 つの
コンフィギュレーション オプション
がある。各コンフィギュレーション
に適切なオプションを選択するこ
とが可能
CFGA
CFGB
CFGA
CFGB
CFGA
CFGB
詳細は表 18 を参照してくださ
い。
www.cypress.com
文書番号: 001-89531 Rev. *A
62
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
静的コンフィギュレーションのセクション
静的コンフィギュレーションのセクションは、表 16、表 17、表 18、表 19 および表 20 に示すように、CFG9~CFG17 データパス レジス
タを表示します。それらのレジスタは、シフト方向、マスキング、FIFO コンフィギュレーションおよびチェーニングの静的な機能を制御し
ます。
CFG9 レジスタ
表 16. CFG9 レジスタの定義
AMASK の値
データパス コンフィギュレーション ツール

AMASK 値 – このフィールドはデータパス ALU ブロックに適用される 8 ビット マスク値を含む。シフトレジスタの出力はこのレジスタの値
と AND される。この機能はデフォルトで無効。それを有効にするには CFG12 の AMASK EN ビットをセットする必要がある
データパス ブロック図
www.cypress.com
文書番号: 001-89531 Rev. *A
63
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
CFG11 と CFG10 レジスタ
表 17. CFG11 と CFG10 レジスタの定義
CMASK0 と CMASK1 の値
データパス コンフィギュレーション ツール

CMASK0 と CMASK1 – これらのフィールドは、コンパレータ ブロック入力と共に使用されるマスク値をセット。比較の前に、A0 または A1 レジス
タの値はこれらのレジスタの値と AND される。それらを有効にするためには、CMASK0 EN と CMASK1 EN ビットを CFG12 でセットする必要が
ある (表 18)
データパス ブロック図
www.cypress.com
文書番号: 001-89531 Rev. *A
64
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
CFG13 と CFG12 レジスタ
表 18. CFG13 と CFG12 レジスタの定義
CFG13-12 コンフィギュレーションの選択
データパス コンフィギュレーション ツール
CFG13-12 の詳細
CMP SEL B と CMP SEL A
A1_D1: A1 < D1、A1 == D1
比較ブロック 1 の比較 B と比較 A オプショ
ンをコンフィギュレーション。RAM コンフィギ
ュレーションの CMP SEL フィールドは所与
のサイクルに対してオプション A と B のど
ちらが有効であるか決定
A1_A0: A1 < A0、A1 == A0
A0_D1: A0 < D1、A0 == D1
A0_A0: A0 < A0、A0 == A0
注: ブロック 0 を比較する場合、D0 とマス
クされた A0 の値しか比較できない
CI SELB と CI SEL A
ARITH: キャリーは ALU 算術によって制御される
キャリーインのソースを選択
REGIS: キャリーインは、以前のサイクルで登録したキャリーアウト
ROUTE: キャリーインはデータパスの入力 (複数) から 1 個選ばれる
CHAIN: キャリーインはチェーン内の以前のデータパスから駆動される
CMASK0 EN、CMASK1 EN、AMASK
EN
比較 1 と比較 0 ブロックのマスク (右図に
示される) と ALU の出力でのマスク ブロッ
ク (示されない) を有効にする表 16 と表 17
を参照してください。
DEF SI
DEF_0: 0
デフォルトのシフトイン値が 0 または 1 で
あるかを定義。SI SELB または SI SELA
が DEFSI に設定される必要があることに
注意してください。
DEF_1: 1
SI SELB と SI SEL A
DEFSI: DEF SI の定義に応じて、シフトイン値は 0 または 1
A と B のシフトインコンフィギュレーション用
のシフトイン ソースを選択
REGIS: シフトインは、以前のサイクルのシフトアウト
ROUTE: シフトインはデータパス入力から選ばれる
CHAIN: シフトインはチェーン内の前のデータパスにより駆動される
www.cypress.com
文書番号: 001-89531 Rev. *A
65
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
CFG15 と CFG14 レジスタ
表 19. CFG15 と CFG14 レジスタの定義
CFG15-14 コンフィギュレーションの選択
データパス コンフィギュレーション ツール
CFG15-14 の詳細
PI SEL
ACC: ソース A は動的な設定領域内の選択肢により供給される
SRCA 用のマルチプレ
クサ入力を制御。その
入力は Dynamic
Config での SRCA オ
プションにより、または
並行入力から供給され
る
PIN: ソース A はデータパスへのパラレル入力により供給される
シフト SEL
SL:sol_msb が出力として選択される
データパス出力マルチ
プレクサでシフトアウト
信号の選択を制御
SR: sor が出力として選択される
PI DYN
DS: PI マルチプレクサはレジスタ内の PI SEL ビットを使用して静的に制御される
ALU ASRC 入力にパ
ラレル入力 (PI) マル
チプレクサ選択の動的
制御を有効にする
MSB SI
算術右シフト処理をサ
ポート
www.cypress.com
EN: PI マルチプレクサは CFB_EN ビットを使用して動的に制御される (PI SEL が「0」と前提にする)。このビットが
セットされ、CFB_EN が「0」の場合、ALU ASRC 入力は A0 または A1 で、CFB_EN が「1」の場合、ALU
ASRC 入力は PI からルーティングされる
REG: 選択のデフォルト シフトは DEF SI 値 (CFG12、表 18) により定義される
MSB: 値のデフォルト シフト (SELA[1:0]/SELB[1:0]では「00」選択肢として定義)を現在に定義される MSB
(CFG14 内の MSB EN と MSB SEL フィールド) で上書きする
文書番号: 001-89531 Rev. *A
66
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
CFG15-14 の詳細 (続き)
F1 INSEL と F0 INSEL
FIFO 1 と FIFO 0 の入力ソース
を定義
バス: FIFO 入力は CPU
バスで、FIFO 出力
は A0 または D0 レ
ジスタ
A0: FIFO 入力が A0。
FIFO 出力が CPU
BUS
A1: FIFO 入力が A1。
FIFO 出力が CPU
BUS
ALU: FIFO 入力が ALU
。FIFO 出力が CPU
BUS
MSB EN と MSB SEL
ALU 出力の MS ビットを変更す
ることが可能。これらの 2 つのコ
ンフィギュレーションにより、この
機能を無効/有効にし、どのビッ
トが MS ビットであるかを選択す
ることが可能になる
Chain CMSB
CRC MSB にチェーン内の次の
データパス ブロックからこのブロ
ックにチェーン接続することを許
可
Chain FB
CRC MSB にチェーン内の先行
のデータパス ブロックからこのブ
ロックにチェーン接続することを
許可
チェーン 1 とチェーン 0
CL0、CL1、CE0、CE1、Z0、Z1、
FF0 と FF1 の出力がチェーン接
続されるかを定義
www.cypress.com
MSbit がビット 7 以
外のものに変更さ
れると、シフトイン、
シフトアウトおよび
キャリーアウトはす
べてそれに応じて
変更される
CRC MSB 信号の流れは MS ブロックから LS ブロックまで。このデータパスが CRC 演算の最上位ビッ
トを含まない場合、このビットをセット
NOCHN: CRC MSB はチェーン接続されない
CHNED: CRC MSB はチェーン内の次のデータパス ブロックからチェーン接続される
CRC FB 信号の流れは LS ブロックから MS ブロックまで。このデータパスが CRC 演算の最下位ビット
を含まない場合、このビットをセット
NOCHN: CRC フィードバックはチェーン接続されない
CHNED: CRC フィードバックはチェーン内の前のデータパス ブロックからチェーン接続される
チェーン接続 (CHNED) にセットされると、以前のデータパスの条件はこのデータパスにチェーン接続さ
れる。チェーン 0 は CL0、CE0、Z0 および FF0 条件に影響を与える。チェーン 1 は CL1、CE1、Z1 と
FF1 条件に影響を与える
文書番号: 001-89531 Rev. *A
67
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
CFG17 と CFG16 レジスタ
表 20. CFG17 と CFG16 レジスタの定義
FIFO のコンフィギュレーション
データパス コンフィギュレーション ツール


ADD SYNC – 追加の同期フリップフロップが FIFO ブロックステータス信号に追加されるか否かを決定。これは、バス クロック分解能で読み書き間の
サイクル タイミング、およびデータパス出力配置上の新しいステータスのアサートを制御。両方の FIFO のためにこれを制御する唯一のコンフィギュレ
ーション ビットがある。次のページの「FIFO のコンフィギュレーション」節を参照してください。
NONE: FIFO ブロック ステータスの出力にフリップフロップを追加しない
ADD: FIFO ブロック ステータスの出力にフリップフロップを追加しない
F1 DYN – FIFO1 方向が動的か静的であるかを制御。静的モードでは、F1_SEL[1:0]ビットは FIFO 読み出しと書き込みアクセスを制御。このビットが
静的モードのためにセットされた場合、2 つのコンフィギュレーションがある: FIFO がデータパスにより読み出されるおよび書き込まれることが可能な内
部アクセス、および FIFO がシステム パスにより読み出されるおよび書き込まれることが可能な外部アクセス。このモードでは、F1_SEL[1:0]ビットは
FIFO 書き込みソースを内部アクセス モードで制御
OFF: 静的モードにある。FIFO 方向は静的で、F1_SEL[1:0]により制御される
ON: 動的モード。FIFO 方向は動的で、DP 配線された信号 d1_load をトグルすることで内部か外部アクセスにより制御される








F0 DYN – F1 DYN の説明を参照してください。
F0 CLK INV および F1 CLK INV – FIFO クロックがデータパスのクロックを基準にして反転されるかを決定
NEG: FIFO クロックは DP クロックと同じ極性
POS: クロックは DP クロックに対して反転される
FIFO FAST – FIFO がデータパスのクロックか PSoC バス クロックいずれのクロックが供給されるかを決定。高速モードでは、FIFO はバス クロックに
よりクロック供給され、キャプチャ レイテンシを縮小
このモードを使用すれば、バス クロックのマスターと象限ゲートを有効にする必要があるため、消費電力が少し上がる。このビットは、UDB 内の両方
の FIFO のモードを制御するが、出力モードでコンフィギュレーションされた FIFO にのみ適用される
DP:データパス クロック
BUS:バス クロック
FIFO CAP – FIFO キャプチャ モードを有効にする。有効にされれば、A0 または A1 が読み込まれると、それぞれ F0 または F1 に書き込まれる
AX: A0 または A1 を読み出すと、レジスタに値を直接返す
FX: A0 (または A1) を読み出すと、F0 (または F1) へのキャプチャをトリガーする
FIFO EDGE – FIFO への書き込みが LOW から HIGH までの遷移の時に行われるかを決定。または、それらの書き込みがどんな時にも発生すれ
ば、F0 または F1 ロード信号は HIGH となる
LEVEL: (出力 モードでの) FIFO への書き込みはレベル センシティブ
EDGE: (出力モードでの) FIFO への書き込みはエッジ センシティブ
FIFO ASYNC – フリップフロップが FIFO ブロック ステータス信号の出力において必要であるかを決定。次のページの「FIFO のコンフィギュレーショ
ン」節を参照してください。
SYNC: FIFO ブロック ステータスの出力にフリップフロップを追加しない
ASYNC: FIFO ブロック ステータスの出力にフリップフロップを追加しない。データパスクロックが MASTER_CLK に同期化された場合にのみ、ADD
SYNC を NONE に、FIFO_ASYNC を ASYNC にまたは ADD SYNC を ADD に、FIFO ASYNC を SYNC に設定することが可能
EXT CRCPRS – CRC/PRS 計算のために内部コンフィギュレーションを上書きし、CRC/PRS 信号の外部ルーティングを許可。このビットが
セットされた場合、CRC 演算のためにデータのシフトイン データとフィードバック データを含む raw ブロック入力にアクセスが与えられ、これらの信号
の計算は、外部から行われる必要がある (通常 PLD で)。
DSBL: 内部 CRC/PRS ルーティング
ENBL: 外部 CRC/PRS ルーティング
WRK16 CONCAT – 16 ビット アクセス空間で動作レジスタ アクセス モードを制御。デフォルトでは、このビットが「0」である場合、アクセスがレジスタ
でチェーンの順序で UDB のペアごとに同じように発生。このビットが「1」の場合、16 ビット読み出しまたは書き込みは、単一の UDB 内で連結されたレ
ジスタにアクセス。その組み合わせは{A1,A0}、{D1,D0}、{F1,F0}、{CTL,STAT}、{MSK, ACTL}、{8’b0,MC}
DSBL: 16 ビットのデフォルト アクセス モード。16 ビットのアクセスは 2 つの連続の UDB 内の所与のレジスタをチェーン/アドレス順に読み出すまた
は書き込む
ENBL: 16 ビットの連結方式アクセスモード。16 ビット アクセスは、単一の UDB に連結されたレジスタを読み出すまたは書き込む
www.cypress.com
文書番号: 001-89531 Rev. *A
68
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
FIFO のコンフィギュレーション
FIFO 出力同期化の図
ASYNC
0
動作
ADD SYNC
0
バス クロックに同期
0
1
バス クロックから
DP クロックに再サ
ンプルされる
1
0
(冗長)
1
1
バス クロックから
DP クロックにダブ
ルシンク
www.cypress.com
使用モデル
CPU 読み出し/書き込みステータスの変更は、バス クロックの分解能で発生。バス ク
ロックのタイミングを満たすことが可能であれば、最小レイテンシのために使用することができ
る
これはデフォルトの同期動作モードである。CPU 読み出し/書き込みステータスの変更は現
在選択されている DP クロックと同時に再サンプリングされる場合、UDB ロジックに DP クロッ
クのセットアップ時間の完全なサイクルを与える
フリーランニング非同期 DP クロックが使用されている場合、この設定は DP クロックに CPU
の読み書き動作をダブルシンクするために使用することが可能
文書番号: 001-89531 Rev. *A
69
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
初期レジスタ値の設定
A0、A1、D0、DCT で D1 の初期値を設定するには、View > Initial Register Values を開きます。例えば、データパス名が Cntr8 の
場合、ウィンドウは、図 149 (左) のようになります。
図 149. Initial Register Values (レジスタの初期値)
チェックボックスをクリックし、数字または保存先の Verilog ファイルからの有効なパラメーター名のいずれかを入力することで、初期値
を設定することができます (図 149 右)。
www.cypress.com
文書番号: 001-89531 Rev. *A
70
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
データパス チェーン接続
専用のデータパス チェーン接続信号により、チャネル ルーティング リソースを使用せず、単一サイクルの 16 ビット、24 ビット、32 ビット
のビット機能の効率的な実装が可能です。
図 150 に示すように、すべての生成された条件付き信号とキャプチャ信号は、最下位から最上位への方向でチェーン接続されます。左
シフト信号も最下位から最上位への方向でチェーン接続されます。右シフト信号は最上位から最下位への方向でチェーン接続されます。
CFBO (フィードバック) の CRC/PRS チェーン接続信号は最下位から最上位にチェーン接続しますが、CMSBO (MSB 出力) は最上
位から最下位にチェーン接続します。
図 150. データパスのチェーン信号フロー
UDB_c
UDB_a
UDB_b
CE0
CE0i
CE0
CE0i
CE0
CE0i
0
CL0
CL0i
CL0
CL0i
CL0
CL0i
0
CE1
CE1i
CE1
CE1i
CE1
CE1i
0
CL1
CL1i
CL1
CL1i
CL1
CL1i
0
Z0
Z0i
Z0
Z0i
Z0
Z0i
0
Z1
Z1i
Z1
Z1i
Z1
Z1i
0
FF0
FF0i
FF0
FF0i
FF0
FF0i
0
FF1
FF1i
FF1
FF1i
FF1
FF1i
0
UDB2
UDB1
UDB0
CAP0
CAP0i
CAP0
CAP0i
CAP0
CAP0i
0
CAP1
CAP1i
CAP1
CAP1i
CAP1
CAP1i
0
CI
0
SIR
0
0
CO_MSB
SOL_MSB
CI
SIR
CO_MSB
SOL_MSB
CI
SIR
CO_MSB
SOL_MSB
CFBO
CFBI
CFBO
CFBI
CFBO
CFBI
0
SIL
SOR
SIL
SOR
SIL
SOR
0
CMSBI
CMSBO
CMSBI
CMSBO
CMSBI
CMSBO
図 151 にさまざまな場合のデータパスをチェーン接続するために必要な設定を示しています。UDB_a は、最下位のブロックで、
UDB_c は最上位ブロックです。図 151 に 3 UDB (最大 24 ビット) の機能を説明します;16 ビットまたは 32 ビット機能は真ん中のデー
タパス コンフィギュレーションを排除するまたは重複することで作成することができます。Chain FB と Chain CMSB が使用されないこ
とがありますが、この図にはそれらのコンフィギュレーションを示します。
図 150 に示すように、データパスをチェーン接続する場合、デザインの大部分 (例えば、簡単な加算または減算) は図 151 の「Basic
Configuration」行を使用して、Chain CMSB を除き LSB (UDB_a) から MSB (UDB_c) までの信号をすべてチェーン接続します。シフ
ト処理を行う場合、シフトの方向に基づき、シフト チェーン コンフィギュレーションを変更する必要があります。図 151 内の Shift Left、
Shift Right と Arithmetic Shift Right に示します。
www.cypress.com
文書番号: 001-89531 Rev. *A
71
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
図 151. チェーン接続のための DCT コンフィギュレーション
UDB_b
UDB_c
Basic
Configuration
CI SELx: CHAIN
CHAINx: CHAIN
Chain FB: CHAIN
Chain CMSB: NO CHAIN
CI SELx: CHAIN
CHAINx: CHAIN
Chain FB: CHAIN
Chain CMSB: CHAIN
UDB_c
Shift Left
UDB_b
UDB_a
CI SELx: CHAIN
CHAINx: CHAIN
Chain FB: CHAIN
Chain CMSB: CHAIN
CI SELx: ARITH
CHAINx: NO CHAIN
Chain FB: NO CHAIN
Chain CMSB: CHAIN
SI SELx: CHAIN
SI SELx: CHAIN
SI SELx: DEFSI
UDB_b
UDB_a
CI SELx: CHAIN
CHAINx: CHAIN
Chain FB: CHAIN
Chain CMSB: NO CHAIN
CI SELx: CHAIN
CHAINx: CHAIN
Chain FB: CHAIN
Chain CMSB: CHAIN
CI SELx: ARITH
CHAINx: NO CHAIN
Chain FB: NO CHAIN
Chain CMSB: CHAIN
SI SELx: DEFSI
SI SELx: CHAIN
SI SELx: CHAIN
UDB_b
UDB_c
Arithmetic
Shift Right
CI SELx: ARITH
CHAINx: NO CHAIN
Chain FB: NO CHAIN
Chain CMSB: CHAIN
CI SELx: CHAIN
CHAINx: CHAIN
Chain FB: CHAIN
Chain CMSB: NO CHAIN
UDB_c
Shift Right
UDB_a
CI SELx: CHAIN
CHAINx: CHAIN
Chain FB: Chain
Chain CMSB: NO CHAIN
SI SELx: DEFSI
MSB SI:MSB
UDB_a
CI SELx: CHAIN
CHAINx: CHAIN
Chain FB: Chain
Chain CMSB: CHAIN
CI SELx: CHAIN
CHAINx: CHAIN
Chain FB: No Chain
Chain CMSB: CHAIN
SI SELx: CHAIN
SI SELx: CHAIN
データパス レジスタのファームウェア制御
データパス レジスタはマクロ CY_SET_REG8 (アドレス、値) と CY_GET_REG8 (アドレス)、または場合によってこれらの機能の該当
する 16、24、または 32 ビット バージョンを使用してファームウェア内でアクセスすることができます。
レジスタのアドレスは(成功したビルド後に生成される) cyfitter.h ファイルにあります。例えば、「cntr8」という 8 ビット データパス インス
タンスが「SimpleCntr8_1」というコンポーネントでインスタンス化された場合、cyfitter.h ファイルはすべてのデータパス レジスタを一覧
に表示するコードのブロックを含みます。図 152 を参照してください。
www.cypress.com
文書番号: 001-89531 Rev. *A
72
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
図 152. データパス レジスタのアドレス
その他
データパス コンフィギュレーション ツールの詳細は、「Component Author Guide」の付録 B を参照してください。この文書は Help >
Documentation 下の DCT 内に、または Help > Documentation > Component Author Guide 内の PSoC Creator 内に用意さ
れます。
www.cypress.com
文書番号: 001-89531 Rev. *A
73
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
付録 C – 自動生成 Verilog コード
この付録は、PSoC Creator とデータパス コンフィギュレーション ツールにより生成される Verilog コードの例を提供します。以下のコー
ドは、サンプル プロジェクト#1 のコンポーネントの作成中にコピーされました。このアプリケーションノートに関連する PSoC Creator プ
ロジェクトは、コメントが十分ある事例プロジェクトを含みます。このコードは、PSoC Creator とデータパス コンフィギュレーション ツール
により生成される Verilog コードの強点を示すためにのみ使用されます。
PSoC Creator により生成される新しい Verilog ファイル
Verilog ファイルは PSoC Creator により生成された時、以下のようです。
//`#start header` -- edit after this line, do not edit this line
// ========================================
//
// Copyright YOUR COMPANY, THE YEAR
// All Rights Reserved
// UNPUBLISHED, LICENSED SOFTWARE.
//
// CONFIDENTIAL AND PROPRIETARY INFORMATION
// WHICH IS THE PROPERTY OF your company.
//
// ========================================
`include "cypress.v"
//`#end` -- edit above this line, do not edit this line
// Generated on 09/17/2012 at 11:02
// Component: UpDwnCntrPwm_v1_0
module SimpleCntr8_v1_0 (
output tc,
input
clk
);
//`#start body` -- edit after this line, do not edit this line
//
Your code goes here
//`#end` -- edit above this line, do not edit this line
endmodule
//`#start footer` -- edit after this line, do not edit this line
//`#end` -- edit above this line, do not edit this line
この場合、tc と clk ピンは、SimpleCntr8 コンポーネント シンボルにおいて存在するため、追加されます。もし、自身のコンポーネント シ
ンボルが何の端末も含まなければ、これらのコード行は省略されることになります。
新しいデータパス インスタンスのある Verilog ファイル
データパス生成ツールがデータパス コンフィギュレーション用にコードを生成する時、このコードはコンポーネントの既存の Verilog ファ
イルに追加されます。変更されていないコンフィギュレーションは以下のようです。
//`#start header` -- edit after this line, do not edit this line
// ========================================
//
// Copyright YOUR COMPANY, THE YEAR
// All Rights Reserved
// UNPUBLISHED, LICENSED SOFTWARE.
//
// CONFIDENTIAL AND PROPRIETARY INFORMATION
// WHICH IS THE PROPERTY OF your company.
//
// ========================================
`include "cypress.v"
//`#end` -- edit above this line, do not edit this line
www.cypress.com
文書番号: 001-89531 Rev. *A
74
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
// Generated on 09/17/2012 at 11:02
// Component: UpDwnCntrPwm_v1_0
module SimpleCntr8_v1_0 (
output tc,
input
clk
);
//`#start body` -- edit after this line, do not edit this line
//
Your code goes here
//`#end` -- edit above this line, do not edit this line
cy_psoc3_dp8 #(.cy_dpconfig_a(
{
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CFGRAM0: */
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CFGRAM1: */
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CFGRAM2: */
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CFGRAM3: */
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CFGRAM4: */
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CFGRAM5: */
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CFGRAM6: */
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CFGRAM7: */
8'hFF, 8'h00, /*CFG9: */
8'hFF, 8'hFF, /*CFG11-10: */
`SC_CMPB_A1_D1, `SC_CMPA_A1_D1, `SC_CI_B_ARITH,
`SC_CI_A_ARITH, `SC_C1_MASK_DSBL, `SC_C0_MASK_DSBL,
`SC_A_MASK_DSBL, `SC_DEF_SI_0, `SC_SI_B_DEFSI,
`SC_SI_A_DEFSI, /*CFG13-12: */
`SC_A0_SRC_ACC, `SC_SHIFT_SL, 1'h0,
1'h0, `SC_FIFO1_BUS, `SC_FIFO0_BUS,
`SC_MSB_DSBL, `SC_MSB_BIT0, `SC_MSB_NOCHN,
`SC_FB_NOCHN, `SC_CMP1_NOCHN,
`SC_CMP0_NOCHN, /*CFG15-14: */
10'h00, `SC_FIFO_CLK__DP,`SC_FIFO_CAP_AX,
`SC_FIFO_LEVEL,`SC_FIFO__SYNC,`SC_EXTCRC_DSBL,
`SC_WRK16CAT_DSBL /*CFG17-16: */
www.cypress.com
文書番号: 001-89531 Rev. *A
75
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
}
)) cntr8(
/* input
*/ .reset(1'b0),
/* input
*/ .clk(1'b0),
/* input
[02:00]
*/ .cs_addr(3'b0),
/* input
*/ .route_si(1'b0),
/* input
*/ .route_ci(1'b0),
/* input
*/ .f0_load(1'b0),
/* input
*/ .f1_load(1'b0),
/* input
*/ .d0_load(1'b0),
/* input
*/ .d1_load(1'b0),
/* output
*/ .ce0(),
/* output
*/ .cl0(),
/* output
*/ .z0(),
/* output
*/ .ff0(),
/* output
*/ .ce1(),
/* output
*/ .cl1(),
/* output
*/ .z1(),
/* output
*/ .ff1(),
/* output
*/ .ov_msb(),
/* output
*/ .co_msb(),
/* output
*/ .cmsb(),
/* output
*/ .so(),
/* output
*/ .f0_bus_stat(),
/* output
*/ .f0_blk_stat(),
/* output
*/ .f1_bus_stat(),
/* output
*/ .f1_blk_stat()
);
endmodule
//`#start footer` -- edit after this line, do not edit this line
//`#end` -- edit above this line, do not edit this line
コンフィギュレーション RAM とハードウェア リンクのセクションが追加されますが、それらは実際の設定データが含まれていないことに
注意してください。このデータパスコンポーネントは役に立ちません。表 21 は、データパス コンフィギュレーションでのハードウェア リン
クを説明します。
表 21. Verilog ハードウェアリンクの定義
Verilog コード
www.cypress.com
定義/マッピング
.reset(1'b0),
データパス リセット信号
.clk(1'b0),
データパス クロック入力
.cs_addr(3'b0),
コンフィギュレーション ストア アドレス信号
.route_si(1'b0),
配線されるシフトイン
.route_ci(1'b0),
配線されるキャリーイン
.f0_load(1'b0),
FIFO 0 ロード信号
.f1_load(1'b0),
FIFO 1 ロード信号
.d0_load(1'b0),
D0 ロード信号
.d1_load(1'b0),
D1 ロード信号
.ce0(),
比較ブロック 0 の「equals (等しい)」の出力
.cl0(),
比較ブロック 0 の「less than (より小)」の出力
.z0(),
ブロック 0 の 0 検出の出力
文書番号: 001-89531 Rev. *A
76
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
Verilog コード
定義/マッピング
.ff0(),
ブロック 0 のすべて 1 検出の出力
.ce1(),
比較ブロック 1 の「equals (等しい)」の出力
.cl1(),
比較ブロック 1 の「less than (より小)」の出力
.z1(),
ブロック 1 の 0 検出の出力
.ff1(),
ブロック 1 のすべて 1 検出の出力
.ov_msb(),
オーバーフロー検出
.co_msb(),
キャリーアウト
.cmsb(),
この AN で記述しない
.so(),
シフトアウト
.f0_bus_stat(),
FIFO 0 バス ステータス フラグ*
.f0_blk_stat(),
FIFO 0 ブロック ステータス フラグ*
.f1_bus_stat(),
FIFO 1 バス ステータス フラグ*
.f1_blk_stat()
FIFO 1 ブロック ステータス フラグ*
*これらのステータス出力の詳細については、TRM を参照してください。
データパスが機能できるように、これらのリンクが必要となります。それらのリンクがなければ、コンポーネントシンボル、Verilog コード
およびデータパスハードウェアの間には相関関係はありません。
すべての SimpleCntr8 変更後の Verilog ファイル
以下は、簡単な 8 ビットカウンターの完了した Verilog です。
//`#start header` -- edit after this line, do not edit this line
// ========================================
//
// Copyright YOUR COMPANY, THE YEAR
// All Rights Reserved
// UNPUBLISHED, LICENSED SOFTWARE.
//
// CONFIDENTIAL AND PROPRIETARY INFORMATION
// WHICH IS THE PROPERTY OF your company.
//
// ========================================
`include "cypress.v"
//`#end` -- edit above this line, do not edit this line
// Generated on 09/17/2012 at 11:02
// Component: UpDwnCntrPwm_v1_0
module SimpleCntr8_v1_0 (
output tc,
input
clk
);
//`#start body` -- edit after this line, do not edit this line
//
Your code goes here
//`#end` -- edit above this line, do not edit this line
cy_psoc3_dp8 #(.a0_init_a(8'b00001111), .d0_init_a(8'b00001111),
.cy_dpconfig_a(
www.cypress.com
文書番号: 001-89531 Rev. *A
77
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
{
`CS_ALU_OP__DEC, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC__ALU, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CFGRAM0:
*/
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC___D0, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CFGRAM1:
*/
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CFGRAM2:
*/
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CFGRAM3:
*/
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CFGRAM4:
*/
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CFGRAM5:
*/
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CFGRAM6:
*/
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CFGRAM7:
*/
8'hFF, 8'h00, /*CFG9:
*/
8'hFF, 8'hFF, /*CFG11-10:
*/
`SC_CMPB_A1_D1, `SC_CMPA_A1_D1, `SC_CI_B_ARITH,
`SC_CI_A_ARITH, `SC_C1_MASK_DSBL, `SC_C0_MASK_DSBL,
`SC_A_MASK_DSBL, `SC_DEF_SI_0, `SC_SI_B_DEFSI,
`SC_SI_A_DEFSI, /*CFG13-12:
*/
`SC_A0_SRC_ACC, `SC_SHIFT_SL, 1'h0,
1'h0, `SC_FIFO1_BUS, `SC_FIFO0_BUS,
`SC_MSB_DSBL, `SC_MSB_BIT0, `SC_MSB_NOCHN,
`SC_FB_NOCHN, `SC_CMP1_NOCHN,
`SC_CMP0_NOCHN, /*CFG15-14:
*/
10'h00, `SC_FIFO_CLK__DP,`SC_FIFO_CAP_AX,
`SC_FIFO_LEVEL,`SC_FIFO__SYNC,`SC_EXTCRC_DSBL,
`SC_WRK16CAT_DSBL /*CFG17-16:
*/
}
)) cntr8(
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
input
input
input
input
input
input
input
input
input
output
output
www.cypress.com
[02:00]
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
.reset(1'b0),
.clk(clk), /* tie clk signal to datapath clock */
.cs_addr({2'b0,tc}), /* tc determines address lsb */
.route_si(1'b0),
.route_ci(1'b0),
.f0_load(1'b0),
.f1_load(1'b0),
.d0_load(1'b0),
.d1_load(1'b0),
.ce0(),
.cl0(),
文書番号: 001-89531 Rev. *A
78
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
output
output
output
output
output
output
output
output
output
output
output
output
output
output
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
.z0(tc), /* tc signal comes from z0 state */
.ff0(),
.ce1(),
.cl1(),
.z1(),
.ff1(),
.ov_msb(),
.co_msb(),
.cmsb(),
.so(),
.f0_bus_stat(),
.f0_blk_stat(),
.f1_bus_stat(),
.f1_blk_stat()
);
endmodule
//`#start footer` -- edit after this line, do not edit this line
//`#end` -- edit above this line, do not edit this line
A0 をデクリメントし、リロードする 2 つのコンフィギュレーションが設定され、A0 と D0 用の初期レジスタ値が定義されました。ハードウェア
とシンボル端末間のリンクも設立されました。ゼロからこのファイルを作成することができますが、データパス コンフィギュレーション
ツールを使用すれば、はるかに簡単になります。
www.cypress.com
文書番号: 001-89531 Rev. *A
79
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
付録 D – PI と PO を持つ 24 ビット データパスの例
// Requires these signals to tie the 3 datapaths together
wire [14:0] chain0;
wire [14:0] chain1;
// Datapath 0
cy_psoc3_dp #(.cy_dpconfig(
{
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CS_REG0 Comment: */
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CS_REG1 Comment: */
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CS_REG2 Comment: */
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CS_REG3 Comment: */
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CS_REG4 Comment: */
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CS_REG5 Comment: */
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CS_REG6 Comment: */
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CS_REG7 Comment: */
8'hFF, 8'h00,
/*SC_REG4
Comment: */
8'hFF, 8'hFF,
/*SC_REG5
Comment: */
`SC_CMPB_A1_D1, `SC_CMPA_A1_D1, `SC_CI_B_ARITH,
`SC_CI_A_ARITH, `SC_C1_MASK_DSBL, `SC_C0_MASK_DSBL,
`SC_A_MASK_DSBL, `SC_DEF_SI_0, `SC_SI_B_DEFSI,
`SC_SI_A_DEFSI, /*SC_REG6 Comment: */
`SC_A0_SRC_ACC, `SC_SHIFT_SL, 1'b0,
1'b0, `SC_FIFO1_BUS, `SC_FIFO0__A0,
`SC_MSB_DSBL, `SC_MSB_BIT0, `SC_MSB_NOCHN,
`SC_FB_NOCHN, `SC_CMP1_NOCHN,
`SC_CMP0_NOCHN, /*SC_REG7 Comment: */
10'h0, `SC_FIFO_CLK__DP,`SC_FIFO_CAP_AX,
`SC_FIFO_LEVEL,`SC_FIFO__SYNC,`SC_EXTCRC_DSBL,
`SC_WRK16CAT_DSBL /*SC_REG8 Comment: */
})) Datapath0(
/* input */ .clk(),
// Clock
/* input [02:00] */ .cs_addr(), // Control Store RAM address
/* input */ .route_si(1'b0),
// Shift in from routing
www.cypress.com
文書番号: 001-89531 Rev. *A
80
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
input */ .route_ci(1'b0),
// Carry in from routing
input */ .f0_load(1'b0),
// Load FIFO 0
input */ .f1_load(1'b0),
// Load FIFO 1
input */ .d0_load(1'b0),
// Load Data Register 0
input */ .d1_load(1'b0),
// Load Data Register 1
output */ .ce0(),
// Accumulator 0 = Data register 0
output */ .cl0(),
// Accumulator 0 < Data register 0
output */ .z0(),
// Accumulator 0 = 0
output */ .ff0(),
// Accumulator 0 = FF
output */ .ce1(),
// Accumulator [0|1] = Data register 1
output */ .cl1(),
// Accumulator [0|1] < Data register 1
output */ .z1(),
// Accumulator 1 = 0
output */ .ff1(),
// Accumulator 1 = FF
output */ .ov_msb(),
// Operation over flow
output */ .co_msb(),
// Carry out
output */ .cmsb(),
// Carry out
output */ .so(),
// Shift out
output */ .f0_bus_stat(),
// FIFO 0 status to uP
output */ .f0_blk_stat(),
// FIFO 0 status to DP
output */ .f1_bus_stat(),
// FIFO 1 status to uP
output */ .f1_blk_stat(),
// FIFO 1 status to DP
input */ .ci(1'b0),
// Carry in from previous stage
output */ .co(chain0[12]),
// Carry out to next stage
input */ .sir(1'b0),
// Shift in from right side
output */ .sor(),
// Shift out to right side
input */ .sil(chain0[10]),
// Shift in from left side
output */ .sol(chain0[11]),
// Shift out to left side
input */ .msbi(chain0[9]),
// MSB chain in
output */ .msbo(),
// MSB chain out
input [01:00] */ .cei(2'b0), // Compare equal in from prev stage
output [01:00] */ .ceo(chain0[1:0]), // Compare equal out to next stage
input [01:00] */ .cli(2'b0), // Compare less than in from prv stage
output [01:00] */ .clo(chain0[3:2]), // Compare less than out to next stage
input [01:00] */ .zi(2'b0),
// Zero detect in from previous stage
output [01:00] */ .zo(chain0[5:4]), // Zero detect out to next stage
input [01:00] */ .fi(2'b0),
// 0xFF detect in from previous stage
output [01:00] */ .fo(chain0[7:6]), // 0xFF detect out to next stage
input [01:00] */ .capi(2'b0),
// Capture in from previous stage
output [01:00] */ .capo(chain0[14:13]),
// Capture out to next stage
input */ .cfbi(1'b0),
// CRC Feedback in from previous stage
output */ .cfbo(chain0[8]),
// CRC Feedback out to next stage
input [07:00] */ .pi(),
// Parallel data port
output [07:00] */ .po()
// Parallel data port
);
// Datapath 1
cy_psoc3_dp #(.cy_dpconfig(
{
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CS_REG0 Comment: */
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CS_REG1 Comment: */
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CS_REG2 Comment: */
www.cypress.com
文書番号: 001-89531 Rev. *A
81
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CS_REG3 Comment: */
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CS_REG4 Comment: */
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CS_REG5 Comment: */
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CS_REG6 Comment: */
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CS_REG7 Comment: */
8'hFF, 8'h00,
/*SC_REG4
Comment: */
8'hFF, 8'hFF,
/*SC_REG5
Comment: */
`SC_CMPB_A1_D1, `SC_CMPA_A1_D1, `SC_CI_B_ARITH,
`SC_CI_A_ARITH, `SC_C1_MASK_DSBL, `SC_C0_MASK_DSBL,
`SC_A_MASK_DSBL, `SC_DEF_SI_0, `SC_SI_B_DEFSI,
`SC_SI_A_DEFSI, /*SC_REG6 Comment: */
`SC_A0_SRC_ACC, `SC_SHIFT_SL, 1'b0,
1'b0, `SC_FIFO1_BUS, `SC_FIFO0__A0,
`SC_MSB_DSBL, `SC_MSB_BIT0, `SC_MSB_NOCHN,
`SC_FB_NOCHN, `SC_CMP1_NOCHN,
`SC_CMP0_NOCHN, /*SC_REG7 Comment: */
10'h0, `SC_FIFO_CLK__DP,`SC_FIFO_CAP_AX,
`SC_FIFO_LEVEL,`SC_FIFO__SYNC,`SC_EXTCRC_DSBL,
`SC_WRK16CAT_DSBL /*SC_REG8 Comment: */
})) Datapath1(
/* input */ .clk(),
// Clock
/* input [02:00] */ .cs_addr(), // Control Store RAM address
/* input */ .route_si(1'b0),
// Shift in from routing
/* input */ .route_ci(1'b0),
// Carry in from routing
/* input */ .f0_load(1'b0),
// Load FIFO 0
/* input */ .f1_load(1'b0),
// Load FIFO 1
/* input */ .d0_load(1'b0),
// Load Data Register 0
/* input */ .d1_load(1'b0),
// Load Data Register 1
/* output */ .ce0(),
// Accumulator 0 = Data register 0
/* output */ .cl0(),
// Accumulator 0 < Data register 0
/* output */ .z0(),
// Accumulator 0 = 0
/* output */ .ff0(),
// Accumulator 0 = FF
/* output */ .ce1(),
// Accumulator [0|1] = Data register 1
/* output */ .cl1(),
// Accumulator [0|1] < Data register 1
/* output */ .z1(),
// Accumulator 1 = 0
/* output */ .ff1(),
// Accumulator 1 = FF
/* output */ .ov_msb(),
// Operation over flow
/* output */ .co_msb(),
// Carry out
/* output */ .cmsb(),
// Carry out
/* output */ .so(),
// Shift out
/* output */ .f0_bus_stat(),
// FIFO 0 status to uP
/* output */ .f0_blk_stat(),
// FIFO 0 status to DP
/* output */ .f1_bus_stat(),
// FIFO 1 status to uP
/* output */ .f1_blk_stat(),
// FIFO 1 status to DP
/* input */ .ci(chain0[12]),
// Carry in from previous stage
www.cypress.com
文書番号: 001-89531 Rev. *A
82
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
output */ .co(chain1[12]),
// Carry out to next stage
input */ .sir(chain0[11]),
// Shift in from right side
output */ .sor(chain0[10]),
// Shift out to right side
input */ .sil(chain1[10]),
// Shift in from left side
output */ .sol(chain1[11]),
// Shift out to left side
input */ .msbi(chain1[9]),
// MSB chain in
output */ .msbo(chain0[9]),
// MSB chain out
input [01:00] */ .cei(chain0[1:0]), // Compare equal in from prev stage
output [01:00] */ .ceo(chain1[1:0]), // Compare equal out to next stage
input [01:00] */ .cli(chain0[3:2]), // Compare less than in from prv stage
output [01:00] */ .clo(chain1[3:2]), // Compare less than out to next stage
input [01:00] */ .zi(chain0[5:4]),
// Zero detect in from previous stage
output [01:00] */ .zo(chain1[5:4]), // Zero detect out to next stage
input [01:00] */ .fi(chain0[7:6]),
// 0xFF detect in from previous stage
output [01:00] */ .fo(chain1[7:6]), // 0xFF detect out to next stage
input [01:00] */ .capi(chain0[14:13]),// Capture in from previous stage
output [01:00] */ .capo(chain1[14:13]),
// Capture out to next stage
input */ .cfbi(chain0[8]),
// CRC Feedback in from previous stage
output */ .cfbo(chain1[8]),
// CRC Feedback out to next stage
input [07:00] */ .pi(),
// Parallel data port
output [07:00] */ .po()
// Parallel data port
);
// Datapath 2
cy_psoc3_dp #(.cy_dpconfig(
{
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CS_REG0 Comment: */
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CS_REG1 Comment: */
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CS_REG2 Comment: */
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CS_REG3 Comment: */
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CS_REG4 Comment: */
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CS_REG5 Comment: */
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CS_REG6 Comment: */
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CS_REG7 Comment: */
8'hFF, 8'h00,
/*SC_REG4
Comment: */
8'hFF, 8'hFF,
/*SC_REG5
Comment: */
www.cypress.com
文書番号: 001-89531 Rev. *A
83
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
`SC_CMPB_A1_D1, `SC_CMPA_A1_D1, `SC_CI_B_ARITH,
`SC_CI_A_ARITH, `SC_C1_MASK_DSBL, `SC_C0_MASK_DSBL,
`SC_A_MASK_DSBL, `SC_DEF_SI_0, `SC_SI_B_DEFSI,
`SC_SI_A_DEFSI, /*SC_REG6 Comment: */
`SC_A0_SRC_ACC, `SC_SHIFT_SL, 1'b0,
1'b0, `SC_FIFO1_BUS, `SC_FIFO0__A0,
`SC_MSB_DSBL, `SC_MSB_BIT0, `SC_MSB_NOCHN,
`SC_FB_NOCHN, `SC_CMP1_NOCHN,
`SC_CMP0_NOCHN, /*SC_REG7 Comment: */
10'h0, `SC_FIFO_CLK__DP,`SC_FIFO_CAP_AX,
`SC_FIFO_LEVEL,`SC_FIFO__SYNC,`SC_EXTCRC_DSBL,
`SC_WRK16CAT_DSBL /*SC_REG8 Comment: */
})) Datapath2(
/* input */ .clk(),
// Clock
/* input [02:00] */ .cs_addr(),
// Control Store RAM address
/* input */ .route_si(1'b0),
// Shift in from routing
/* input */ .route_ci(1'b0),
// Carry in from routing
/* input */ .f0_load(1'b0),
// Load FIFO 0
/* input */ .f1_load(1'b0),
// Load FIFO 1
/* input */ .d0_load(1'b0),
// Load Data Register 0
/* input */ .d1_load(1'b0),
// Load Data Register 1
/* output */ .ce0(),
// Accumulator 0 = Data register 0
/* output */ .cl0(),
// Accumulator 0 < Data register 0
/* output */ .z0(),
// Accumulator 0 = 0
/* output */ .ff0(),
// Accumulator 0 = FF
/* output */ .ce1(),
// Accumulator [0|1] = Data register 1
/* output */ .cl1(),
// Accumulator [0|1] < Data register 1
/* output */ .z1(),
// Accumulator 1 = 0
/* output */ .ff1(),
// Accumulator 1 = FF
/* output */ .ov_msb(),
// Operation over flow
/* output */ .co_msb(),
// Carry out
/* output */ .cmsb(),
// Carry out
/* output */ .so(),
// Shift out
/* output */ .f0_bus_stat(),
// FIFO 0 status to uP
/* output */ .f0_blk_stat(),
// FIFO 0 status to DP
/* output */ .f1_bus_stat(),
// FIFO 1 status to uP
/* output */ .f1_blk_stat(),
// FIFO 1 status to DP
/* input */ .ci(chain1[12]),
// Carry in from previous stage
/* output */ .co(),
// Carry out to next stage
/* input */ .sir(chain1[11]),
// Shift in from right side
/* output */ .sor(chain1[10]),
// Shift out to right side
/* input */ .sil(1'b0),
// Shift in from left side
/* output */ .sol(),
// Shift out to left side
/* input */ .msbi(1'b0),
// MSB chain in
/* output */ .msbo(chain1[9]),
// MSB chain out
/* input [01:00] */ .cei(chain1[1:0]), // Compare equal in from prev stage
/* output [01:00] */ .ceo(),
// Compare equal out to next stage
/* input [01:00] */ .cli(chain1[3:2]), // Compare less than in from prv stage
/* output [01:00] */ .clo(),
// Compare less than out to next stage
/* input [01:00] */ .zi(chain1[5:4]),
// Zero detect in from previous stage
/* output [01:00] */ .zo(),
// Zero detect out to next stage
/* input [01:00] */ .fi(chain1[7:6]),
// 0xFF detect in from previous stage
/* output [01:00] */ .fo(),
// 0xFF detect out to next stage
/* input [01:00] */ .capi(chain1[14:13]),// Capture in from previous stage
/* output [01:00] */ .capo(),
// Capture out to next stage
/* input */ .cfbi(chain1[8]),
// CRC Feedback in from previous stage
/* output */ .cfbo(),
// CRC Feedback out to next stage
/* input [07:00] */ .pi(),
// Parallel data port
/* output [07:00] */ .po()
// Parallel data port
)
www.cypress.com
文書番号: 001-89531 Rev. *A
84
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
改訂履歴
文書名: PSoC® 3、 PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計 – AN82156
文書番号: 001-89531
版
ECN
変更者
発行日
**
4145805
HZEN
10/03/2013
これは英語版 001-82156 Rev. *C を翻訳した日本語版 001-89531 Rev. **です。
*A
4722749
HZEN
05/04/2015
これは英語版 001-82156 Rev. *E を翻訳した日本語版 001-89531 Rev. *A です。
www.cypress.com
変更内容
文書番号: 001-89531 Rev. *A
85
®
PSoC 3、PSoC 4 および PSoC 5LP – UDB データパスを用いた PSoC Creator™コンポーネントの設計
ワールドワイドな販売と設計サポート
サイプレスは、事業所、ソリューション センター、メーカー代理店および販売代理店の世界的なネットワークを保持しています。お客様
の最寄りのオフィスについては、サイプレスのロケーション ページをご覧ください。
PSoC®ソリューション
製品
車載用
cypress.com/go/automotive
psoc.cypress.com/solutions
クロック & バッファ
cypress.com/go/clocks
PSoC 1 | PSoC 3 | PSoC 4 |PSoC 5LP
インターフェース
cypress.com/go/interface
サイプレス開発者コミュニティ
照明 & 電源管理
cypress.com/go/powerpsoc
cypress.com/go/plc
メモリ
cypress.com/go/memory
PSoC
cypress.com/go/psoc
タッチ センシング
cypress.com/go/touch
USB コントローラー
cypress.com/go/usb
無線/RF
cypress.com/go/wireless
コミュニティ | フォーラム | ブログ | ビデオ | トレーニング
テクニカル サポート
cypress.com/go/support
PSoC はサイプレス セミコンダクタ社の登録商標であり、PSoC Creator は同社の商標です。本書で言及するその他すべての商標または登録商標は、それぞれ
の所有者に帰属します。
Cypress Semiconductor
198 Champion Court
San Jose, CA 95134-1709
Phone
Fax
Web
: 408-943-2600
: 408-943-4730
: www.cypress.com
© Cypress Semiconductor Corporation, 2012-2015. 本文書に記載される情報は予告なく変更される場合があります。Cypress Semiconductor Corporation
(サイプレス セミコンダクタ社) は、サイプレス製品に組み込まれた回路以外のいかなる回路を使用することに対して一切の責任を負いません。サイプレス セミコン
ダクタ社は、特許またはその他の権利に基づくライセンスを譲渡することも、または含意することもありません。サイプレス製品は、サイプレスとの書面による合意
に基づくものでない限り、医療、生命維持、救命、重要な管理、または安全の用途のために使用することを保証するものではなく、また使用することを意図したもの
でもありません。さらにサイプレスは、誤動作や故障によって使用者に重大な傷害をもたらすことが合理的に予想される生命維持システムの重要なコンポーネント
としてサイプレス製品を使用することを許可していません。生命維持システムの用途にサイプレス製品を供することは、製造者がそのような使用におけるあらゆる
リスクを負うことを意味し、その結果サイプレスはあらゆる責任を免除されることを意味します。
このソースコード (ソフトウェアおよび/またはファームウェア) はサイプレス セミコンダクタ社 (以下「サイプレス」) が所有し、全世界の特許権保護 (米国およびそ
の他の国)、米国の著作権法ならびに国際協定の条項により保護され、かつそれらに従います。サイプレスが本書面によりライセンシーに付与するライセンスは、
個人的、非独占的かつ譲渡不能のライセンスであり、適用される契約で指定されたサイプレスの集積回路と併用されるライセンシーの製品のみをサポートするカ
スタム ソフトウェアおよび/またはカスタム ファームウェアを作成する目的に限って、サイプレスのソース コードの派生著作物をコピー、使用、変更そして作成す
るためのライセンス、ならびにサイプレスのソース コードおよび派生著作物をコンパイルするためのライセンスです。上記で指定された場合を除き、サイプレスの
書面による明示的な許可なくして本ソースコードを複製、変更、変換、コンパイル、または表示することはすべて禁止します。
免責条項: サイプレスは、明示的または黙示的を問わず、本資料に関するいかなる種類の保証も行いません。これには、商品性または特定目的への適合性の黙
示的な保証が含まれますが、これに限定されません。サイプレスは、本文書に記載される資料に対して今後予告なく変更を加える権利を留保します。サイプレス
は、本文書に記載されるいかなる製品または回路を適用または使用したことによって生ずるいかなる責任も負いません。サイプレスは、誤動作や故障によって使
用者に重大な傷害をもたらすことが合理的に予想される生命維持システムの重要なコンポーネントとしてサイプレス製品を使用することを許可していません。生命
維持システムの用途にサイプレス製品を供することは、製造者がそのような使用におけるあらゆるリスクを負うことを意味し、その結果サイプレスはあらゆる責任
を免除されることを意味します。
ソフトウェアの使用は、適用されるサイプレス ソフトウェア ライセンス契約によって制限され、かつ契約の対象となる場合があります。
www.cypress.com
文書番号: 001-89531 Rev. *A
86