Continue to Site

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.

VHDL unsigned to signed conversion.

Status
Not open for further replies.

zoulzubazz

Member level 5
Joined
Apr 26, 2012
Messages
87
Helped
3
Reputation
6
Reaction score
3
Trophy points
1,288
Activity points
2,040
hey guys,

i am getting data from a 12 bit ADC into an FPGA, so '000000000000' represents the lowest ADC value and '111111111111' represents the highest value ADC(unsigned). Now to manipulate this data inside an FPGA I am having to cast the ADC input into a 'signed' value like so,

adc_sgn := signed(adc_unsgn);

My question is wouldn't this conversion from unsigned to signed change the value and 12 bit ADC word holds, since (for example) '1111' in unsigned representation is 15 where as it is -6 in signed 2's compliment representation? Thanks.
 

If you want to keep it at 12 bits, you should invert the highest bit to get a correct sign bit. This means that the midrange value of the ADC will be represented as zero. If you want to keep the ADC value zero as zero, you must go to 13 bits and set the highest bit to '0'.
 
I want to retain the 12 bits, but I cant get my head around 'the midrange value of the ADC will be represented as zero' could you kindly provide an example. thanks.
 

ADCs often use offset binary for their "signed" values. So x"800" is actually 0v. in VHDL, you need to do the following to treat it as signed:

a <= ip - OFFSET;
b <= signed(a);

btw. "1111" in signed is actually -1, not -6. "1000" = -7
 
a <= ip - OFFSET;
b <= signed(a);

btw. "1111" in signed is actually -1, not -6. "1000" = -7

If OFFSET is the midrange value (only the highest bit set), the subtraction is identical to inverting the highest bit of "a". I don't know if all synthesis tools understand that.

"1000" as signed is -8
 
Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top