在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2672|回复: 6

[求助] diveder模块的输出没有,是怎么回事?代码及仿真如下。

[复制链接]
发表于 2012-10-5 20:47:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
如题

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

        input clk, rstn;
        input [31:0]Cnt1_data;                               
        input [31:0]Cnt2_data;                               
       
        output [31:0]Data_Bin;

        /***********************************************/
       
        parameter Freq_50KHz = 16'd50_000;                                                //Fs = Freq_50KHz         
       
        /***********************************************/
       
        reg [31:0]Cnt1_in, Cnt2_in;                                                                  //Ns = Cnt1_in, Nx = Cnt2_in       
        reg [31:0]Data_out;                                                                                          //Fx = Data_out
        reg div_over;
                       
        always @ ( posedge clk or negedge rstn )
                if( !rstn )
                        begin
                                Cnt1_in <= 32'd0;
                                Cnt2_in <= 32'd0;
                                div_over <= 1'd0;
                        end
                else if( ( Cnt2_in >= Cnt1_in ) && ( div_over == 0 ) )
                        begin
                                Cnt2_in <= Cnt2_in - Cnt1_in;
                                Data_out <= Data_out + 1'b1;
                        end
                else if( Cnt2_in < Cnt1_in )
                        begin
                                div_over <= 1'd1;
                        end
                else
                        begin
                                Cnt1_in <= Cnt1_data;
                                Cnt2_in <= Cnt2_data * Freq_50KHz;
                        end
                       
        /***********************************************/
       
        assign Data_Bin = Data_out;
       
        /***********************************************/       
       
endmodule

testbench写的应该没问题,不过也贴出来。
       
testbench代码如下:
`timescale 1 ns/ 1 ns
module divider_vlg_tst();

        reg [31:0]Cnt1_data;
        reg [31:0]Cnt2_data;
        reg clk;
        reg rstn;
                                                                                                                               
        wire [31:0]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 <= 32'd0;
                                Cnt2_data <= 32'd0;
                        end
                else
                        begin
                                Cnt1_data <= 32'd50_000;
                                Cnt2_data <= 32'd50;
                        end

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

大家帮忙分析分析,谢了~!
测试波形.jpg
 楼主| 发表于 2012-10-5 21:31:27 | 显示全部楼层
高手们,看看吧!!!
 楼主| 发表于 2012-10-5 21:41:54 | 显示全部楼层
Cnt2_in <= Cnt2_data * Freq_50KHz;
这样写行吗?
发表于 2012-10-5 22:16:21 | 显示全部楼层
这个always块永远进下面这个分支。
else if( ( Cnt2_in >= Cnt1_in ) && ( div_over == 0 ) )
                        begin
                                Cnt2_in <= Cnt2_in - Cnt1_in;
                                Data_out <= Data_out + 1'b1

分频,你先把分频的值load进去
 楼主| 发表于 2012-10-6 09:56:16 | 显示全部楼层
回复 4# rvisk


    谢了哈!   
 楼主| 发表于 2012-10-6 14:32:56 | 显示全部楼层
回复 4# rvisk


    改成下面代码之后还是不行啊

        /***********************************************/
       
        reg [31:0]Cnt1_in, Cnt2_in;                                                                  //Ns = Cnt1_in, Nx = Cnt2_in       
        reg [31:0]Data_out;                                                                                          //Fx = Data_out
        reg init_flag = 1'd0;
        reg div_over = 1'd0;
                       
        always @ ( posedge clk or negedge rstn )
                if( !rstn )
                        begin
                                Cnt1_in <= 32'd0;
                                Cnt2_in <= 32'd0;
                                Data_out <= 32'd0;
                                div_over <= 1'd0;
                                init_flag <= 1'd0;
                        end
                else if( !init_flag )
                        begin
                                init_flag <= 1'd1;
                                Cnt1_in <= Cnt1_data;
                                Cnt2_in <= Cnt2_data * Freq_50KHz;                       
                        end               
                else if( ( Cnt2_in >= Cnt1_in ) && ( !div_over ) && ( init_flag ) )
                        begin
                                Cnt2_in <= Cnt2_in - Cnt1_in;
                                Data_out <= Data_out + 1'b1;
                        end
                else if( Cnt2_in < Cnt1_in )
                        begin
                                div_over <= 1'd1;
                        end

        /***********************************************/
 楼主| 发表于 2012-10-6 14:34:52 | 显示全部楼层
回复 4# rvisk


    有数据,但是data_out不停的往上加,我要的是加到50就停的!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

X

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-6-9 02:38 , Processed in 0.023434 second(s), 10 queries , Gzip On, MemCached On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表