我正在寻找一个宏,常量或属性,无论它是什么,取代"(x downto y)"。要详细解释复数,
有一个通用值WIDTH,
signal num : std_logic_vector(2*WIDTH downto 0);
**pseudo**
re = 2*WIDTH-1 downto WIDTH;
im = WIDTH-1 downto 0;
**pseudo**
x <= num(re);
y <= num(im); etc
也可能是某些属性,如范围。例如
x <= num(num're);
y <= num(num'im);
我经常使用它,它应该是更好的可读性和编写干净的代码
答案 0 :(得分:3)
subtype
可用于声明整数范围,如:
-- **pseudo** re = 2*WIDTH-1 downto WIDTH; im = WIDTH-1 downto 0; **pseudo**
subtype re is natural range 2*WIDTH-1 downto WIDTH;
subtype im is natural range WIDTH-1 downto 0;
然后可以这样做:
x <= num(re);
y <= num(im);
将x
和y
声明为std_logic_vector(WIDTH-1 downto 0)
,或std_logic_vector(re)
和std_logic_vector(im)
。
顺便说一下。 num
应该具有最高索引2*WIDTH-1
,而不是2*WIDTH
(逐个错误)。
答案 1 :(得分:2)
也许不完全是你的想法,但VHDL记录似乎非常适合你想要做的事情。
您可以定义记录类型:
type mycomplex_t is record
re : std_logic_vector(WIDTH-1 downto 0);
im : std_logic_vector(WIDTH-1 downto 0);
end record;
然后,您声明您的信号属于这种类型:
signal num : mycomplex_t;
你可以这样使用它:
x <= num.re;
y <= num.im;
你也可以像这样分配:
num <= (re => x2, im => y2);
或者,像这样:
num.re <= x2;
num.im <= y2;
或者同时来自同一类型的另一个信号:
signal other_complex : mycomplex_t;
-- (...)
num <= other_complex;