这是用来合成的吗?如果是这样,您可能应该避免使用任务,直到您了解何时可以使用它们。我从不在可综合代码中使用它们。
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
循环之外,它只会在最后显示一次。
我会这样做:
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。