VHDL: issues with adding and subtracting -
what issues run code? thinking there issue if result addition bigger 15 bits can represent (32767), or if negative number in subtraction.
library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; use ieee.numeric_std.all;  entity test     port(   input:  in std_logic_vector(14 downto 0);             sel : out boolean;             output: out std_logic_vector(14 downto 0)); end test;   architecture test of test  constant first : integer := 1050; constant second : integer := 33611;  begin   output <= input - first;  output <= input + second;  sel <= input < first;  end test;      
the primary issue have design intent not communicated impossible distinguish correct incorrect results - in sense, whatever must right!
i differ david's opinion in 1 respect : says "std_logic_vector unsigned representation" suggest std_logic_vector neither signed nor unsigned; bag of bits. if happens follow unsigned rules, that's accident of set of libraries have included.
instead, delete non-standard libraries:
use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all;   and use exclusively standard libraries:
library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all;   then - if input , output ports meant represent unsigned numbers, best thing so...
port(   input  : in unsigned(14 downto 0);         sel    : out boolean;         output : out unsigned(14 downto 0));   (if not allowed change port types, can use unsigned signals internally, , type convert between them , ports.)
now regards expressions, may overflow (and in case of "second" will!).
in simulation, these overflows ought reported arithmetic errors. (note : @ least 1 simulator runs overflow checks off default setting! dumb...)
as designer, decide correct semantics overflows are:
- they represent bugs. simulate overflow checks enabled, detect , fix bugs.
 - they permitted, , e.g. negative numbers represent large positive numbers. express in code, e.g. 
output <= (input - first) mod 2**output'length;reading code understands overflow allowed, , wraps. - overflow should saturate positive or negative limit. signal writing 
output <= saturate(input - first);i'll leave writing saturate function exercise... 
Comments
Post a Comment