ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

FPGA/CPLD友の会コミュの質問をさせてください

  • mixiチェック
  • このエントリーをはてなブックマークに追加
管理人様トピ立てすみません。
どこのトピックに書き込んだらよいかわからなかったので立てさてもらいました。

テストベンチを初めて作っています。
今Verilogでテストベンチを作っています。
そこでtask内にinputとoutputを作り、シミュレーションをしたいのですがエラーがとれずにシミュレーションができません。

inputについては initial文で値を任意に決めてることができ、シミュレーションで動作(outputをコメントアウトして動かしました)を確認しているのですが、outputについてをどのように記述したらうまく出力できるのかわかりません。


調べてみたのですが、inputについては参考になるもがあったのですが、outputについてのものがなくてアドバイスを頂けたらと思い、書き込みさせてもらいました。


内容としてはCPU-FPGAのreadとwriteになります。
使っているソフトはXilnxの無償のModleSimを使っています。



ご教示よろしくお願いします。

コメント(15)

うーん、よくわかりませんが f(^_^)

該当のソースを見せてもらうか、エラーメッセージを書いてもらうとベターです

以下、質問
・taskからの戻り値を期待されてますか?
・それは、なんちゃって動作モデルになりますか?
・ぶしつけですか、簡単な回路でテストベンチを作成しシミュレーションは動作しましたか?

taskからの戻り値を期待しています。
お昼までにソースとエラーメッセージを書き込みさせてもらいます。
よろしくお願いします。
taskはその階層の全レジスタに書き込める気がします。
クロックで代入するものはΔ遅延でうまく上書きできない事があります
ソースとエラーメッセージになります。
文字数の関係上、task内のみ書き込みさせてもらいます。
ご教示よろしくお願いします。

task set;

input [17:0]adeer_write; //write
input [15:0]data_write; //write
input rr_write; //write
input dd_write; //write
input cs2_write; //write
input cs4_write; //write

output I_read; //read
output W_read; //read
output N_read; //read

※outputを出力したい。

begin

# (STEP_b) adeer = adeer_write;
data = data_write;
rr = rr_write;
dd = dd_write;
cs2 = cs2_write;
cs4 = cs4_write;

I = I_read;
W = W_read;
N = N_read;


end
endtask

initial

begin
set(値);
以下同じ記述で違う値を記述しています。
end

endmodule




エラーメッセージ
Illegal reference to net "I"と"W"と"N"
(70): Number of actuals and formals does not match in task call.

よろしくお願いします。
>Number of actuals and formals does not match in task call
タスクコールの実引数と仮引数の数が合っていません。

なので、タスクコールされている記述(70行目?)で、input6個分、output3個がちゃんと入っているかどうかチェックされたらよいかと。
そういや、

output I_read; //read
output W_read; //read
output N_read; //read

I = I_read;
W = W_read;
N = N_read;

なんで、出力を代入しているのか?とか。
まぁ、周囲の記述がないので判然としませんけど。(^^;;;
ありがとうございます。
全然理解できてなくてすみません。
outputはtaskを使わずに作ってみます。
かすみさんが書いているように、
 output I_read; //read
 output W_read; //read
 output N_read; //read
は、taskの中で、何らかの結果を代入するのではないでしょうか?

set(値); は、たっくさんが書かれているように、引数の対応がとれているのでしょうか?

Verilog2005 のLRM(ドラフト)、SystemVerilog のLRMを読むと、task で、outputを指定できるようですね
普段は、まったく使わないですが(^^ゞ
>Verilog2005 のLRM(ドラフト)、SystemVerilog のLRMを読むと、task で、outputを指定できるようですね
あ、やっぱりそうなんですね。
私が習った(と言っても、教えてくれる人はほとんどいないので調べた独学の結果ですが)時は、
task には戻り値は書けないと思ってました。

このトピックでBNFを改めて調べてみたら、一応書けそうなので書かなかったんですけどね。
> task には戻り値は書けない
戻り値はありません。
引数で map します。
だから task 呼び出しは、式の右辺には書けない。

task のスコープ内の信号は
task から全部見えているので、
値渡し以外の仮引数を書く必要は無いのですが、

それやっちまうと、
task の流用はできなくなる。
別の module の task 呼び出すなんてことも
構文上は、できなくはないので。
>だから task 呼び出しは、式の右辺には書けない。
あぁ、すんません。説明が足りなかったですね。
function との違いで「戻り値が書けない」というセットの覚え方だったので。
で、output 文書けば出せるというのを改めて認識した次第で。(^^;;;

大体、仕事の絡みで他の人が書いているのを観ても、
引数で入れているのはinput 文ばかりだったので。

ある種、目から鱗でした。
みなさんコメントありがとうございます。
今まではアナログ回路の設計などをしていて、velilogのテストベンチはまったくの初めてで、かなり勘違いしている部分がありました。

引数の対応もとれていませんでした。

明日、テストベンチの本を買って勉強しようと思います。
本当にありがとうございます。

わからないことがあってももう少し勉強してから質問させてもらいます。
申し訳ありません。
質問でつ
QFN132を載せる基板を安く作る方法を教えてください。
一辺が0.5ミリピッチ3列で少なくとも真中の列は0,5ミリピッチのドリルでのCOHとなります。

両面基板で廉価にとか言うのがQFN132パッケージのメリットだとか言うそうですが・・・
0.5mmピッチなので、ドリルは0.1mmとかでないと無理でつ。
COHは真中一列だけなら両側に支えてもらえるでしょうから、THめっき同士の絶縁がとれれば
ドリルは0.,1mmよりも大きくてもOKだと思います。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

FPGA/CPLD友の会 更新情報

FPGA/CPLD友の会のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング