Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

If I have 12 bits each 4 represent a number in binary, how do i convert it to binary?

Status
Not open for further replies.

Elctgirl

Newbie level 3
Joined
Apr 29, 2015
Messages
3
Helped
0
Reputation
0
Reaction score
0
Trophy points
1
Activity points
34
Hi,

How can I convert a 12 bit binary number where each 4 bits represent a character into an 8 bit binary number?

Example: 12 bit number : "001001000011" ==> 2,4,3 and I want to convert it to 243 ==> "11110011"

any help please?

What I did but still haven't reached a right answer:

Code VHDL - [expand]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
signal output1, output2, output3 : integer range 0 to 9;
signal output11, output22 : integer range 0 to 255;
 
begin
 
process(clk)
begin
if(clk'event and clk='1') then  
    case input(11 downto 8) is
 
        when  "0000" => output1 <= 0; 
        when  "0001" => output1 <= 1;
        when  "0010" => output1 <= 2;
        when  "0011" => output1 <= 3;
        when  "0100" => output1 <= 4;
        when  "0101" => output1 <= 5;
        when  "0110" => output1 <= 6;
        when  "0111" => output1 <= 7;
        when  "1000" => output1 <= 8;
        when  "1001" => output1 <= 9;
        when  others => output1 <= 0;
    end case;
    
    case input(7 downto 4) is
 
        when  "0000" => output2 <= 0; 
        when  "0001" => output2 <= 1;
        when  "0010" => output2 <= 2;
        when  "0011" => output2 <= 3;
        when  "0100" => output2 <= 4;
        when  "0101" => output2 <= 5;
        when  "0110" => output2 <= 6;
        when  "0111" => output2 <= 7;
        when  "1000" => output2 <= 8;
        when  "1001" => output2 <= 9;
        when  others => output2 <= 0;
    end case;
    
    case input(3 downto 0) is
 
        when  "0000" => output3 <= 0; 
        when  "0001" => output3 <= 1;
        when  "0010" => output3 <= 2;
        when  "0011" => output3 <= 3;
        when  "0100" => output3 <= 4;
        when  "0101" => output3 <= 5;
        when  "0110" => output3 <= 6;
        when  "0111" => output3 <= 7;
        when  "1000" => output3 <= 8;
        when  "1001" => output3 <= 9;
        when  others => output3 <= 0;
    end case;
end if;
end process;
 
output11 <= output1*100;
output22 <= output2*10;
finaloutput <= output1+output2+output3;
output<= std_logic_vector(to_unsigned(finaloutput,8));

 
Last edited by a moderator:

FvM

Super Moderator
Staff member
Joined
Jan 22, 2008
Messages
48,924
Helped
14,335
Reputation
28,934
Reaction score
13,083
Trophy points
1,393
Location
Bochum, Germany
Activity points
282,298
What do you mean by "still haven't reached a right answer"? What are your requirements for a "right answer"?

Altough the BCD to binary operation can be described in less lines using ieee.numeric_std conversion functions, the shown code should basically work.
 

Elctgirl

Newbie level 3
Joined
Apr 29, 2015
Messages
3
Helped
0
Reputation
0
Reaction score
0
Trophy points
1
Activity points
34
Yes I know, I tried using the conversion function but it didn't work so I used the long conversion.

I don't have a specific criteria, It's just that after I use a test bench I don't get the correct answer.
 

FvM

Super Moderator
Staff member
Joined
Jan 22, 2008
Messages
48,924
Helped
14,335
Reputation
28,934
Reaction score
13,083
Trophy points
1,393
Location
Bochum, Germany
Activity points
282,298
It's just that after I use a test bench I don't get the correct answer.
But why? We need to see the complete entity and testbench to understand the reason.
 

ads-ee

Super Moderator
Staff member
Joined
Sep 10, 2013
Messages
7,846
Helped
1,815
Reputation
3,640
Reaction score
1,777
Trophy points
1,393
Location
USA
Activity points
59,266
The only issue I see with the OP's code is the range of output1 should be restricted to 0,1, or 2 as the range of the result for output11 can not be outside the range of 0 to 255. Perhaps the range restrictions are the root of the problem.
 

FvM

Super Moderator
Staff member
Joined
Jan 22, 2008
Messages
48,924
Helped
14,335
Reputation
28,934
Reaction score
13,083
Trophy points
1,393
Location
Bochum, Germany
Activity points
282,298
Perhaps the range restrictions are the root of the problem.
I don't think so. In synthesis, casting an integer to unsigned with insufficient length would just cause a wrap around respectively discarding of the upper two bits, e.g. 256 is output as zero.

A simulator stops with an error when the overflow occurs.
 

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Top