前川/研究のための/VerilogHDL
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[前川/研究のための]]
-組合せ回路 => assign文
-より記述性の高い組合せ回路 => always@ブロック
--always@ブロックを用いて組合せ回路を作る時の注意点
+++代入時左辺はregで。
+++always@()の()の中に動作を実行するきっかけとなる信号をすべて入れる。
+++always@()の()の中にposedgeやnegedgeを書いちゃダメ。
+++左辺に登場する変数は絶対更新させる。なにがなんでも!
---やらないとレベルセンシティブラッチになってします。
---ifの時はelseを。
---caseのときはdefaultを。
-たくさんの手続きによる組合せ回路 => function
-zはハイインピーダンス。
-組合せ回路の乗除余算は規模が大きくなりがち。=>マッピングできないかも。
-信号名に統一性を。
--モジュールの頭文字_信号の意味_in or out_番号(各モジュール内)
--(To)モジュールの頭文字_(From)モジュールの頭文字_信号の意味_in or out_番号(トップモジュール)
-次7章セルベース/ゲートアレイ方式マッピングからあと2、3も
[[前川/研究のための]]
*メモ [#d257e67e]
**ファイル入出力システムについて [#f2027f84]
-ファイルオープン
integer (or reg) ファイル変数;
initial ファイル変数 = &fopen = ("ログファイル");
-ファイルへの書き込み
--以下のシステムタスクを利用。
|システムタスク|動作|
|$fdisplay|改行して書き込み|
|$fwrite|改行せず書き込み|
|$fmonitor|信号に変化時に書き込み|
|$fstrobe|すべてのイベント終了後書き込み|
-
システムタスク(ファイル変数,"書式フォーマット",信号名);
-ファイルクローズ
--2つのタイミングで終了
---シミュレーション終了時。
---明示的にファイルをクローズ時。
-
$fclose(ファイル変数);
-例
interger memo;
initial memo = $fopen = ("dump.log");
always begin
$fwrite(memo, "time(%t): CLK = %b\n", $time, CKL);
end
**function [#kfd93d3b]
-組み合わせ回路記述
-assignでは記述できない複雑な論理を記述する時に。
function[レンジ] function name;
入力ネット名;
ローカルレジスタ名;
ステートメント{
・begin 〜 end
・=演算子
・if ブロック または if ブロック else ブロック
・case
・casez
・casex
};
-例
module decoder_2_4 (in, out, en);
input [1:0] in;
input en;
output [3:0] out;
//----------------------------------
function [3:0] dec;
input [1:0] in;
input en;
begin
if (en == 1)
case (in)
2'b00 : dec = 4'b0001;
2'b01 : dec = 4'b0010;
2'b10 : dec = 4'b0100;
2'b11 : dec = 4'b1000;
default : dec = 4'bxxxx;
endcase
else
dec = 4'b0000;
end
endfunction
//-------------------------------------
assign out = dec(in, en);
終了行:
[[前川/研究のための]]
-組合せ回路 => assign文
-より記述性の高い組合せ回路 => always@ブロック
--always@ブロックを用いて組合せ回路を作る時の注意点
+++代入時左辺はregで。
+++always@()の()の中に動作を実行するきっかけとなる信号をすべて入れる。
+++always@()の()の中にposedgeやnegedgeを書いちゃダメ。
+++左辺に登場する変数は絶対更新させる。なにがなんでも!
---やらないとレベルセンシティブラッチになってします。
---ifの時はelseを。
---caseのときはdefaultを。
-たくさんの手続きによる組合せ回路 => function
-zはハイインピーダンス。
-組合せ回路の乗除余算は規模が大きくなりがち。=>マッピングできないかも。
-信号名に統一性を。
--モジュールの頭文字_信号の意味_in or out_番号(各モジュール内)
--(To)モジュールの頭文字_(From)モジュールの頭文字_信号の意味_in or out_番号(トップモジュール)
-次7章セルベース/ゲートアレイ方式マッピングからあと2、3も
[[前川/研究のための]]
*メモ [#d257e67e]
**ファイル入出力システムについて [#f2027f84]
-ファイルオープン
integer (or reg) ファイル変数;
initial ファイル変数 = &fopen = ("ログファイル");
-ファイルへの書き込み
--以下のシステムタスクを利用。
|システムタスク|動作|
|$fdisplay|改行して書き込み|
|$fwrite|改行せず書き込み|
|$fmonitor|信号に変化時に書き込み|
|$fstrobe|すべてのイベント終了後書き込み|
-
システムタスク(ファイル変数,"書式フォーマット",信号名);
-ファイルクローズ
--2つのタイミングで終了
---シミュレーション終了時。
---明示的にファイルをクローズ時。
-
$fclose(ファイル変数);
-例
interger memo;
initial memo = $fopen = ("dump.log");
always begin
$fwrite(memo, "time(%t): CLK = %b\n", $time, CKL);
end
**function [#kfd93d3b]
-組み合わせ回路記述
-assignでは記述できない複雑な論理を記述する時に。
function[レンジ] function name;
入力ネット名;
ローカルレジスタ名;
ステートメント{
・begin 〜 end
・=演算子
・if ブロック または if ブロック else ブロック
・case
・casez
・casex
};
-例
module decoder_2_4 (in, out, en);
input [1:0] in;
input en;
output [3:0] out;
//----------------------------------
function [3:0] dec;
input [1:0] in;
input en;
begin
if (en == 1)
case (in)
2'b00 : dec = 4'b0001;
2'b01 : dec = 4'b0010;
2'b10 : dec = 4'b0100;
2'b11 : dec = 4'b1000;
default : dec = 4'bxxxx;
endcase
else
dec = 4'b0000;
end
endfunction
//-------------------------------------
assign out = dec(in, en);
ページ名: