これは合成用ですか?その場合、いつタスクを使用できるかを学習するまで、タスクの使用を避ける必要があります。合成可能なコードでは決して使用しません。
function
一方、s は合成によく使用されますが、タイミング情報を含めることはできません。つまり、関数は、すべてが瞬時に発生する組み合わせ論理のみを表すことができます。
1)それは割り当ての使い方ではありません。正しい使い方は次のとおりです。
wire [9:0] a;
assign a = 10'b0;
//or
//a,b both 10 bits driven from other logic
wire [9:0] sum;
assign sum = a + b;
ワイヤに割り当てる方法に注意してください。これは組み合わせです。
2) ディスプレイはfor
ループの外側にあり、最後に 1 回だけ表示されます。
私はこれを次のようなことをしたでしょう:
module add(
input [31:0] a,
input [31:0] b,
output [31:0] sum
);
assign sum = a + b ;
endmodule
module testharness();
reg [31:0] a;
reg [31:0] b;
wire [31:0] sum;
reg clock;
// Make clock toggle every 10ns (20ns clock period)
initial begin
clock = 0;
forever begin
#10ns clock= ~clock;
end
end
//DUT (Device Under Test)
add add_0 (
.a ( a ),
.b ( b ),
.sum ( sum )
);
// Test program
initial begin
a=0;
b=0;
@(posedge clock);
$display( "a (%2d) + b (%2d) = sum (%2d)", a, b, sum );
a=1;
b=2;
@(posedge clock);
$display( "a (%2d) + b (%2d) = sum (%2d)", a, b, sum );
a=3;
b=4;
@(posedge clock);
$display( "a (%2d) + b (%2d) = sum (%2d)", a, b, sum );
$finish;
end
endmodule
結果を分離するために時間をどのように使用したかに注意してください。より複雑な設計では、クロックごとに新しい結果しか得られないことを意味するフリップフロップを使用できます。または、DDR 技術を使用している場合は、立ち上がりエッジと立ち下がりエッジごと。
テスト プログラム セクションを変更して、要件に応じて DUT を刺激することができます。