vhdl - Directly indexing a bit of an arithmetic result -
for issue, consider have following signals , using synopsis packages std_logic_unsigned
, std_logic_arith
.
signal o : std_logic; signal : std_logic_vector(parameter downto 0); constant c : integer := 5;
i wish set o
signal leftmost bit of result of (i-c)
. inside of process have like:
o <= (i-c)(i'left);
which not compile in simulator.
i know can solve introducing intermediary variable, there syntactic construct directly?
you trying assign o
indexed name value result of expression.
a indexed name prefix can either name or function call.
indexed_name ::= prefix ( expression { , expression } ) prefix ::= name | function_call
functions expressions predefined attributes, e.g. i'length
or i'left
.
a function call has specific format:
function_call ::= function_name [ ( actual_parameter_part ) ] actual_parameter_part ::= parameter_association_list
keeping in mind using package numeric_std (in case without numeric_std_unsigned) gives:
library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity indexing constant parameter: natural :=7; end entity; architecture foo of indexing signal o : std_logic; signal : signed(parameter downto 0); constant c : integer := 5; begin o <= "-"(i,to_signed(c,i'length)) (i'left); end architecture;
and of course use type conversions in association list "-" function call association list,
type signed
selected because constant c
specified type integer. have been type unsigned, or std_logic_vector using package numeric_std_unsigned. selecting type signed in part whimsical, o
specifies result sign way.
the above example analyzes, elaborates , runs, not doing interesting, while demonstrating syntax valid.
slice names can manipulated.
(and yes work synopsys's package std_logic_unsigned, without type conversions , specifying i
type std_logic_vector. there's little advantage when using function call.)
Comments
Post a Comment