COP8

ナショナルセミコンダクターCOP8
一般情報
発売1988 (1988年
共通メーカー
パフォーマンス
最大CPUクロックレート0 Hz~2 MHz
データ幅8 (RAM)、8 (ROM)
アドレス幅8(RAM)、15(ROM)
物理的仕様
パッケージ
  • 20、28、40ピンDIP、16、20、28ピンSOIC、44ピンPLCC
アーキテクチャと分類
応用埋め込み
命令セットCOP8
命令の数69
歴史
前任者COP400
後継なし

ナショナルセミコンダクターのCOP8は、8ビットCISCコアマイクロコントローラです。COP8は、従来のCOP400 4ビットマイクロコントローラファミリ の強化版です。COP8の主な機能は以下のとおりです。

COP8の基本命令サイクル時間はクロック周波数の1/10です。最大10MHzのクロックで、最大1MHzの命令実行速度が得られます。(10MHzクロックは一部のタイマー周辺機器によって直接使用されます。)最大命令実行速度は1バイトあたり1サイクルで、ほとんどの1バイト命令は1命令サイクルで実行されます。一部の命令、特に分岐命令は1~2サイクル多くかかります。一部のモデルにはクロックダブラーが搭載されており、最大10MHzの入力クロックを受け付けますが、内部で20MHzのマスタークロックに倍増することで、2MHzの命令実行速度を実現します。[ 1 ] : 7,32

このチップは、任意の遅いクロックを許容できる静的ロジック設計である。 [ 1 ]:10 ほとんどのモデルには2番目の 電力を節約するために高速クロックを無効にしている間、CPU クロックに使用できる 32 768  Hzクォーツ クロック水晶発振器。

レジスタとメモリマップ

COP8登録簿
1 41 31 21 11 00 90 80 70 60 50 40 30 20 10 0(ビット位置)
メインレジスター
アキュムレータ
PCU PCL プログラムカウンター​ ​
注: プログラマが認識できるその他のすべてのレジスタとステータス ビットは RAM に割り当てられます。

COP8は命令空間とデータ空間を別々に使用します(ハーバードアーキテクチャ)。[ 2 ] : 2-1 [ 3 ] : 2-4 命令アドレス空間は15ビット(最大32KiB)で、データアドレスは8ビット(最大256バイト、バンク切り替えにより拡張)です。

ソフトウェアのバグを検出できるように、無効な命令アドレスはすべて0(トラップ命令)として読み出されます。スタックの上位にある無効なRAMはすべて1(無効なアドレス)として読み出されます。

CPUは8ビットのアキュムレータと15ビットのプログラムカウンタを備えています。さらに16個の8ビットレジスタ(R0~R15)と8ビットのプログラムステータスワードがメモリマップされています。これらにアクセスするための特別な命令もありますが、一般的なRAMアクセス命令も使用できます。

メモリ マップは、次のように半分が RAM、半分が制御レジスタに分かれています。

COP8データアドレス空間
住所使用
0x00~6Fスタックに使用される汎用RAM
0x70~7F未使用、スタックのアンダーフローをトラップするためにすべて 1 (0xFF) として読み取られます
0x80~8F未使用、未定義と読み取り
0x90–BF追加の周辺制御レジスタ
0xC0–CF周辺機器制御レジスタ。
0xD0–DF汎用I/OポートL、G、I、C、D
0xE0~E8予約済み
0xE9マイクロワイヤシフトレジスタ
0xEA–EDタイマー1レジスタ
0xEECNTRLレジスタ、マイクロワイヤとタイマー1の制御ビット
0xEFPSW、CPUプログラムステータスワード
0xF0–FBR0~R11、オンチップRAMをレジスタとしてマッピング
0xFCR12(別名X)、二次間接ポインタレジスタ
0xFDR13(別名SP)、スタックポインタレジスタ
0xFER14(別名B)、プライマリ間接ポインタレジスタ
0xFFR15(別名S)、データセグメント拡張レジスタ

RAMがバンク化されていない場合、R15 (S) は単なる汎用レジスタです。RAMがバンク化されている場合、データアドレス空間の下位半分(アドレス0x00~7F)は、Sによって選択されたRAMバンクに送られます。データアドレス空間の上位半分にある特殊用途レジスタは常に参照可能です。0xF xのデータレジスタは、バンク間でデータをコピーするために使用できます。

バンク0以外のRAMバンクは、128バイトすべて利用可能です。スタック(スタックポインタでアドレス指定)は、Sレジスタの設定に関わらず、常にバンク0にあります。

管理権の移転

JMPLアドレス空間全体をアドレス指定できる3バイト命令と命令に加えてJSRL、これらの命令の2バイト版である命令JMPJSR命令は、4Kページ内でジャンプできます。命令はPCの下位12ビットを指定し、上位3ビットは保持されます。(これらは主に最大4KのROMを搭載したモデルを対象としています。)短距離分岐には、JPPC-32からPC+31へのPC相対分岐を実行する1バイト命令が63個あります。これは15ビットの加算であり、ページ境界の要件は適用されません。

また、アキュムレータの内容をアドレスの下位 8 ビットとして使用するジャンプ間接命令とロード アキュムレータ間接命令もあり、現在の PC の上位 7 ビットは保持されます。

条件分岐自体は存在せず、プロセッサは従来のZCVNステータスフラグも提供しません。ただし、プログラムステータスワードには、マルチバイト演算用のキャリーフラグハーフキャリーフラグが含まれています。代わりに、いくつかの比較スキップ命令があります。例えば、IFEQ2つのオペランドを比較し、等しくない場合は次の命令をスキップします。スキップできる命令は分岐命令に限らず、任意の命令です。

このメカニズムの興味深い拡張として、リターンアンドスキップ命令があります。この命令により、任意のサブルーチンは条件付きで呼び出し後の命令をスキップできます。これにより、サブルーチンから ブール値をRETSK返すための非常にコンパクトな方法が提供されます。

COP8アーキテクチャ特有のもう一つの特徴は、IFBNE命令です。この1バイト命令は、B(メモリポインタ)レジスタの下位4ビットと4ビットの即値定数を比較し、Bが小さなバッファ(最大16バイト)の終端に達するまでループ処理を実行するために使用できます。他にも1バイトLD B,#imm4命令があります。

命令セット

COP8のオペランドは、デスティネーション、ソースの順に並べられます。ほとんどの命令では、アキュムレータAがオペランドの1つとして使用されます。もう1つのオペランドは通常、8ビットの即値、8ビットのRAMアドレス、または[B]Bレジスタによって選択されたRAMアドレス( )から選択されます。LDおよびX(アキュムレータとの交換)命令は、Xレジスタ([X])によるRAMアドレス指定と、後置インクリメント/デクリメントバリアント([B+][B−][X+][X−])もサポートしています。

B を介した間接アドレス指定は特に高速であり、命令が実行されるのと同じサイクルで実行できます ( X A,[B]1 サイクルの命令であっても)。

一方、絶対RAMアドレス指定は、、、、、の5つの命令に対してのみ直接エンコードされます。後者は「直接アドレス指定」オペコードプレフィックスであり、オペランドを持つ任意の命令の先頭に付加でき、オペランドを指定されたメモリ位置に変更します。(条件スキップ命令は、プレフィックスと後続の命令をペアとしてスキップします。)、、命令との併用については、専用命令の方が効率的であるため、文書化されていません。 LD A,addr8X A,addr8IFEQ addr8,#imm8LD addr8,#imm8DIR addr8[B]DIRLD A,[B]X A,[B]LD [B],#imm8

すべての「移動」命令は、LDたとえ宛先がメモリアドレス()であっても、(ロード)命令として呼び出されます。通常、アキュムレータをソースとする命令はありません。ストアは、アキュムレータとメモリオペランド を交換し、Aをストアし、以前のメモリ内容をロードする命令で実行する必要があります。LD addr8,#imm8LDX

ROM内のテーブルからデータをフェッチする命令があります。これらの命令は、プログラムカウンタ(PCU)の上位7ビットとアキュムレータを組み合わせ、そのアドレスから1バイトをフェッチし、アキュムレータ(LAID命令)またはプログラムカウンタPCLの下位8ビット(JID命令)に格納します。次に実行される命令は、テーブル自体と同じ256バイトのROMページに存在する必要があるため、256エントリのテーブルは実現できません。

COP8ファミリー命令セット[ 2 ] [ 4 ] [ 3 ] [ 5 ]
オペコードオペランドニモニックサイクル説明
76543210b2b3
00000000国際7ソフトウェア割り込み(PCをプッシュ、PC ← 0x00ff)
000オフセットJP +表示53PC ← PC + offset ; 1~31バイト前方にジャンプ (offset≠0)
0010高い低いJMPアドレス123PC[11:0] ← addr . PCの上位3ビットは保持されます。
0011高い低いJSRアドレス125サブルーチンにジャンプ: PC を押して、JMP として続行します。
0100IFBNE # imm41(B & 15) = kの場合、次の命令をスキップします。
0101LD B、# imm41B ← 15 − k(ゼロ拡張)
01100オペコードその他の指示
01100000ANDSZ A,# imm8 [ a ]2A & k = 0 (=IFBIT #ビット、A) の場合はスキップ
01100001住所JSRBアドレス8 [ b ]5PCを押して、アドレス[ 1 ]のブートROMサブルーチンにジャンプします。
0110001(ブートROM用に予約)[ b ] [ 1 ]
01100100CLR A1A ← 0
01100101スワップA1A ← A<<4 | A>>4; ニブルを交換
01100110DCOR A1BCD加算 後の小数点の修正
01100111Aを押す[ a ]3[SP] ← A, SP ← SP−1
011OPCC少し[B] [ c ]のビット操作
01101少しRBIT #ビット、[B] [ c ]1RAMの指定されたビットをリセット(0にクリア)
01110少しIFBIT #ビット、[B] [ c ]1RAMの指定されたビットをテストし、ゼロの場合はスキップします
01111少しSBIT #ビット、[B] [ c ]1RAMの指定されたビットを(1に)設定する
100メートル0オペコードわかった?二項演算、A ← A opオペランド
10000オペコードOP A、[B] [ c ]1A ← A op [B]
10010オペコードOP A、# imm82A ← A op k
100メートル0000わかった?ADC A、オペランドC,A ← A +オペランド+ C; キャリー付き加算
100メートル0001わかった?SUBC A、オペランドC,A ← A + ~オペランド+ C (A −オペランド− ~C)
100メートル0010わかった?IFEQ A、オペランドA ≠オペランドの場合はスキップ
100メートル0011わかった?IFGT A、オペランドA ≤オペランドの場合はスキップ
100メートル0100わかった?ADD A、オペランドA ← A +オペランド(繰り上がりは変更されません!)
100メートル0101わかった?AND A、オペランドA ← A &オペランド
100メートル0110わかった?XOR A、オペランドA ← A ^オペランド
100メートル0111わかった?OR A、オペランドA ← A |オペランド
10001オペコードゼロオペランド命令
10001000IFC1キャリークリアの場合はスキップ
10001001IFNC1キャリーセットの場合はスキップ
10001010INC A1A ← A + 1 (繰り上がりは変更なし)
1000101112月A1A ← A − 1 (繰り上がりは変更なし)
10001100ポップA [ a ]3SP ← SP+1, A ← [SP]
10001101レツク5PCをポップし、1つの命令をスキップします
10001110RET5ポップPCハイ、ポップPCロー
10001111レティ5割り込みを返して有効にする
10011オペコード即値オペランドを持つ命令
10011000LD A、# imm82A ← k
10011001IFNE A、# imm8 [ a ]2A = kの場合はスキップ
10011010LD [B+]、# imm83[B] ← k , B ← B + 1
10011011LD [B−],# imm83[B] ← k , B ← B − 1
10011100住所XA、アドレス83A ↔ [住所]、交換
10011101住所LD A、アドレス83A ← [住所]
10011110LD [B]、# imm82[B] ← k
10011111LD B、# imm8 [ a ]2B ← k (=LD R14,# k、1サイクル速い)
101オペコード0cその他の指示
10100000RC1C ← 0; キャリーを0にリセット
10100001SC1C ← 1; キャリーを1にする
10100100レイド3A ← ROM[PCU:A]; ROMからロード
10100101JID3PCL ← ROM[PCU:A]; ROMテーブル経由でジャンプ
10101000RLC A [ a ]1C,A ← A,C; キャリーで左回転 (=ADC A,A)
10101001住所IFEQアドレス8、# imm8 [ a ]3[ addr ] ≠ kの場合はスキップ
10101100高い低いJMPLアドレス154PC ←アドレス
10101101高い低いJSRLアドレス155PC、PC ←アドレスを押す
10110000RRC A1A,C ← C,A; 繰り上がりで右回転
10110001(予約済み)
10110100VIS [ a ]5PC ← ROM[ベクターテーブル]; ベクター割り込み選択
10110101RPND [ a ]1保留中の割り込みフラグをリセットする
10111000いいえ1操作なし
10111001IFNE A,[B] [ a ] [ c ]1A = [B]の場合はスキップ
10111100住所LDアドレス8、# imm83[住所] ← k
10111101住所ディレクトリアドレス83次の命令のオペランドを[B]から[ addr ] に変更する
101RL1±ロード/交換操作
10100010XA、[B+]2A ↔ [B], B ← B+1
10100011XA、[B−]2A ↔ [B], B ← B−1
10100110XA,[B]1A ↔ [B]
10101010LD A、[B+]2A ← [B]、B ← B+1
10101011LD A、[B−]2A ← [B], B ← B−1
10101110LD A,[B]1A ← [B]
10110010XA,[X+]3A ↔ [X], X ← X+1
10110011XA,[X−]3A ↔ [X], X ← X−1
10110110XA,[X]3A ↔ [X]
10111010LD A,[X+]3A ← [X], X ← X+1
10111011LD A,[X−]3A ← [X], X ← X−1
10111110LD A,[X]3A ← [X]
101111(予約済み)
1100登録するDRSZレジスタ3レジスタレジスタ− 1、結果がゼロの場合はスキップ
1101登録するLDレジスタ、# imm83レジスタk (=LD 0xf0+レジスタ、# k、1バイト短い)
111オフセットJP −表示53PC ← PC − 32 + offset ; 1~32バイト後方にジャンプ
76543210b2b3ニモニックサイクル説明
  1. ^ a b c d e f g h i j「機能ファミリ」(COP888/COP8SA) コアにのみ存在し、「基本ファミリ」(COP800) コアには存在しません。
  2. ^ a bインシステムプログラミング用のブートROMを備えた「フラッシュファミリ」(COP8TA/COP8C)モデルのみ。
  3. ^ a b c d e fオペランドは、プレフィックス付きの 8 ビット絶対アドレス(+2 バイト、+3 サイクル)に変更できます。[B]DIR

注目すべき用途

参考文献

  1. ^ a b c d「COP8SBR9/COP8SCR9/COP8SDR98ビットCMOSフラッシュベースマイクロコントローラ(32kメモリ、仮想EEPROM、ブラウンアウト機能搭載)」(PDF) (データシート)。ナショナル セミコンダクター。2002年4月。 2021年1月6日閲覧
  2. ^ a b COP8 基本ファミリ ユーザーズマニュアル(PDF) . リビジョン 002. National Semiconductor . 1996年6月. 文献番号 620895-002 . 2021年1月2日閲覧。
  3. ^ a b Aleaf, Abdul (1996年7月). 「COP878xと拡張COP8SAx7ファミリの比較 - ハードウェア/ソフトウェアの考慮事項」(PDF) .ナショナルセミコンダクター. アプリケーションノート1043.
  4. ^ COP8機能ファミリユーザーズマニュアル。リビジョン005。ナショナルセミコンダクター。1999年3月。資料番号620897-005。圧縮されたISO イメージ530094-003_COP8_Tools_Docs_Aug1999.zip から抽出され、2020 年 1 月 7 日に取得されました。
  5. ^ 「COP8SAx 設計者ガイド」(PDF) .ナショナルセミコンダクター. 1997年1月 . 文献番号 620894-001.
  6. ^ Liberatore, David (2006年5月11日). FMU-139C/B電子爆弾信管設計の最新情報(PDF) . 第50回NDIA信管会議. 2024年11月7日閲覧
  7. ^ Dennis, Marc; Hanrahan, Bob; Brackmann, Chris (1991年11月).アプリケーションノート761 - Electronic Fuzing (PDF) . Texas Instruments . 2024年11月7日閲覧