+ Post New Thread
Results 1 to 9 of 9

8th March 2017, 12:30 #1
 Join Date
 Aug 2011
 Posts
 2,442
 Helped
 281 / 281
 Points
 11,980
 Level
 26
Native VHDL negation function
Hello,
Does VHDL have a native 2's complement negation function for signed vectors ?
I.E  a function that takes a signed vector, flips it and adds '1' to the LSB ?

8th March 2017, 12:30

8th March 2017, 13:23 #2
 Join Date
 Jun 2010
 Posts
 6,390
 Helped
 1861 / 1861
 Points
 34,876
 Level
 45
Re: Native VHDL negation function
yes:
a <= b;
1 members found this post helpful.

8th March 2017, 17:40 #3

8th March 2017, 22:39 #4
 Join Date
 Dec 2015
 Location
 Madrid, Spain
 Posts
 816
 Helped
 200 / 200
 Points
 4,656
 Level
 16
Re: Native VHDL negation function
I know that you might think of std_logic_signed, std_logic_arith, but no one should use them, instead, the standard.
 Id: A.2
function "" (ARG: SIGNED) return SIGNED;
 Result subtype: SIGNED(ARG'LENGTH1 downto 0).
 Result: Returns the value of the unary minus operation on a
 SIGNED vector ARG.Last edited by CataM; 8th March 2017 at 23:05.

8th March 2017, 22:39

8th March 2017, 23:31 #5
 Join Date
 Jun 2010
 Posts
 6,390
 Helped
 1861 / 1861
 Points
 34,876
 Level
 45

8th March 2017, 23:45 #6
 Join Date
 Sep 2013
 Location
 USA
 Posts
 6,323
 Helped
 1535 / 1535
 Points
 27,697
 Level
 40
Re: Native VHDL negation function
If my understanding is correct, real isn't synthesizable, and integer isn't really a good fit if you want to synthesize something with a fixed bit with that is less than or more than the definition of integer (usually 32bits in most implementations) and will require extra conversions to make it the correct size. I suppose you can specify a range, but then I always have to mentally convert the range to number of bits in the vector.
Originally Posted by TrickyDicky

9th March 2017, 04:15 #7
 Join Date
 Feb 2015
 Posts
 782
 Helped
 230 / 230
 Points
 4,715
 Level
 16
Re: Native VHDL negation function
I don't think real has an explicit definition in VHDL in terms of binary representation.
I'll also note that you can import only numeric_std_signed."" or std_logic_signed."" . This is advisable as using the entire package changes "=" . For std_logic_1164, comparing different widths for equality would generate an easy to find warning "result always false". For numeric_std_signed, they would each be treated as signed numbers and compared in that manner. "11" = "111".
That would be convenient and would require less conversions.

9th March 2017, 08:33 #8
 Join Date
 Jun 2010
 Posts
 6,390
 Helped
 1861 / 1861
 Points
 34,876
 Level
 45
Re: Native VHDL negation function
I think you mean  IMO, you SHOULD only import numeric_std_signed or std_logic_signed. This is only an opinion, and I doubt anyone will really follow it  importing the whole package is just easier. Also, with a lack of decent VHDL 2008 until rather recently, you're unlikely to see any coding standards mention numeric_std_signed/unsigned at all  most will advocate using numeric_std.
std_logic_1164 does not define any "=" functions. "=" is declared implicitly for all types in the language. Otherwise you would get a conflict when you imported std_logic_unsigned or numeric_std_signed etc and you would have to chose which one to use explicitly (as you kind of alluded to).
@adsee : I wasnt really talking in terms of synthesis, I was just listing all standard types where the function "" function is defined.

9th March 2017, 08:33

9th March 2017, 23:43 #9
 Join Date
 Feb 2015
 Posts
 782
 Helped
 230 / 230
 Points
 4,715
 Level
 16
Re: Native VHDL negation function
I think we agree, but am not sure. My opinion is that the smallest, easily understood subset of _signed/_unsigned/etc... be used in a design. This is "+" from either signed/unsigned, "" from signed, and to_integer from unsigned or conv_integer from std_logic_arith (or if you hate the nonieee of the package, "to_int" from your own package.)
"" from _signed is to add the unary operator.
This gives convenience without redefining a useful property of "=", nor making ambiguous inequalities or multiplications seem like a good idea.
+ Post New Thread
Please login