計測自動制御学会東北支部 第 265 回：2011 年 6 月 28 日
資料番号 265-1

組み込み制御用小規模プロセッサの開発
The Development of the Small Type Processor for Embedded Control Systems

○松平功介

一條健司

成田明子

吉岡良雄

○Kosuke Matsudaira, Kenji Ichijo, Akiko Narita, Yoshio Yoshioka

弘前大学大学院理工学研究科
Graduate School of Science and Technology, Hirosaki University
要旨：電子製品などは SOC(System On Chip)で制作され、それを制御するために組み込まれるプロセッサには、チップのハードウェア資源を有効に活用するために小規模なものが求められている。例として SONY のVME(Virtual Mobile Engine)技術における動的再構成デバイスを制御する小規模プロセッサが挙げられる。
本報告では、組み込み制御用小規模プロセッサとして CPU1208 の開発を行い、その仕様と想定する制御、CPUコアの具体的な内部構成、プロセッサの具体的な実装について述べた。さらに、実装したプロセッサを活用するためのアセンブラ、動作させるためのアセンブリ言語によるモニタプログラムの紹介も行った。また、提案した小規模プロセッサ CPU1208 は CPLD MAX7000S EPM128SLC84-15 上に実装し、その使用マクロセル数は 89 と非常に小規模であることも述べた。
キーワード：CPU 設計(CPU Design)、CPLD(Complex Programmable Logic Device)、アセンブラ(Assembler)、モニタプログラム(Monitor Program)、組み込みシステム(Embedded System)

連絡先： 〒036-8561

青森県弘前市文京町３番地

TEL/FAX: (0172)39-3669,

弘前大学理工学部１号館 410 室

E-mail: h11gs517@stu.hirosaki-u.ac.jp

１．まえがきこ で 、 CPU1208 は ALTERA 社 の 開 発 ツ ー ル

近年の電子製品は SOC(System On Chip)で制作

QuartusⅡ 9.1sp2 Web Edition を用いて、ハードされ、チップ内のハードウェア資源を有効活用すウ ェ ア 記 述 言 語 VHDL(Very high speed

るために、電子製品を制御するために組み込まれintegrated

る CPU には小規模なものが求められている。例とLanguage) に よ っ て 記 述 す る 。 ま た 実 装 はして SONY の VME(Virtual Mobile Engine)技術

ALTERAにおける動的再構成デバイスを制御する小規模プ

EPM128SLC84-15 に行う。

circuit社

HardwareのCPLD

Description
MAX7000Sロセッサが挙げられる。そこで本報告では、組み込み制御用小規模プロセッサとして CPU1208(ア２．CPU1208 の仕様

ドレスバス 12-bit・8-bitCPU)を開発し、その仕様

本報告で示す小規模プロセッサ CPU1208 は単と実現方法について述べる。また、CPU1208 を活純な制御を想定して構成している。例えば、通信用するためのソフトウェアについても述べる。こ制御やセンサの信号に対するモータ等の制御であ図１．CPU1208 を用いたコンピュータシステム

る。ここでは開発した小規模プロセッサの仕様にと 24-bit の２種類ある。まず、ロード命令は３種ついて述べる。

類あり、即値型ロード(lda)、拡張型ロード(ldax)、CPU1208 を用いたコンピュータシステムを図間接型ロード(ldai)である。続いてストア命令は２１に示す。また、この CPU1208 の仕様は以下のよ種類で、拡張型ストア(stax)、間接型ストア(stai)うである。

である。演算命令は数値加算、論理積、論理和、[CPU1208 の仕様]

排他的論理和の４種類でそれぞれに即値型①アドレス空間は 12-bit である。

(adda,anda,ora,eora)と拡張型(addax,andax,orax,

・$000~$7F7：ROM 領域

eorax)がある。これらの演算命令の内、拡張型の・$7F8~$7FF：I/O 領域

andax, orax が前述した+α で、本来なら必要では・$800~$FFF：RAM 領域

ないが実装していても CPU のハードウェア量など②汎用レジスタは 8-bit レジスタ１つである。に与える影響はないので、現在は実装している。

③フラグは演算結果が 0 の時に１になる Z フラグ

これらは今後、別の命令と置き換え可能である。

のみである。

また、分岐命令として無条件分岐(jmp)、ビットテ④機械語命令は 16 種類あり、命令セットを表１にスト条件分岐(bitajze)、即値データ比較条件分岐示す。これらの命令は先に述べた制御をするため(equajze)がある。に必要な最低限の命令+α である。命令長は 16-bit
表１．実装している機械語命令
機械語
00 nn
1a dr
2a dr
3a dr
40 nn
50 nn
60 nn
70 nn
8a dr
9a dr
Aa dr
Ba dr
Ca d1 d2
Da dr nn
Ea d1 d2
Fa dr nn$nn
adr(adr)
AA + $nn
A and $nn
A or $nn
A eor $nn
A + (adr)
A and (adr)
A or (adr)A eor (adr)[(adr)]adr
A
adr→→→→→→→→→→→→→→→→操作
APCA(adr)
AAAAAAAAA
PC when(A and $nn =0)[(adr)]
PC when(A eor $nn =0)

