并行二进制转BCD

图中下面是二进制码,上面是BCD码,注意看规律,就可以任意扩展或者缩小位宽

`timescale 1ns / 1ps
module binary_to_bcd
    (     
     input  [9:0] i_bin           ,                                   
     output [3:0] o_bcd_ones      ,
     output [3:0] o_bcd_tens      ,                        
     output [3:0] o_bcd_hundreds  
    );                         
wire [3:0] c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12;                 
wire [3:0] d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12;                    
                                                 
assign d1 = {1'b0, i_bin[9:7]};                      
assign d2 = {c1[2:0], i_bin[6]};                     
assign d3 = {c2[2:0], i_bin[5]};                     
assign d4 = {c3[2:0], i_bin[4]};                     
assign d5 = {c4[2:0], i_bin[3]}; 
assign d6 = {c5[2:0], i_bin[2]};                     
assign d7 = {c6[2:0], i_bin[1]};
                     
assign d8 = {1'b0,c1[3],c2[3],c3[3]};            
assign d9 = {c8[2:0], c4[3]};  
assign d10 = {c9[2:0], c5[3]}; 
assign d11 = {c10[2:0], c6[3]};

assign d12 = {1'b0,c8[3],c9[3],c10[3]}; 
                  
add3 m1(d1,c1);                                  
add3 m2(d2,c2);                                  
add3 m3(d3,c3);                                  
add3 m4(d4,c4);                                  
add3 m5(d5,c5);                                  
add3 m6(d6,c6);                                  
add3 m7(d7,c7);   
add3 m8(d8,c8);                                  
add3 m9(d9,c9);                                  
add3 m10(d10,c10);                                  
add3 m11(d11,c11);                                  
add3 m12(d12,c12);                                
assign o_bcd_ones = {c7[2:0],i_bin[0]};                    
assign o_bcd_tens = {c11[2:0],c7[3]};                   
assign o_bcd_hundreds = {c12[2:0],c11[3]};                 
endmodule          

图中方框代码为

`timescale 1ns / 1ps
module add3
    (
     input      [3:0] i_d  ,
     output reg [3:0] o_q 
     ); 

    always @ (i_d)
    begin
          case(i_d)
            4'b0000 : o_q <= 4'b0000;
            4'b0001 : o_q <= 4'b0001;
            4'b0010 : o_q <= 4'b0010;
            4'b0011 : o_q <= 4'b0011;
            4'b0100 : o_q <= 4'b0100;
            4'b0101 : o_q <= 4'b1000;
            4'b0110 : o_q <= 4'b1001;
            4'b0111 : o_q <= 4'b1010;
            4'b1000 : o_q <= 4'b1011;
            4'b1001 : o_q <= 4'b1100;
            default : o_q <= 4'b0000;
          endcase
      end
endmodule

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值