構造体

概要

概念、使い道

強く関連をもつ変数・定数をグルーピングして使用するための方法です。
同じ型をまとめる場合は、配列を使います。同様に、異なる型をまとめる場合に構造体を使います。

おもな構成

  • 構造体は、複数の異なる変数・定数を持つことができます。
  • 構造体に含まれる変数・定数をメンバと呼びます。

使用例

配列と構造体の比較
  • 配列

bit [7:0] data;
data      = 8'h5A;
data[1]   = 1'b0;
data[2:0] = 3'b110;
bit型を8個まとめて扱います。

  • 構造体

struct {
  int  x;
  int  y;
  real dx;
  real dy;
} point;

point.x  = 10;
point.y  = 20;
point.dx = 0.925;
point.dy = 3.2;
座標や加速度を示す変数をpointという名前でまとめて扱います。

構文

無名構造体

  • 構造体を直接インスタンスします。
  • 基本的に使用することはないと思います。
    • うまい使い方があったら教えてください。
サンプル
  1. 宣言する
hogeという無名構造体を宣言します。
無名構造体は宣言と同時にインスタンスが行われます。

struct {
  int a;
  int b;
  bit [7:0] data;
  bit [7:0] address;
} hoge;

  1. 使用する

hoge.a = 5;
hoge.b = hoge.a + 2;  // hoge.bは7になる

型名付き構造体

構造体をユーザー定義型として、宣言します。

typedef struct {
  int a;
  int b;
  bit [7:0] data;
  bit [7:0] address;
} hoge_type;
あくまで「型の宣言」なので、実体はありません。
moduleやfunction,taskもそうですが、宣言しただけでは使われません。


hoge_type foo;
hoge_type bar;

foo.a    = 5;
bar.data = 8'hD0;
通常は、ユーザー定義型として型を定義(→hoge_type)したのち、名前をつけてインスタンスします。


hoge_type foo[10];
hoge_type bar[];

bar = new[20];

foo[1].address   = 8'h20;
bar[8].data[3:0] = 4'b0110;
配列での確保も可能です。

代入




初期化

インスタンス時に、初期値を設定できます。

hoge_type foo = { 10, 20, 8'h55 ,8'hAA };
a=10,b=20,data=8'h55,address=8'hAAに設定されます。

代入



注意


Top > 言語 > verilog > リファレンス > 構文 > 構造体
link_pdfプラグインはご利用いただけなくなりました。























-

最終更新:2008年12月03日 16:01