搜索
bottom↓
回复: 8

帮忙看看代码,分析了半天,啥意思?

[复制链接]

出0入0汤圆

发表于 2012-9-21 17:23:05 | 显示全部楼层 |阅读模式
本帖最后由 orange-208 于 2012-9-21 17:24 编辑

如题
module BINtoBCD
(
        CLK, Clear, Enable_1, Data_Bin,
       
        Hex_4, Hex_3, Hex_2, Hex_1, Hex_e, BCD_over
);
       
        input CLK, Clear, Enable_1;
        input[31:0]Data_Bin;
       
        output BCD_over;
        output [3:0]Hex_4, Hex_3, Hex_2, Hex_1, Hex_e;
       
        reg [3:0]Hex_4, Hex_3, Hex_2, Hex_1, Hex_e;

        /*******************************************************/
                               
        function [3:0]Correct;           
                input[3:0]Decade;
                begin
                        Correct =( Decade >= 4'd5 ) ? ( Decade + 4'd3 ) : Decade;
                end
        endfunction

        /*******************************************************/
       
        integer Cnt = 33;
        reg BCD_over;

        reg [39:0]BCD;
        reg [31:0]Bin_input;
       
        reg [3:0]BCD_10_I, BCD_9_I, BCD_8_I, BCD_7_I, BCD_6_I,
                            BCD_5_I, BCD_4_I, BCD_3_I, BCD_2_I, BCD_1_I;
        always @ ( posedge CLK or posedge Clear )
                begin
                        if( Clear )
                                begin
                                        Cnt = 33;
                                        BCD = 40'd0;
                                        BCD_over = 1'b0;
                                        Bin_input = 32'd0;
                                       
                                        BCD_10_I = 4'b0000;
                                        BCD_9_I  = 4'b0000;
                                        BCD_8_I  = 4'b0000;
                                        BCD_7_I  = 4'b0000;
                                        BCD_6_I  = 4'b0000;
                                        BCD_5_I  = 4'b0000;
                                        BCD_4_I  = 4'b0000;
                                        BCD_3_I  = 4'b0000;
                                        BCD_2_I  = 4'b0000;
                                        BCD_1_I  = 4'b0000;
                                end
                        else
                                begin
                                        if( Enable_1 )
                                                begin
                                                        if( Cnt == 33 )
                                                                begin
                                                                        Bin_input = Data_Bin;
                                                                        Cnt = Cnt - 1'b1;
                                                                end
                                                        else if( Cnt == 0 )
                                                                begin
                                                                        BCD_10_I = BCD[39:36];
                                                                        BCD_9_I  = BCD[35:32];
                                                                        BCD_8_I  = BCD[31:28];
                                                                        BCD_7_I  = BCD[27:24];
                                                                        BCD_6_I  = BCD[23:20];
                                                                        BCD_5_I  = BCD[19:16];
                                                                        BCD_4_I  = BCD[15:12];
                                                                        BCD_3_I  = BCD[11:8];
                                                                        BCD_2_I  = BCD[7:4];
                                                                        BCD_1_I  = BCD[3:0];
                                                                       
                                                                        //----------------------------------------
                                                               
                                                                        if( BCD_10_I != 4'd0 )
                                                                                begin
                                                                                        Hex_4 = BCD_10_I;
                                                                                        Hex_3 = BCD_9_I;
                                                                                        Hex_2 = BCD_8_I;
                                                                                        Hex_1 = ( BCD_6_I >= 4'd5 ) ? BCD_7_I + 1'b1 : BCD_7_I;
                                                                                        Hex_e = 4'd9 + 4'd2;
                                                                                end
                                                                        else if( BCD_9_I != 4'd0 )
                                                                                begin
                                                                                        Hex_4 = BCD_9_I;
                                                                                        Hex_3 = BCD_8_I;
                                                                                        Hex_2 = BCD_7_I;
                                                                                        Hex_1 = ( BCD_5_I >= 4'd5 ) ? BCD_6_I + 1'b1 : BCD_6_I;
                                                                                        Hex_e = 4'd8 + 4'd2;
                                                                                end
                                                                        else if( BCD_8_I != 4'd0 )
                                                                                begin
                                                                                        Hex_4 = BCD_8_I;
                                                                                        Hex_3 = BCD_7_I;
                                                                                        Hex_2 = BCD_6_I;
                                                                                        Hex_1 = ( BCD_4_I >= 4'd5 ) ? BCD_5_I + 1'b1 : BCD_5_I;
                                                                                        Hex_e = 4'd7 + 4'd2;
                                                                                end
                                                                  else if( BCD_7_I != 4'd0 )
                                                                                begin
                                                                                        Hex_4 = BCD_7_I;
                                                                                        Hex_3 = BCD_6_I;
                                                                                        Hex_2 = BCD_5_I;
                                                                                        Hex_1 = ( BCD_3_I >= 4'd5 ) ? BCD_4_I + 1'b1 : BCD_4_I;
                                                                                        Hex_e = 4'd6 + 4'd2;
                                                                                end
                                                                  else if( BCD_6_I != 4'd0)
                                                                                begin
                                                                                        Hex_4 = BCD_6_I;
                                                                                        Hex_3 = BCD_5_I;
                                                                                        Hex_2 = BCD_4_I;
                                                                                        Hex_1 = ( BCD_2_I >= 4'd5 ) ? BCD_3_I + 1'b1 : BCD_3_I;
                                                                                        Hex_e = 4'd5 + 4'd2;
                                                                                end
                                                                  else if( BCD_5_I != 4'd0 )
                                                                                begin
                                                                                        Hex_4 = BCD_5_I;
                                                                                        Hex_3 = BCD_4_I;
                                                                                        Hex_2 = BCD_3_I;
                                                                                        Hex_1 = ( BCD_1_I >= 4'd5 ) ? BCD_2_I + 1'b1 : BCD_2_I;
                                                                                        Hex_e = 4'd4 + 4'd2;
                                                                                end
                                                                  else if( BCD_4_I != 4'd0 )
                                                                                begin
                                                                                        Hex_4 = BCD_4_I;
                                                                                        Hex_3 = BCD_3_I;
                                                                                        Hex_2 = BCD_2_I;
                                                                                        Hex_1 = BCD_1_I;
                                                                                        Hex_e = 4'd3 + 4'd2;
                                                                                end
                                                                  else if( BCD_3_I != 4'd0 )
                                                                                begin
                                                                                        Hex_4 = 4'd0;
                                                                                        Hex_3 = BCD_3_I;
                                                                                        Hex_2 = BCD_2_I;
                                                                                        Hex_1 = BCD_1_I;
                                                                                        Hex_e = 4'd2 + 4'd2;
                                                                                end
                                                                  else if( BCD_2_I != 4'd0 )
                                                                                begin
                                                                                        Hex_4 = 4'd0;
                                                                                        Hex_3 = 4'd0;
                                                                                        Hex_2 = BCD_2_I;
                                                                                        Hex_1 = BCD_1_I;
                                                                                        Hex_e = 4'd1 + 4'd2;
                                                                                end
                                                                        else if( BCD_1_I != 4'd0 )
                                                                                begin
                                                                                        Hex_4 = 4'd0;
                                                                                        Hex_3 = 4'd0;
                                                                                        Hex_2 = 4'd0;
                                                                                        Hex_1 = BCD_1_I;
                                                                                        Hex_e = 4'd0 + 4'd2;
                                                                                end
                                                                        else
                                                                                begin
                                                                                        Hex_4 = 4'd0;
                                                                                        Hex_3 = 4'd0;
                                                                                        Hex_2 = 4'd0;
                                                                                        Hex_1 = 4'd0;
                                                                                        Hex_e = 4'd0;
                                                                                end

                                                                        //----------------------------------------
                                                                               
                                                                        BCD_over = 1'b1;
                                                                end
                                                               
                                                        else
                                                                begin
                                                                        BCD[3:0]   = Correct( BCD[3:0] );
                                                                        BCD[7:4]   = Correct( BCD[7:4] );
                                                                        BCD[11:8]  = Correct( BCD[11:8] );
                                                                        BCD[15:12] = Correct( BCD[15:12] );
                                                                        BCD[19:16] = Correct( BCD[19:16] );
                                                                        BCD[23:20] = Correct( BCD[23:20] );
                                                                        BCD[27:24] = Correct( BCD[27:24] );
                                                                        BCD[31:28] = Correct( BCD[31:28] );
                                                                        BCD[35:32] = Correct( BCD[35:32] );
                                                                        BCD[39:36] = Correct( BCD[39:36] );

                                                                        Cnt = Cnt - 1'b1;
                                                                        BCD = ( BCD << 1 );
                                                                        BCD[0] = Bin_input [31];
                                                                        Bin_input = Bin_input << 1;
                                                                end
                                                end
                                end
                end  

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-9-21 18:09:12 | 显示全部楼层
二进制转十进制

出0入0汤圆

发表于 2012-9-21 19:04:33 | 显示全部楼层
philoman 发表于 2012-9-21 18:09
二进制转十进制

BINtoBCD
字数补丁。。。

出0入0汤圆

发表于 2012-9-21 19:35:40 | 显示全部楼层
我也看得一踏糊涂!!

出0入0汤圆

发表于 2012-9-21 19:42:16 | 显示全部楼层
模块名就是意思……

出0入0汤圆

发表于 2012-9-21 20:14:48 | 显示全部楼层

出0入0汤圆

 楼主| 发表于 2012-9-21 21:19:23 | 显示全部楼层
明白了!

出0入0汤圆

 楼主| 发表于 2012-9-21 21:20:38 | 显示全部楼层
刚开始不懂原理,现在了解了!

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2012-9-23 10:20:57 | 显示全部楼层
呃,这个模块名不是已经暴露了他的功能了吗。。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 09:31

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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