集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 1409|回复: 2

不知错在哪????????????????????????????????

[复制链接]
Gevyaa 发表于 2011-1-20 15:42:54 | 显示全部楼层 |阅读模式
这是一个用Gauss消去法求三元一次方程组的代码,fpu模块是单精度(32位)运算模块,fpu_op是0,1,2,3是分别是加,减,乘,除,经过我的仔细检查,代码如果按case(0)一直运行下去,结果不会错。但最后的结果都是11111111100000000000000000000000(负无穷),不知错在哪
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
module gauss3(clk,a11,a12,a13,a21,a22,a23,a31,a32,a33,b1,b2,b3,x1,x2,x3);
        input clk;
        input [31:0] a11,a12,a13,a21,a22,a23,a31,a32,a33,b1,b2,b3;
        output [31:0] x1,x2,x3;
        wire [31:0] tv1,tv2,tv3,pit1,pit2,pit3;
        wire [2:0] op;
        tty         t2(clk,a11,a12,a13,a21,a22,a23,a31,a32,a33,b1,b2,b3,tv1,tv2,tv3,op,pit1,pit2,pit3);
        fpu w3( .clk(clk), .rmode(2'b00), .fpu_op(op), .opa(tv1), .opb(tv2), .out(tv3));
        assign x1=pit1;
        assign x2=pit2;
        assign x3=pit3;
endmodule


module tty(clk,a11,a12,a13,a21,a22,a23,a31,a32,a33,b1,b2,b3,tv1,tv2,tv3,op,pit1,pit2,pit3);
        input clk;
        input [31:0] a11,a12,a13,a21,a22,a23,a31,a32,a33,b1,b2,b3,tv3;
        output [31:0] tv1,tv2,op,pit1,pit2,pit3;
        reg [31:0] /*ra11,ra12,ra13,ra21,ra22,ra23,ra31,ra32,ra33,rb1,rb2,rb3,*/tv1,tv2,op,pit1,pit2,pit3;
        reg [31:0] u1,u2,rrt1,rrt2,rrt3,rrt4,rrt5,rrt6,rrt7,rrt8,rrt9,rrt10,rrt11,rrt12,
                                rrt13,rrt14,rrt15,rrt16,rrt17,rrt18,rrt19,rrt20,rrt21,rrt22;
        reg [5:0] yu=6'd0;
       
        always @(posedge clk)
                begin
                        ra11=a11;
                        ra12=a12;
                        ra13=a13;
                        ra21=a21;
                        ra22=a22;
                        ra23=a23;
                        ra31=a31;
                        ra32=a32;
                        ra33=a33;
                        rb1=b1;
                        rb2=b2;
                        rb3=b3;
                end
        always @(posedge clk)
                begin
                        case(yu)
                                6'd0:begin op=3'd3; tv1=ra21; tv2=ra11; u1=tv3; end//u1
                                6'd1:begin op=3'd3; tv1=ra31; tv2=ra11; u2=tv3; end//u2
                                6'd2:begin op=3'd2; tv1=ra12; tv2=u1; rrt1=tv3; end//a12*u1
                                6'd3:begin op=3'd1; tv1=ra22; tv2=rrt1; rrt3=tv3; end//a22-a12*u1
                                6'd4:begin op=3'd2; tv1=ra13; tv2=u1; rrt2=tv3; end//a13*u1
                                6'd5:begin op=3'd1; tv1=ra23; tv2=rrt2; rrt4=tv3; end//a23-a13*u1
                                6'd6:begin op=3'd2; tv1=rb1; tv2=u1; rrt9=tv3; end//b1*u1
                                6'd7:begin op=3'd1; tv1=rb2; tv2=rrt9; rrt10=tv3; end//b2-b1*u1
                                6'd8:begin op=3'd2; tv1=ra12; tv2=u2; rrt5=tv3; end//a12*u2
                                6'd9:begin op=3'd1; tv1=ra32; tv2=rrt5; rrt6=tv3; end//a32-a12*u2
                                6'd10:begin op=3'd2; tv1=rb1; tv2=u2; rrt11=tv3; end//b1*u2
                                6'd11:begin op=3'd1; tv1=rb3; tv2=rrt11; rrt12=tv3; end//b3-b1*u2
                                6'd12:begin op=3'd2; tv1=ra13; tv2=u2; rrt7=tv3; end//a13*u2
                                6'd13:begin op=3'd1; tv1=ra33; tv2=rrt7; rrt8=tv3; end//a33-a13*u2
                                6'd14:begin op=3'd3; tv1=rrt6; tv2=rrt3; u2=tv3; end//u2
                                6'd15:begin op=3'd2; tv1=rrt4; tv2=u2; rrt13=tv3; end//a23*u2
                                6'd16:begin op=3'd1; tv1=rrt8; tv2=rrt13; rrt14=tv3; end//a33-a23*u2
                                6'd17:begin op=3'd2; tv1=rrt10; tv2=u2; rrt15=tv3; end//b2*u2
                                6'd18:begin op=3'd1; tv1=rrt12; tv2=rrt15; rrt16=tv3; end//b3-b2*u2
                                6'd19:begin op=3'd3; tv1=rrt16; tv2=rrt14; pit3=tv3; end//pit3=b3/a33
                                6'd20:begin op=3'd2; tv1=pit3; tv2=rrt4; rrt17=tv3; end//x3*a23
                                6'd21:begin op=3'd1; tv1=rrt10; tv2=rrt17; rrt18=tv3; end//b2-x3*a23
                                6'd22:begin op=3'd3; tv1=rrt18; tv2=rrt3; pit2=tv3; end//pit2=(b2-x3*a23)/a22
                                6'd23:begin op=3'd2; tv1=pit3; tv2=ra13; rrt19=tv3; end//x3*a13
                                6'd24:begin op=3'd2; tv1=pit2; tv2=ra12; rrt20=tv3; end//x2*a12
                                6'd25:begin op=3'd1; tv1=rb1; tv2=rrt19; rrt21=tv3; end
                                6'd26:begin op=3'd1; tv1=rrt21; tv2=rrt20; rrt22=tv3; end
                                6'd27:begin op=3'd3; tv1=rrt22; tv2=ra11; pit1=tv3; end//pit1
                               
                               
                               
                        endcase
                end
               
        always @(posedge clk)
                begin
                        if(yu==6'd28)
                                yu=6'd0;
                        else
                                yu=yu+1;
                end


endmodule
 楼主| Gevyaa 发表于 2011-1-20 15:45:05 | 显示全部楼层
不知是不是仿真器不行
 楼主| Gevyaa 发表于 2011-1-20 15:45:31 | 显示全部楼层
Quartus II的仿真器
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2025-6-22 10:27 , Processed in 0.070092 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表