orange-208 发表于 2012-9-26 21:50:03

下面的代码为什么会溢出呢? 仿真出现-1和-15536

本帖最后由 orange-208 于 2012-9-27 10:52 编辑

如题

module divider
(
        clk, rstn,
        Cnt1_data,
        Cnt2_data,
       
        Data_Bin
);

        input clk, rstn;
        input Cnt1_data;        //Fs limited to 50MHz
        input Cnt2_data;        //Fx limited to 60MHz
       
        output Data_Bin;
       
        /*******************************************************/
       
        parameter Freq_50MHz = 26'd50_000_000;        //Fs = Freq_50MHz
                               //Freq_50KHz = 16'd50_000;
       
        /*******************************************************/
       
        reg Cnt1_in, Cnt2_in;//Ns = Cnt1_in, Nx = Cnt2_in
        reg Data_out;                          //Fx = Data_out
        reg flag;
       
        always @ ( posedge clk or negedge rstn )
                if( !rstn )
                        begin
                                flag <= 0;
                                Cnt1_in <= 16'd0;
                                Cnt2_in <= 16'd0;
                                Data_out <= 31'd0;
                        end
                else if( Cnt1_in != 16'd0 && flag == 1'b1 )
                        begin
                                Data_out <= ( Cnt2_in * Freq_50MHz ) / Cnt1_in;
                        end
                else
                        begin
                                flag <= 1'b1;
                                Cnt1_in <= Cnt1_data;
                                Cnt2_in <= Cnt2_data;
                        end
                       
        /**************************************/
       
        assign Data_Bin = Data_out;
       
        /**************************************/       
       
endmodule



testbench文件
`timescale 1 ns/ 1 ns
module divider_vlg_tst();

        reg Cnt1_data;
        reg Cnt2_data;
        reg clk;
        reg rstn;
                                                                                                                               
        wire Data_Bin;

        /*****************************/
       
        divider i1
        (
                .Cnt1_data(Cnt1_data),
                .Cnt2_data(Cnt2_data),
                .Data_Bin(Data_Bin),
                .clk(clk),
                .rstn(rstn)
        );

        /*****************************/
       
        initial                                                
                begin                                                
                        clk = 0;
                        rstn = 1;
                        #10 rstn = 0;
                        #10 rstn = 1;
                end
               
        always #10 clk = ~clk;

        /**************************************/

        always @ ( posedge clk or negedge rstn )
                if( !rstn )
                        begin
                                Cnt1_data <= 16'd0;
                                Cnt2_data <= 16'd0;
                        end
                else
                        begin
                                Cnt1_data <= 16'd50_000;
                                Cnt2_data <= 16'd65_535;
                        end       

        /**************************************/
                                                   
endmodule

wjfblack 发表于 2012-9-27 10:03:53

问题描述不清楚,楼主自己没经过思考就提问,不好。

orange-208 发表于 2012-9-27 10:53:06

wjfblack 发表于 2012-9-27 10:03 static/image/common/back.gif
问题描述不清楚,楼主自己没经过思考就提问,不好。

问题解决了,定义位宽的最高位一般为符号位。
页: [1]
查看完整版本: 下面的代码为什么会溢出呢? 仿真出现-1和-15536