ニーモニック
lda
jmp
ldax
stax
adda
anda
ora
eora
addax
andax
orax
eorax
ldai
bitajzestaiequajze図２．CPU コアの構成図

３．CPU コアの内部構成

表２．ALU 機能

２章の４つの仕様に基づいて CPU コアの設計を行った。その構成図が図２である。

A =仕様②で述べた 8-bit の汎用レジスタは A_reg でAAAA演算+ID
and IDorID
eor ID

IR(5) IR(4)00011011ある。A_reg に入力される信号には ALU の出力値

続いて CPU の状態遷移図を図３に、各状態でのと内部バスからの値があり、MUX_1 によってどち操作とそれに対応した命令・動作を表３に示す。

らかの値のみが選択される。命令レジスタ I_reg
は 8-bit レジスタでメモリから取り出したデータを格納する。その時、上位 4-bit をオペレーションコード、下位 4-bit をオペランドアドレス 12-bit の内の上位 4-bit とする。
TH_reg は 4-bit レジスタで、間接型の命令を実行するときに実効アドレスの上位 4-bit を格納する。TL_reg は 8-bit レジスタで、オペランドアドレス 12-bit の内の下位 8-bit、また、間接型命令の時は実効アドレスの下位 8-bit が格納される。PC は 12-bit のプログラムカウンタである。

図３．状態遷移図

ALU は 8-bit 演算機で A_reg の値と内部バスの値

表３．各状態での操作の演算をする。演算の種類は表２で示している４種類で加算、論理積、論理和、排他的論理和である。Z_log は仕様 3 で述べた Z フラグを生成する論理回路である。PC_lat は分岐命令の際に PC にラッチ信号を送る論理回路である。制御部はワイヤードロジック方式であり、SCT(Step CounTer)とI_reg 上位 4-bit の値を入力信号として制御信号を生成する論理回路から成っている。

状態
s0s1s2s3s4s5s6s7s8s9s10s11s12s13操作
M(PC)→IR, PC+M(PC)→A, PC+M(PC)→TRL, PC+
IRL&TRL→PC
M(IRL&TRL)→A
A→M(IRL&TRL)
A calc M(IRL&TRL)→A
A calc M(IRL&TRL), IRL&TRL→PC
A calc M(IRL&TRL)→A, PC+M(IRL&TRL)→TRH
M(PC)→TRL, PC+M(IRL&TRL)→TRL
M(TR)→AA→M(TR)

命令・動作
IR_latchlda
Addr_latch
jmpldax
stax
calcx
jze
calc
ldai,stai_1
ldai,stai_2
ldai,stai_3
ldai_4
stai_4まず CPU は s0 でメモリからデータをロードし信号を、１の時に ALU の出力信号を選択する。

I_reg にラッチする。そして I_reg の値から次の状IRL(Instruction Register Latch)は 1 の時に内部態を決定し遷移する。次に各状態での制御信号をバス信号を取りこむ。THL(Temp register High表４に示す。

Latch)は 1 の時に内部バス信号の下位 4-bit を

表４の制御信号は図２の制御信号と対応していTH_reg に 取 り 込 む 。 TLL(Temp register Lowる。TPS(TemP register Select)はアドレスバスにLatch) は 1 の 時 に 内 部 バ ス 信 号 を 取 り 込 む 。

信号を出力する際に、0 の時 PC の値を、1 の時THS(Temp register High Select)は 0 の時 I_reg の(I_reg or TH_reg)&TL_reg の値を選択する。

下 位 4-bit を 、 １ の 時 TH_reg を 選 択 す る 。

表４．各状態での制御信号

PCL(Program Counter Latch)は１の時、PC は状態 TPS VMA WR AL AS IRL THL TLL THS PCL BOZ PCI SCC
s0 0
10 0 0 1 00 0001 0s1 010 1 0 0 00 0001 1s2 010 0 0 0 01 0001 0s8 0
10 1 1 0 00 0001 1
s3 000 0 0 0 00 0100 1
s4 1
10 1 0 0 00 0
000 1
s5 1
1
1 0 0 0 00 0000 1
s6 1
10 1 1 0 00 0000 1
s7 0
1
0 0 0 0 00 00
1
1 1
s9 1
10 0 0 0 10 0000 0s10 0
1
0 0 0 0 0
1 000
1 0
s11 1
1
0 0 0 0 0
1 0000 0
s12 1
10 1 0 0 00 10
00 1
s13 1
1
1 0 0 0 00 1000 1

I_reg の 下 位 4-bit と TL_reg を 取 り 込 む 。
BOZ(Branch On Zeroflag)は、この信号が 1 の時にZ_log の出力信号が 1 であれば、PC は I_reg 下位4-bit と TL_reg を 取 り 込 む 。 PCI(ProgramCounter Increment)は１の時に PC の値を 1 増加させる信号である。SCC(Step Counter Clear)は１の時に SCT の値をクリアする信号である。

