39 lines
1.2 KiB
Coq
39 lines
1.2 KiB
Coq
|
//-------------------------------------------------------------------
|
||
|
// Function: Binary to Decimal converter
|
||
|
// Source:
|
||
|
// https://verilogcodes.blogspot.com/2015/10/verilog-code-for-8-bit-binary-to-bcd.html
|
||
|
//-------------------------------------------------------------------
|
||
|
module bin2bcd(
|
||
|
bin,
|
||
|
bcd
|
||
|
);
|
||
|
|
||
|
|
||
|
//input ports and their sizes
|
||
|
input [7:0] bin;
|
||
|
//output ports and, their size
|
||
|
output [11:0] bcd;
|
||
|
//Internal variables
|
||
|
reg [11 : 0] bcd;
|
||
|
reg [3:0] i;
|
||
|
|
||
|
//Always block - implement the Double Dabble algorithm
|
||
|
always @(bin)
|
||
|
begin
|
||
|
bcd = 0; //initialize bcd to zero.
|
||
|
for (i = 0; i < 8; i = i+1) //run for 8 iterations
|
||
|
begin
|
||
|
bcd = {bcd[10:0],bin[7-i]}; //concatenation
|
||
|
|
||
|
//if a hex digit of 'bcd' is more than 4, add 3 to it.
|
||
|
if(i < 7 && bcd[3:0] > 4)
|
||
|
bcd[3:0] = bcd[3:0] + 3;
|
||
|
if(i < 7 && bcd[7:4] > 4)
|
||
|
bcd[7:4] = bcd[7:4] + 3;
|
||
|
if(i < 7 && bcd[11:8] > 4)
|
||
|
bcd[11:8] = bcd[11:8] + 3;
|
||
|
end
|
||
|
end
|
||
|
|
||
|
endmodule
|