使用了ise 13.3 ip核版本是7.1 做测试的时候 输出的结果除了0位正确 其他的 输出实部前边总是多了一个负号 本来结果应该是100 结果显示是-100 让人很郁闷
我的测试代码是这样的module ipcore16test;
// Inputs
reg clk;
reg start;
reg unload;
reg [15:0] xn_re;
reg [15:0] xn_im;
reg fwd_inv;
reg fwd_inv_we;
reg [7:0] scale_sch;
reg scale_sch_we;
// Outputs
wire rfd;
wire [3:0] xn_index;
wire busy;
wire edone;
wire done;
wire dv;
wire [3:0] xk_index;
wire [15:0] xk_re;
wire [15:0] xk_im;
wire ovflo;
// Instantiate the Unit Under Test (UUT)
ipcorefft16 uut (
.clk(clk),
.start(start),
.unload(unload),
.xn_re(xn_re),
.xn_im(xn_im),
.fwd_inv(fwd_inv),
.fwd_inv_we(fwd_inv_we),
.scale_sch(scale_sch),
.scale_sch_we(scale_sch_we),
.rfd(rfd),
.xn_index(xn_index),
.busy(busy),
.edone(edone),
.done(done),
.dv(dv),
.xk_index(xk_index),
.xk_re(xk_re),
.xk_im(xk_im),
.ovflo(ovflo)
);
initial begin
// Initialize Inputs
clk = 0;
start = 1;
unload = 1;
xn_re = 0;
xn_im = 0;
fwd_inv = 1;
fwd_inv_we = 1;
scale_sch = 8'b00000000;
scale_sch_we = 1;
num=0;
#100;
// Add stimulus here
end
always #10 clk=~clk;
reg[3:0] num;
always @(posedge clk)
begin
if(rfd)
begin
// num=num+1'b1;
case(num)
4'd0:xn_re=100;
4'd1:xn_re=100;
4'd2:xn_re=100;
4'd3:xn_re=100;
4'd4:xn_re=100;
4'd5:xn_re=100;
4'd6:xn_re=100;
4'd7:xn_re=100;
4'd8:xn_re=0;
4'd9:xn_re=0;
4'd10:xn_re=0;
4'd11:xn_re=0;
4'd12:xn_re=0;
4'd13:xn_re=0;
4'd14:xn_re=0;
4'd15:xn_re=0;
default: ;
endcase
num=num+1'b1;
end
end
endmodule
其实就是前8个点是100 后边的是0 一个很简单的方波 结果在红线标的地方 本来应该是100 但是成了-100 求教 高人指点
|