HWC/Verilog/文法
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
* Verilog文法 [#d74cf79c]
#contents
*構文 [#reb0b2db]
**数値 [#ra1d288c]
***論理値 [#v9ea9e8c]
, 0 , Lo (False)
, 1 , Hi (True)
, x , 不定
, z , ハイインピーダンス
***データ型 [#p973a02e]
※SystemVerilogで追加されたデータ型 logic を使用する
, ネット型/レジスタ型, logic ,配線‚FFやラッチなどに...
, ネット型 , wire ,配線に対応する変数 ,assign文内等で値を...
, レジスタ型 , reg ,配線‚FFやラッチ等に対応 ,always...
***定数 [#d09378f7]
><ビット幅>'<基数><定数値>
-<ビット幅>
>ビット幅を10進数で表現する。省略すると32ビット幅となる。
-<基数>
b : 2進数, h : 16進数, d : 10進数
-<定数値>
><基数>に対応する数値で表現する。数値の区切りに'_'を使用...
8ビットで定数値"200d"を表現
→ 8'b11001000 <=> 8'b1100_1000 <=> 8'hc8 <=> 8'd200
***符号付きデータ (Verilog 2001 ) [#je60b0c5]
-符号付き変数
変数宣言時に,"signed"をつけると,符号付きデータとして扱...
wire signed [n:0] signed_wire; // 符号付き
wire unsigned [n:0] unsigned_wire; // 符号なし
wire [n:0] unsigned_wire2; // "unsigned"は省略可
Verilog-95では常にunsignedの扱い
-符号付き定数
基数の前に"s"をつけると,符号付き定数となる。
<ビット幅>'s<基数><定数値>
-signed, unsignd型変換
次のシステムタスクにより,型変換が可能。
$signed() // unsignedからsignedに変換
$unsigned() // signedからunsignedに変換
signed変数は,代入や演算時に自動的に符号ビットが拡張され...
signed [7:0] sign_b_data;
unsigned [7:0] unsign_b_data;
unsigned [15:0] w_data;
とするとき,以下の3つの代入式は等価。
w_data = { {8{unsign_b_data[7]}}, unsign_b_data } //...
w_data = sign_b_data //...
w_data = $signed( unsign_b_data ) //...
#br
**演算子 [#b41e357d]
***算術演算 [#rf8a20c4]
, 演算子 , 演算
, + ,加算
, - ,減算
, * ,乗算 : たぶん合成可
, / ,除算 : たぶん合成不可
, % ,剰余 : たぶん合成不可
***比較演算 [#naa9f354]
, 演算子 , 演算
, == ,equal
, != ,not equal
, < ,grater than
, =< ,grater or equal
, > ,less than
, >= ,less or equal
***ビット演算 [#tfc75b99]
, 演算子 , 演算
, ~ ,NOT
, & ,AND
, | ,OR
, ^ ,EXOR
, ~^ ,EXNOR
>ビット単位で論理演算を行う
a = 4'b1100
b = 4'b0101
→ ~a = 4'b0011
a & b = 4'b0100
a | b = 4'b1101
※ オペランドが1ビットのときは論理演算と等価
***論理演算 [#uca221fc]
, 演算子 , 演算
, ! ,論理否定
, && ,論理積
, || ,論理和
>オペランドが0のときFalse(1'b0),0以外のときTrue(1'b1)と...
a = 4'b0101
b = 4'b0000
→ !a = 1'b0
a && b = 1'b0
a || b = 1'b1
***リダクション演算 [#y06295cd]
, 演算子 , 演算
, & ,AND
, ~& ,NAND
, | ,OR
, ~| ,NOR
, ^ ,EXOR
, ~^ ,EXNOR
>変数の先頭につけることにより,単項演算を行う。
aが4ビット信号の場合,
→ & a = a[3] & a[2] & a[1] & a[0]
| a = a[3] | a[2] | a[1] | a[0]
***その他 [#w340a30a]
, 演算子 , 演算
, ? : ,条件演算
, {} ,連接
-条件演算
>VHDLのwhen - else文に相当
if a then d=b else d=c
→ d = a ? b : c
-連接
>データを連結する
a = 2'b01
b = 2'b10
→ {a, b} = 4'b0110
--連接の繰り返し
{<繰り返し数>{<データ列>}}
a = 2'b01
→ {3{a}} == {a, a, a} => 6'b010101 // "a"を3回繰り...
#br
**条件分岐 [#xa5b9193]
***if文 [#je961568]
if <式> {else if <ステートメント>} (else <ステートメント>)
-else, else ifは必要なければなくてもOK
-begin,endで囲って複数のステートメントを記述可能
// 0 <= a < 32 → size = 0
// 32 <= a < 63 → size = 1
// 64 <= a < 127 → size = 2
// 128 <= a → size = 3
if( a >= 8'd128 )
size = 2'b11;
else if( a >= 8'd64 )
size = 2'b10;
else if( a >= 8'd32 ) begin // <- begin endで囲って...
size = 2'b01;
end
else
size = 2'b00;
***case文 [#x1f5e0fd]
case( <条件式0> )
<条件式1> : <ステートメント1>
<条件式2> : <ステートメント2>
…
default : <ステートメントdef>
endcase
-<条件式0>==<条件式n> = 1(True)のとき,ステートメントnを...
-いずれの条件にも当てはまらないときはdefaultを実行
// デコーダ
case( count ) // synopsys parallel_case <- おまじない(...
2'b00 : dec = 4'b0001;
2'b01 : dec = 4'b0010;
2'b10 : dec = 4'b0100;
2'b11 : dec = 4'b1000;
default : dec = 4'bx; // この場合は(明らかにフルケ...
endcase
&color(red){※ ''注意!!'' : Verilogのcase文は,パラレルエ...
>パラレルエンコーダを推定できない場合は,記述順のプライオ...
ただし,上記のデコーダの記述(条件が重複しないことが容易に...
"parallel_case"ディレクティブ(記述例中の"synopsys paralle...
上記ディレクティブは,DesignCompilerスペシフィックである...
以下のような記述は,設計者がパラレルエンコーダを意図(dec0...
case( 1'b1 ) // 常にTrue(文法的にはアリ)
dec0 : enc = 2'b00;
dec1 : enc = 2'b01;
dec2 : enc = 2'b10;
dec3 : enc = 2'b11;
default : enc = 2'bx;
end
''「プライオリティエンコーダは常にif文,パラレルエンコー...
条件式を複数まとめたい時にはcomma区切りが使える。
case( cond ) // synopsys_parallel_case
C_COND1, COND2 :
sig <= data_a;
C_COND3 :
sig <= data_b;
default :
sig <= data_x;
endcase
case文中での代入はnon-blockingでも組み合わせ回路としての...
変わらないが、blocking代入にしておくとfunction内での記述...
function [7:0] selector;
input [7:0] data_a, data_b, data_c;
input [1:0] sel;
//
case( sel ) // synopsys_parallel_case
2'b00 :
selector = data_a; // OK
//
2'b01 :
selector <= data_b; // Error
//
2'b10 :
selector = data_c;
//
default :
selector = 8'bx;
endcase
endfunction // selector()
#br
**組み合わせ回路 [#o9c960e2]
***assign文 [#q31e8778]
小さい(1行程度で収まる)組み合わせ回路の記述に用いる。
assign a = b + c; // a = b + c
assign d = e ? f : g; // if e then d = f else d = g
>"a","d"はwire宣言する。
***alwaysブロック [#s3a6c376]
>比較的大きい組み合わせ回路の記述に用いる。
-Verilog 95
always @(op or b or c) begin
case( op )
2'b00 : a <= b + c;
2'b01 : a <= b - c;
2'b10 : a <= b * c;
default : a <= 8'hx;
endcase
end
>センシティビティリスト内には,入力信号を"or"で区切ってす...
>"a"はreg宣言する。
-Verilog 2001
>センシティビティリスト内の信号の区切りはVHDLのように","...
always @(op, b, c) …
>センシティビティリストが"*"でも可。
always @* …
※ センシティビティリスト漏れの心配がないので,RTL simとゲ...
-SystemVerilog
always_comb begin
case( op )
2'b00 : a <= b + c;
2'b01 : a <= b - c;
2'b10 : a <= b * c;
default : a <= 8'hx;
endcase
end
>センシティビティリストの記述は不要。
***functionブロック [#qf1f40e8]
function文での組み合わせ回路記述例
assign data_out = selector( in_a, in_b, in_c, in_d, sel );
function [7:0] selector;
input [7:0] in_a, in_b, in_c, in_d;
input [1:0] sel;
//
case( sel ) // synopsys_parallel_case
2'b00 : selector = in_a;
2'b01 : selector = in_b;
2'b10 : selector = in_c;
2'b11 : selector = in_d;
endcase
endfunction // selector()
#br
**順序回路 [#ua10613f]
***FF記述 [#u623b1cf]
-Verilog 95
> 非同期リセット付8ビットバイナリカウンタ記述例
always @(posedge CLK or negedge RST_X) begin // CLKの立...
if( !RST_X ) // RST_X = 0でリセット
a <= 8'h00;
else if( count_up ) // count_up = 1でカウントアップ
a <= a + 1'b1;
end
-SystemVerilog
> 非同期リセット付8ビットバイナリカウンタ記述例
always_ff @(posedge CLK or negedge RST_X) begin // CLK...
if( !RST_X ) // RST_X = 0でリセット
a <= 8'h00;
else if( count_up ) // count_up = 1でカウントアップ
a <= a + 1'b1;
end
***ラッチ記述 [#wf7ab5ec]
-Verilog 95
always @(gate) begin // gateのレベルセンシティブ
if( gate )
a <= b;
end
-SystemVerilog
always_latch begin // gateのレベルセンシティブ
if( gate )
a <= b;
end
#br
**モジュール構造 [#f77865eb]
***Verilog 95 [#gb18a673]
module モジュール名( ポートリスト );
ポート宣言
パラメータ宣言
ネット宣言
ファンクション記述
サブモジュール接続
etc.
endmodule
- モジュール名/ポートリスト
module module_name( PORT1, PORT2, … );
>モジュール名: モジュール(VHDLではentity)の名前を定義する。
>ポートリスト: ポート名をカンマで区切って列挙する。
- ポート宣言
>input/inout/output <レンジ> <信号名>;~
文末はセミコロンで区切る。
input PORT1; // 1ビット入力ポート"PORT1"の宣言
inout [1:0] PORT2; // 2ビット双方向ポート"PORT2"の宣言
output [7:0] PORT3; // 8ビット出力ポート"PORT3"の宣言
- パラメータ宣言
>モジュール内で有効な定数の宣言
>parameter <レンジ> <パラメータ名> = <定数>;
parameter PARAM1 = 1'b1; // 定数"PARAM1"に"1b"を...
parameter [7:0] PARAM2 = 8'hff; // 定数"PARAM2"に"FFh"...
- ネット宣言
>モジュール内で有効な内部信号(VHDLではsignal)の宣言
>wire/reg <レンジ> <信号名>;
wire WIRE1; // 1ビット信号"WIRE1"の宣言
wire [7:0] WIRE2; // 8ビット信号"WIRE2"の宣言
reg [7:0] REG1; // 8ビット信号"REG1"の宣言
>always文で値を代入する変数はreg,それ以外の変数(assign文...
- ファンクション記述(VHDLのarchitecture内のbegin~endに相...
>モジュールの動作を記述する。(assign, always, function等)
- サブモジュール接続
><サブモジュール名> <インスタンス名> ( .ポート名(接続信号...
submodule u_submodule
( .PORT1( PORT1 ),
.PORT2( PORT2 ),
… );
***Verilog 2001 [#i2bdab5f]
Verilog 2001では,ポートリスト内でポート宣言が可能。
module MODULE1(
input wire PORT1, // 1ビット入力ポート"PORT...
inout wire [1:0] PORT2, // 2ビット双方向ポート"PO...
output reg [7:0] PORT3, // 8ビット出力ポート"PORT...
… );
パラメータの宣言も可能(ModelSim, Design Compiler, Formali...
module MODULE1
#(
parameter P_ADDRMAX = 4'15,
parameter P_BITW = 32)
(
input CLK,
input RST_X,
...
...);
パラメータを外部ファイルで宣言する場合は注意.
module MODULE1
#(`include "param.vh")
(
input CLK,
input RST_X,
...
...);
# param.vh
parameter P_ADDRMAX = 4'15;
parameter P_BITW = 32;
とした場合,Verdiではエラーにならないが,ModelSimでは終端...
パラメータを外部ファイルで宣言する場合は次のようにするの...
module MODULE1
(/*AUTOARG*/
CLK,
RST_X,
...
...);
`include "param.vh"
input wire CLK;
input wire RST_X;
...
...
# param.vh
parameter P_ADDRMAX = 4'15;
parameter P_BITW = 32;
emacsでVerilog modeを利用している場合は,この例のように /...
終了行:
* Verilog文法 [#d74cf79c]
#contents
*構文 [#reb0b2db]
**数値 [#ra1d288c]
***論理値 [#v9ea9e8c]
, 0 , Lo (False)
, 1 , Hi (True)
, x , 不定
, z , ハイインピーダンス
***データ型 [#p973a02e]
※SystemVerilogで追加されたデータ型 logic を使用する
, ネット型/レジスタ型, logic ,配線‚FFやラッチなどに...
, ネット型 , wire ,配線に対応する変数 ,assign文内等で値を...
, レジスタ型 , reg ,配線‚FFやラッチ等に対応 ,always...
***定数 [#d09378f7]
><ビット幅>'<基数><定数値>
-<ビット幅>
>ビット幅を10進数で表現する。省略すると32ビット幅となる。
-<基数>
b : 2進数, h : 16進数, d : 10進数
-<定数値>
><基数>に対応する数値で表現する。数値の区切りに'_'を使用...
8ビットで定数値"200d"を表現
→ 8'b11001000 <=> 8'b1100_1000 <=> 8'hc8 <=> 8'd200
***符号付きデータ (Verilog 2001 ) [#je60b0c5]
-符号付き変数
変数宣言時に,"signed"をつけると,符号付きデータとして扱...
wire signed [n:0] signed_wire; // 符号付き
wire unsigned [n:0] unsigned_wire; // 符号なし
wire [n:0] unsigned_wire2; // "unsigned"は省略可
Verilog-95では常にunsignedの扱い
-符号付き定数
基数の前に"s"をつけると,符号付き定数となる。
<ビット幅>'s<基数><定数値>
-signed, unsignd型変換
次のシステムタスクにより,型変換が可能。
$signed() // unsignedからsignedに変換
$unsigned() // signedからunsignedに変換
signed変数は,代入や演算時に自動的に符号ビットが拡張され...
signed [7:0] sign_b_data;
unsigned [7:0] unsign_b_data;
unsigned [15:0] w_data;
とするとき,以下の3つの代入式は等価。
w_data = { {8{unsign_b_data[7]}}, unsign_b_data } //...
w_data = sign_b_data //...
w_data = $signed( unsign_b_data ) //...
#br
**演算子 [#b41e357d]
***算術演算 [#rf8a20c4]
, 演算子 , 演算
, + ,加算
, - ,減算
, * ,乗算 : たぶん合成可
, / ,除算 : たぶん合成不可
, % ,剰余 : たぶん合成不可
***比較演算 [#naa9f354]
, 演算子 , 演算
, == ,equal
, != ,not equal
, < ,grater than
, =< ,grater or equal
, > ,less than
, >= ,less or equal
***ビット演算 [#tfc75b99]
, 演算子 , 演算
, ~ ,NOT
, & ,AND
, | ,OR
, ^ ,EXOR
, ~^ ,EXNOR
>ビット単位で論理演算を行う
a = 4'b1100
b = 4'b0101
→ ~a = 4'b0011
a & b = 4'b0100
a | b = 4'b1101
※ オペランドが1ビットのときは論理演算と等価
***論理演算 [#uca221fc]
, 演算子 , 演算
, ! ,論理否定
, && ,論理積
, || ,論理和
>オペランドが0のときFalse(1'b0),0以外のときTrue(1'b1)と...
a = 4'b0101
b = 4'b0000
→ !a = 1'b0
a && b = 1'b0
a || b = 1'b1
***リダクション演算 [#y06295cd]
, 演算子 , 演算
, & ,AND
, ~& ,NAND
, | ,OR
, ~| ,NOR
, ^ ,EXOR
, ~^ ,EXNOR
>変数の先頭につけることにより,単項演算を行う。
aが4ビット信号の場合,
→ & a = a[3] & a[2] & a[1] & a[0]
| a = a[3] | a[2] | a[1] | a[0]
***その他 [#w340a30a]
, 演算子 , 演算
, ? : ,条件演算
, {} ,連接
-条件演算
>VHDLのwhen - else文に相当
if a then d=b else d=c
→ d = a ? b : c
-連接
>データを連結する
a = 2'b01
b = 2'b10
→ {a, b} = 4'b0110
--連接の繰り返し
{<繰り返し数>{<データ列>}}
a = 2'b01
→ {3{a}} == {a, a, a} => 6'b010101 // "a"を3回繰り...
#br
**条件分岐 [#xa5b9193]
***if文 [#je961568]
if <式> {else if <ステートメント>} (else <ステートメント>)
-else, else ifは必要なければなくてもOK
-begin,endで囲って複数のステートメントを記述可能
// 0 <= a < 32 → size = 0
// 32 <= a < 63 → size = 1
// 64 <= a < 127 → size = 2
// 128 <= a → size = 3
if( a >= 8'd128 )
size = 2'b11;
else if( a >= 8'd64 )
size = 2'b10;
else if( a >= 8'd32 ) begin // <- begin endで囲って...
size = 2'b01;
end
else
size = 2'b00;
***case文 [#x1f5e0fd]
case( <条件式0> )
<条件式1> : <ステートメント1>
<条件式2> : <ステートメント2>
…
default : <ステートメントdef>
endcase
-<条件式0>==<条件式n> = 1(True)のとき,ステートメントnを...
-いずれの条件にも当てはまらないときはdefaultを実行
// デコーダ
case( count ) // synopsys parallel_case <- おまじない(...
2'b00 : dec = 4'b0001;
2'b01 : dec = 4'b0010;
2'b10 : dec = 4'b0100;
2'b11 : dec = 4'b1000;
default : dec = 4'bx; // この場合は(明らかにフルケ...
endcase
&color(red){※ ''注意!!'' : Verilogのcase文は,パラレルエ...
>パラレルエンコーダを推定できない場合は,記述順のプライオ...
ただし,上記のデコーダの記述(条件が重複しないことが容易に...
"parallel_case"ディレクティブ(記述例中の"synopsys paralle...
上記ディレクティブは,DesignCompilerスペシフィックである...
以下のような記述は,設計者がパラレルエンコーダを意図(dec0...
case( 1'b1 ) // 常にTrue(文法的にはアリ)
dec0 : enc = 2'b00;
dec1 : enc = 2'b01;
dec2 : enc = 2'b10;
dec3 : enc = 2'b11;
default : enc = 2'bx;
end
''「プライオリティエンコーダは常にif文,パラレルエンコー...
条件式を複数まとめたい時にはcomma区切りが使える。
case( cond ) // synopsys_parallel_case
C_COND1, COND2 :
sig <= data_a;
C_COND3 :
sig <= data_b;
default :
sig <= data_x;
endcase
case文中での代入はnon-blockingでも組み合わせ回路としての...
変わらないが、blocking代入にしておくとfunction内での記述...
function [7:0] selector;
input [7:0] data_a, data_b, data_c;
input [1:0] sel;
//
case( sel ) // synopsys_parallel_case
2'b00 :
selector = data_a; // OK
//
2'b01 :
selector <= data_b; // Error
//
2'b10 :
selector = data_c;
//
default :
selector = 8'bx;
endcase
endfunction // selector()
#br
**組み合わせ回路 [#o9c960e2]
***assign文 [#q31e8778]
小さい(1行程度で収まる)組み合わせ回路の記述に用いる。
assign a = b + c; // a = b + c
assign d = e ? f : g; // if e then d = f else d = g
>"a","d"はwire宣言する。
***alwaysブロック [#s3a6c376]
>比較的大きい組み合わせ回路の記述に用いる。
-Verilog 95
always @(op or b or c) begin
case( op )
2'b00 : a <= b + c;
2'b01 : a <= b - c;
2'b10 : a <= b * c;
default : a <= 8'hx;
endcase
end
>センシティビティリスト内には,入力信号を"or"で区切ってす...
>"a"はreg宣言する。
-Verilog 2001
>センシティビティリスト内の信号の区切りはVHDLのように","...
always @(op, b, c) …
>センシティビティリストが"*"でも可。
always @* …
※ センシティビティリスト漏れの心配がないので,RTL simとゲ...
-SystemVerilog
always_comb begin
case( op )
2'b00 : a <= b + c;
2'b01 : a <= b - c;
2'b10 : a <= b * c;
default : a <= 8'hx;
endcase
end
>センシティビティリストの記述は不要。
***functionブロック [#qf1f40e8]
function文での組み合わせ回路記述例
assign data_out = selector( in_a, in_b, in_c, in_d, sel );
function [7:0] selector;
input [7:0] in_a, in_b, in_c, in_d;
input [1:0] sel;
//
case( sel ) // synopsys_parallel_case
2'b00 : selector = in_a;
2'b01 : selector = in_b;
2'b10 : selector = in_c;
2'b11 : selector = in_d;
endcase
endfunction // selector()
#br
**順序回路 [#ua10613f]
***FF記述 [#u623b1cf]
-Verilog 95
> 非同期リセット付8ビットバイナリカウンタ記述例
always @(posedge CLK or negedge RST_X) begin // CLKの立...
if( !RST_X ) // RST_X = 0でリセット
a <= 8'h00;
else if( count_up ) // count_up = 1でカウントアップ
a <= a + 1'b1;
end
-SystemVerilog
> 非同期リセット付8ビットバイナリカウンタ記述例
always_ff @(posedge CLK or negedge RST_X) begin // CLK...
if( !RST_X ) // RST_X = 0でリセット
a <= 8'h00;
else if( count_up ) // count_up = 1でカウントアップ
a <= a + 1'b1;
end
***ラッチ記述 [#wf7ab5ec]
-Verilog 95
always @(gate) begin // gateのレベルセンシティブ
if( gate )
a <= b;
end
-SystemVerilog
always_latch begin // gateのレベルセンシティブ
if( gate )
a <= b;
end
#br
**モジュール構造 [#f77865eb]
***Verilog 95 [#gb18a673]
module モジュール名( ポートリスト );
ポート宣言
パラメータ宣言
ネット宣言
ファンクション記述
サブモジュール接続
etc.
endmodule
- モジュール名/ポートリスト
module module_name( PORT1, PORT2, … );
>モジュール名: モジュール(VHDLではentity)の名前を定義する。
>ポートリスト: ポート名をカンマで区切って列挙する。
- ポート宣言
>input/inout/output <レンジ> <信号名>;~
文末はセミコロンで区切る。
input PORT1; // 1ビット入力ポート"PORT1"の宣言
inout [1:0] PORT2; // 2ビット双方向ポート"PORT2"の宣言
output [7:0] PORT3; // 8ビット出力ポート"PORT3"の宣言
- パラメータ宣言
>モジュール内で有効な定数の宣言
>parameter <レンジ> <パラメータ名> = <定数>;
parameter PARAM1 = 1'b1; // 定数"PARAM1"に"1b"を...
parameter [7:0] PARAM2 = 8'hff; // 定数"PARAM2"に"FFh"...
- ネット宣言
>モジュール内で有効な内部信号(VHDLではsignal)の宣言
>wire/reg <レンジ> <信号名>;
wire WIRE1; // 1ビット信号"WIRE1"の宣言
wire [7:0] WIRE2; // 8ビット信号"WIRE2"の宣言
reg [7:0] REG1; // 8ビット信号"REG1"の宣言
>always文で値を代入する変数はreg,それ以外の変数(assign文...
- ファンクション記述(VHDLのarchitecture内のbegin~endに相...
>モジュールの動作を記述する。(assign, always, function等)
- サブモジュール接続
><サブモジュール名> <インスタンス名> ( .ポート名(接続信号...
submodule u_submodule
( .PORT1( PORT1 ),
.PORT2( PORT2 ),
… );
***Verilog 2001 [#i2bdab5f]
Verilog 2001では,ポートリスト内でポート宣言が可能。
module MODULE1(
input wire PORT1, // 1ビット入力ポート"PORT...
inout wire [1:0] PORT2, // 2ビット双方向ポート"PO...
output reg [7:0] PORT3, // 8ビット出力ポート"PORT...
… );
パラメータの宣言も可能(ModelSim, Design Compiler, Formali...
module MODULE1
#(
parameter P_ADDRMAX = 4'15,
parameter P_BITW = 32)
(
input CLK,
input RST_X,
...
...);
パラメータを外部ファイルで宣言する場合は注意.
module MODULE1
#(`include "param.vh")
(
input CLK,
input RST_X,
...
...);
# param.vh
parameter P_ADDRMAX = 4'15;
parameter P_BITW = 32;
とした場合,Verdiではエラーにならないが,ModelSimでは終端...
パラメータを外部ファイルで宣言する場合は次のようにするの...
module MODULE1
(/*AUTOARG*/
CLK,
RST_X,
...
...);
`include "param.vh"
input wire CLK;
input wire RST_X;
...
...
# param.vh
parameter P_ADDRMAX = 4'15;
parameter P_BITW = 32;
emacsでVerilog modeを利用している場合は,この例のように /...
ページ名: