累加器结构
module mash(CLK, RST,IN_X, COUT);
parameter WIDE = 3;
input CLK;
input RST;
input [WIDE-1:0] IN_X;
output COUT;
reg [WIDE-1:0] sum_d;
reg [WIDE-1:0] out;
always @(posedge CLK or posedge RST )
begin
if (RST)
begin
sum_d <=0;
end
else
begin
sum_d <= out;
end
end
always @(posedge CLK or posedge RST )
begin
if (!RST)
begin
{COUT,out} <= 0;
end
else
begin
{COUT,out} <= IN_X + sum_d;;
end
end
endmodule
这是累加器
下面是测试代码
module main();
reg clk;
reg rst;
reg [15:0] in;
wire [15:0] cout;
mash DUT(.CLK(clk),.RST(rst),.IN_X(in), .COUT(cout));
initial begin
clk = 0;
forever #5 clk =~clk;
end
initial begin
rst = 0;
#20 rst= 1;
end
initial begin
in = 6;
#1000;
$finish;
end
initial begin
$fsdbDumpfile("adder_tb.fsdb");
$fsdbDumpvars();
end
这是波形
哪里出了问题,希望大神可以给指导一下。
|