組み込み機器・ハードウェアの設計開発から装置製作まで社内一貫対応!

組み込み機器・ハードウェア設計製作.com
組み込み機器・ハードウェア設計製作.com

produced by株式会社アイディアイ

設計のポイント

verilog記述のポイント:taskで手続きをまとめる(functionとの違い)

設計内容分類FPGA

実現したい仕様・課題

テストベンチや制御シーケンスで、複数の信号操作や時間待ちを含む一連の手続きを何度も繰り返し記述すると、コードが冗長になり修正漏れの原因になります。functionは戻り値1つ・時間経過を含められないという制約があるため、複数出力や待ち時間を伴う手続きを部品化する手段が欲しい、というのが課題です。

設計のポイント

複数の出力や時間制御(@(posedge clk)、#遅延)を含む手続きの共通化にはtaskを使用します。functionが「入力から戻り値1つを計算する組み合わせロジックの記述」に限定されるのに対し、taskは複数のinput/output引数を持て、内部でクロック待ちや遅延を記述できます。この性質から、taskが最も活躍するのはテストベンチです。バスへの書き込み手順(アドレス設定→ライトイネーブル→1クロック待ち→イネーブル解除)などをtask化しておけば、テストシナリオは write(ADDR, DATA); の羅列として読みやすく記述でき、手順変更もtask定義1か所の修正で済みます。合成対象のRTLでtaskを使う場合は、時間制御を含まない純粋な手続きに限定し、複数出力の組み合わせロジックをまとめる用途にとどめます(時間制御を含むtaskは合成できません)。使い分けの整理としては、「値の変換・計算はfunction、複数信号の操作手順や時間を伴うシーケンスはtask(主に検証用)」が基本です。taskはモジュール内に定義され、そのモジュールの信号を直接操作できるため、テストベンチの構造化に大きく寄与します。

【コード例】
// テストベンチでのバス書き込みtask
task write(input [7:0] addr, input [15:0] data);
begin
@(posedge clk);
bus_addr <= addr; bus_data <= data; bus_we <= 1’b1;
@(posedge clk);
bus_we <= 1’b0;
end
endtask
// 使用側: write(8’h10, 16’hABCD);

verilog記述のポイント:taskで手続きをまとめる(functionとの違い) | 組み込み機器・ハードウェア設計製作.com

補足情報

当事例のような、FPGA設計に関するポイントをまとめた冊子の無料DLが可能です。
是非以下よりご確認ください。

FPGA設計のポイント

>>ダウンロードはこちら!

設計のポイント 一覧

FPGA設計のポイント

お問い合わせ

組み込み機器・ハードウェア 設計製作.comを運営する株式会社アイディアイは、組み込み機器・ハードウェアの設計開発代行サービスを提供しています。
試験装置や制御機器、組み込みボードなど、設計・開発委託先をお探しの皆様、お気軽に当社に御相談ください。

技術資料のダウンロードはこちらから 技術資料ダウンロ―ド メールフォームでのお問い合わせはこちらから ご相談お問合せ