Small Risc Processor (SRP) LED BLINK


2012/12/24 ver1.0
作成

琉球大学工学部情報工学科 和田 知久

[] LED点滅プログラム

0から31をゆっくりと数えるカウントプログラムをC言語で書くと、以下のようなことになる。

A=32であり、カウントの上限値を指定している。

BB=1000000程度の値であり、点滅の遅延調整をする。

 

    int coun;

 

    for (count = 0; count < A; count++) {

        LEDcountの値に従って点灯させる;

    /* 時間遅延のためのループ */

        for (delay = 0; delay < B; delay++) {

          no operation

        }

    }

 

このプログラムによって、countの値はゆっくりと上昇する。

このcount値をメモリの最上位アドレス=508番地に書き込むと、その下位5ビットがLEDに転送されるようにHWが設計されている。

 

表5 データRAMの内容

 

 

データRAM

 

バイトアドレス

dramAdd入力

00

01

10

11

 

256

0

A=32

 

260

1

B=大きな値

 

264

2

1

 

268

3

0

 

272

4

0

 

276

5

0

 

280

6

0

 

284

7

0

 

 

0

 

 

 

0

 

 

 

0

 

 

 

0

 

 508

63 

count

 

表6 命令ROMの内容(バブルソートのプログラム)

 

 

命令ROMの内容

 

バイトアドレス

iromAdd入力

00

01

10

11

説明

0

0

NOP

No operation

4

1

LW R5, 264(R0)

R5<= 1

8

2

LW R1, 256(R0)

R1 <= 32 (A

12

3

LW R2, 260(R0)

R2 <= 大きな値 (B

16

4

ADD R3, R0, R0

R3 <= 0 (count値の初期化)

20

5

LOOP1: SW R3, 508(R8)

count値を508番地に転送 (LED点灯)

24

6

ADD R4, R0, R2

R4 <= 最大値 (delay値の初期化)

28

7

LOOP2: BEQ R4, R0, +2

delayループ脱出判定 なら10番地へ抜ける

32

8

SUB R4, R4, R5

R4 <= R4 1; delay値を1下げる

36

9

J 7

7番地へジャンプ、LOOP2

40

10

SLT R6, R3, R1

R3< R1=32ならR6 <= 1、違うならR6 <=0

44

11

BEQ R6, R0, +2

ループを超えたらループを抜ける14番地へ

48

12

ADD R3, R3, R5

R3 <= R3 + 1

52

13

J 5

5番地へジャンプ、LOOP1

56

14

NOP

No operation

60

15

J 1

無限ループ

64

16

 

 

68

17

 

 

72

18

 

 

76

19

 

 

80

20

 

 

84

21

 

 

88

22