////////////////////////////////////////////////////////////////////////////////// // // Wirtualny komponent konwertera kodu BCD -> BIN wersja 2 // // (C) 2009 Zbigniew Hajduk // http://zh.kia.prz.edu.pl // ////////////////////////////////////////////////////////////////////////////////// module bcd2bin2 #(parameter NO_BITS_OUT=16, NO_BCD_DIGITS=4, BIT_CNT_WIDTH=4) (input clk,start, output done, output reg [NO_BITS_OUT-1:0] data_out, input [4*NO_BCD_DIGITS-1:0] data_bcd_in); reg [4*NO_BCD_DIGITS-1:0] temp_bcd; reg [BIT_CNT_WIDTH-1:0] bit_cnt; (* INIT ="0" *) reg busy; reg [3:0] digit; function [NO_BITS_OUT-1:0] BCD2BIN_DIGIT (input [NO_BITS_OUT-1:0] din, input [3:0] digit); reg [NO_BITS_OUT-1:0] s1,s2; begin s1=din<<3; s2=din<<1; BCD2BIN_DIGIT=s1+s2+{{(NO_BITS_OUT-4){1'b0}},digit}; end endfunction always @(posedge clk) begin if(start&~busy) begin busy<=1'b1; bit_cnt<=NO_BCD_DIGITS-1; data_out<=0; temp_bcd<=data_bcd_in; end if(busy) begin temp_bcd<=temp_bcd<<4; //(1) data_out<=BCD2BIN_DIGIT(data_out,temp_bcd[(4*NO_BCD_DIGITS-1)-:4]); //(2) if(bit_cnt!=0) bit_cnt<=bit_cnt-1; else busy<=1'b0; end end assign done=~busy; endmodule