４．CPU1208 の具体的な実装方法
ここでは図 1 で示したコンピュータシステムをVMA(Valid Memory Address)は 1 の時にアドレス実現したものを示す。それが図４である。

バス上の信号が有効になる。WR(WRite)は１の時前述したように CPU コア(アドレスデコーダ含に A レジスタの内容を内部バスに出力する。AL(Aむ ) は VHDL で 記 述 し 、 CPLD MAX 7000S

register Latch)が 1 の時、MUX_1 の出力信号を取EPM128SLC84-15 に実装している。その使用マク

りこむ。AS(A register Select)は 0 の時に内部バスロセル数は 89 である。

図４．CPU1208 の具体的実装

５．ソフトウェア

dc、dw がある。

この章では開発した CPU1208 を活用するためのソフトウェアを紹介する。
5.1．アセンブラ
プログラムを記述する際に機械語命令コードでは非常に記述しづらい。そこで、本システム用のアセンブラを開発した。ここではアセンブリプロ
グラムから機械語プログラムに変換するアセンブ

表６．擬似命令

命令記述
org adrlabel equ adr
dc nn
dc 'abc---'dw adr

機能
プログラム先頭アドレス指定
等価命令(label = adr)
1-byte定数の記憶領域確保
文字列定数の記憶領域確保
2-byte定数の記憶領域確保

5.2. モニタプログラム

ラについて、その中で定義しているマクロ命令と続いて CPU1208 を動作させるためのモニタプ擬似命令を紹介する。マクロ命令が表５、擬似命ログラムを紹介する。そのアセンブリプログラム

令が表６である。また、次の 5.2 節ではモニタプロの一部を抜粋したのが図５である。

グラムのアセンブリ記述も図５で示している。
表５．マクロ命令

アセンブリ言語記述 機械語命令
lda #$1m
00 1m
stax adr1
3a dr1
lda #$nn
00 nn
stax adr1+1
3a dr1+1
jmp adr2
1a dr2
ret spjmp adr
1a drmove8 #$nn,addr
lda #$nn
00 nn
stax adr
3a drmove8 adr1,adr2
ldax adr1
2a dr1stax adr2
3a dr2
move16 #$mmnn,adr lda #$mm00 mm
stax adr
3a dr
lda #$nn
00 nn
stax adr+1
3a dr+1
move16 adr1,adr2
ldax adr1
2a dr1stax adr2
3a dr2
ldax adr1+1
2a dr1+1
stax adr2+1
3a dr2+1
inc1 adrldax adr
2a dr
adda #$01
40 01
stax adr
3a dr
dec1 adrldax adr
2a dr
adda #$ff
40 ff
stax adr
3a dr
命令記述
call adr2,adr1

図５．モニタプログラムのアセンブリ記述

図６はモニタプログラムの操作を表示した図である。モニタプログラムには表 7 に示す 3 つのコマンドを実装している。
表７．モニタプログラムコマンド

表５はマクロ命令で、命令の種類としてサブルーチンコール(call)と戻り命令(ret)、8-bit データ転送(move8)、16-bit データ転送(move16)、1 加算(inc1)、1 減算(dec1)がある。なお、表５の call 命
令での戻り番地はアセンブラで求めている。

コマンド
dsg動作
メモリダンプ
メモリ内容変更・プログラム格納プログラム実行

図６では s コマンドで$800 番地から機械語命令を格納し、d コマンドでメモリダンプを実行してい表６は擬似命令を示していて、メモリのどの番る。そして g コマンドで$800 番地から格納したプ地からプログラムを格納するかを指定する org 命

ログラムを実行している。ここで実行しているプ令と、等価命令 equ、定数の記憶領域を確保する

ログラムはハノイの塔のプログラムである。

図６．モニタプログラムの操作

６．まとめ
本報告では、開発した小規模プロセッサや、VHDL 記述の仕方によるさらなる小規模化を行う。

CPU1208 のコンピュータシステムと想定する制御を述べ、仕様を示し、CPU コアの具体的な内部参考文献

構成とコンピュータシステムの具体的な実装を示[1]吉岡良雄「手作り CPU(ハードウェア記述言語した。また、CPU1208 を活用するためのソフトウ

VHDL による)」、弘前大学出版会、(2006)

ェアとして、アセンブラで定義しているマクロ命[2]Virtual Mobile Engine(VME)「”変身する LSI”

令と擬似命令、CPU1208 をコマンドで動作させるが 超 低消 費 電力 ・多 機 能化 を 実現 」

モニタプログラムを紹介した。

http://www.sony.co.jp/Products/SC-HP/cx_pal/vol66/p

また、この CPU は小規模(マクロセル数：89)

df/sideview.pdf

であり、通信制御などの単純な制御をするために[3]吉岡良雄、一條健司「ハードウェア設計・演習

必要な命令は実装されているので、組み込み制御(基礎からプロセッサ設計まで)」、弘前大学出版会、用プロセッサとして有用である。

(2010)

今後は、対象を定めての実際の制御や、前述した仕様に基づいての、種々の構成の CPU の設計[4]AlteraCorporation「MAX7000

Programmable Logic Device Family Data Sheet」