MPLAB X IDEのSCLでデバッグ(4)

電子工作

PICマイコンの開発環境であるMPLAB X IDEに備わっているデバッグ用のプログラミング言語Stimulus Control Languageを使って、自作のPICプログラムをデバッグしてみる記録です。今回は変数と型について調べます。今回の内容はMicrochipのチュートリアルに書いてあった情報も参照しています。

変数

変数名

SCLでは変数を使えます。変数名として使える文字は半角英数字とアンダースコア('_')で、先頭の文字は英字でなければなりません。また大文字・小文字は区別します。
変数の定義はこのようにします。

variable 変数名1, 変数名2, 変数名3, … : 型;

同じ型の変数はカンマで区切って複数同時に宣言できます。もちろん一つの変数だけでも構いません。型については次節で説明します。

変数の宣言

変数の宣言はprocessブロックの中のbeginの直前に記述します。beginendの中に書くとエラーになるので注意しましょう。

testbench for "pic16f1705" is
begin
    process is
        variable v1, v2, v3 : integer;    // beginの前に書く
        variable x1 : bit;
    begin
        wait;
    end process;
end testbench;

自動的に宣言される変数

PICのSFR(Special Function Register)に対応する変数が自動的に生成されます。変数名はSFR名と同じです。SFR内のフィールドはピリオド('.')を挟んでフィールド名を指定することで参照できます。例えばADCON0レジスタのADONフィールド(bit0)は、「ADCON0.ADON」で参照できますし、複数ビットで構成されるCCP1CONレジスタのCCP1Mフィールド(bit3~bit0)も「CCP1CON.CCP1M」で参照可能です。それぞれのフィールドにビット値'1'及びビット列"1011"を代入する場合の文はこんな感じです。

ADCON0.ADON <= '1';  // bit型
CCP1CON.CCP1M <= B"1011";  // bit_vector型(多分)

SCLで扱うデータはすべて型を持ちます。型には最初から組み込まれている型のほか、ユーザが独自に型を定義することもできます。

組み込み型

SCLでは最初から定義済みの型があり、大きく分けて3種類の基本型(スカラー型、列挙型、物理量型)と配列型があります。

スカラー型

ある数値の範囲を表す型です。

型名 意味
integer 符号付き32ビット整数 (-2,147,483,647~+2,147,483,647)
byte 符号無し8ビット整数 (0~0xFF)
word 符号無し16ビット整数 (0~0xFFFF)
daddress 符号無し24ビット整数 (0~0xFFFFFF)
paddress 符号無し24ビット整数 (0~0xFFFFFF)

列挙型

特定の値のみ取ることができる型です。

型名 取りうる値
bit '0', '1'  (数字の0と1ではなく1文字の'0'と'1'であることに注意)
boolean false, true
character ' ', '!', '"', '#', '$', '%', '&', ''',
'(', ')', '*', '+', ',', '-', '.', '/',
'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', ':', ';', '<', '=', '>', '?',
'@', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
'X', 'Y', 'Z', '[', '\', ']', '^', '_',
'`', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
'x', 'y', 'z', '{', '|', '}', '~'
severity_level note, warning, error, failure
file_open_kind read_mode, write_mode, append_mode
file_open_status open_ok, status_error, name_error, mode_error
vector_file_mode binary_mode, hex_mode, formatted_mode, dec_mode

物理量型

何らかの物理量を表す型で、単位を持ちます。

型名 取り得る単位 単位の意味
time ps ピコ秒
ns ナノ秒
us マイクロ秒
ms ミリ秒
sec
min
hr 時間
cycle ic 命令サイクル
frequency hz Hz
khz kHz (=1000Hz)
mhz MHz (= 1000kHz)
voltage mV ミリボルト
V ボルト (=1000mV)

単位は定数を指定するときに使います。例えば10マイクロ秒待つ、という文を書く場合は「wait for 10 us」のように数値の後ろに空白文字を挟んで単位を記述します。

配列型

基本となる型の値を並べて参照できるようにした型です。

型名 基本となる型
bit_vector bit
string character

しかし配列型の使い方がよく分からない。宣言時に配列サイズは指定しなくてよいのか、process中伝承する場合の添え字の指定の仕方、などなど。ここは後日調べようと思います。

ユーザ定義型

ユーザ独自の型を定義できます。

スカラー型の定義

取り得る値の最小値と最大値を指定して型を定義します。

type 型名 is range 最小値 to 最大値;

列挙型の定義

取りうる値を列挙して型を定義します。

type 型名 is (値1, 値2, …);

物理量型の定義

取りうる値の範囲と単位を指定して型を定義します。

type 型名 is range 最小値 to 最大値
  units 基本単位;
    拡張単位1 = 指数 基本単位;
    拡張単位2 = 指数 拡張単位1;
    ...
  end units;

ちょっと分かりにくいので、組み込み型voltageの定義はこうなっています。

type voltage is range -9223372036854775807 to 9223372036854775807
   units mV;
      V  = 1000 mV;
      kV = 1000 V;
   end units;

配列型の定義

以下のように、基本型を指定して型を定義します。

type 型名 is array (integer range<>) of 基本型;

例えばbit_vector型の定義はこのようになります。

type bit_vector is array (integer range <>) of bit;

SCL記事一覧

コメント

タイトルとURLをコピーしました