|
如题 (附上module和测试testbench)
module bintobcd
(
clk, rstn, Data_Bin,
// Hex_8, Hex_7, Hex_6, Hex_5,
// Hex_4,
Hex_3, Hex_2, Hex_1
);
input clk, rstn;
input[7:0]Data_Bin;
// output [3:0]Hex_8, Hex_7, Hex_6, Hex_5;
output [3:0]//Hex_4,
Hex_3, Hex_2, Hex_1;
// reg [3:0]Hex_8, Hex_7, Hex_6, Hex_5;
reg [3:0]//Hex_4,
Hex_3, Hex_2, Hex_1;
/************************ BCD转换算法 *************************/
function [3:0]Correct;
input[3:0]Decade;
begin
Correct = ( Decade >= 4'd5 ) ? ( Decade + 4'd3 ) : Decade;
end
endfunction
/*************************************************************/
// integer Cnt = 33;
reg [5:0]Cnt;
reg [11:0]BCD;
reg [7:0]Bin_input;
reg [3:0] //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 negedge rstn )
begin
if( !rstn )
begin
Cnt = 6'd9;
BCD = 12'd0;
Bin_input = 8'd0;
// 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( Cnt == 6'd9 )
begin
Bin_input = Data_Bin;
Cnt = Cnt - 1'b1;
end
else if( Cnt == 0 )
begin
// 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];
// Hex_8 = BCD_8_I;
// Hex_7 = BCD_7_I;
// Hex_6 = BCD_6_I;
// Hex_5 = BCD_5_I;
// Hex_4 = BCD_4_I;
Hex_3 = BCD_3_I;
Hex_2 = BCD_2_I;
Hex_1 = BCD_1_I;
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] );
Cnt = Cnt - 1'b1;
BCD = ( BCD << 1 );
BCD[0] = Bin_input [7];
Bin_input = Bin_input << 1;
end
end
end
/*************************************************************/
endmodule
`timescale 1 ps/ 1 ps
module bintobcd_vlg_tst();
reg [7:0] Data_Bin;
reg clk;
reg rstn;
// wires
wire [3:0] Hex_1;
wire [3:0] Hex_2;
wire [3:0] Hex_3;
// wire [3:0] Hex_4;
// wire [3:0] Hex_5;
// wire [3:0] Hex_6;
// wire [3:0] Hex_7;
// wire [3:0] Hex_8;
/**************************************/
bintobcd i1
(
.clk( clk ),
.rstn( rstn ),
.Data_Bin( Data_Bin ),
.Hex_1( Hex_1 ),
.Hex_2( Hex_2 ),
.Hex_3( Hex_3 )
// .Hex_4( Hex_4 ),
// .Hex_5( Hex_5 ),
// .Hex_6( Hex_6 ),
// .Hex_7( Hex_7 ),
// .Hex_8( Hex_8 )
);
/**************************************/
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
Data_Bin = 8'd0;
end
else
begin
Data_Bin = 8'd125;
end
/**************************************/
endmodule |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|