Macros 矢量索引的VHDL宏
我正在搜索宏、常量或属性,无论它是什么,都会替换“(x向下到y)”。要详细解释例如复数 有一个通用值宽度Macros 矢量索引的VHDL宏,macros,attributes,constants,vhdl,Macros,Attributes,Constants,Vhdl,我正在搜索宏、常量或属性,无论它是什么,都会替换“(x向下到y)”。要详细解释例如复数 有一个通用值宽度 信号数量:标准逻辑向量(2*宽度向下至0) **pseudo** re=2*宽度-1向下至宽度; im=宽度-1至0; **伪** xAsubtype可用于声明整数范围,如: -- **pseudo** re = 2*WIDTH-1 downto WIDTH; im = WIDTH-1 downto 0; **pseudo** subtype re is natural range 2*WI
信号数量:标准逻辑向量(2*宽度向下至0)代码>
**pseudo**
re=2*宽度-1向下至宽度;
im=宽度-1至0;
**伪**
xAsubtype
可用于声明整数范围,如:
-- **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);
xAsubtype
可用于声明整数范围,如:
-- **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可能不完全是您想要的,但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;
x可能不完全是您想要的,但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;
是的,我一直在用它。但当您大量使用块ram时,分配会变长。我的意思是,ram\u data@ytukel您可以为包中的每个转换创建一个函数。然后,分配成为端口映射中的ram_data@ytukel,您的选项是1)为re
和im
部分具有不同的端口,然后映射re=>num.re,im=>num.im
,2)按片映射端口someport(W-1向下到0)=>num.re,someport(2*W-1向下到W)=>num.im
3)创建一个中间std_逻辑_矢量信号(使用转换函数)并映射它,或者4)使端口本身成为mycomplex_t.@ytukel至于使其通用,这在VHDL中有点棘手,您需要做的是使包本身通用(VHDL-2008特性)。关于堆栈溢出,有一个相关的答案:。是的,我一直在使用它。但当您大量使用块ram时,分配会变长。我的意思是,ram\u data@ytukel您可以为包中的每个转换创建一个函数。然后,分配成为端口映射中的ram_data@ytukel,您的选项是1)为re
和im
部分具有不同的端口,然后映射re=>num.re,im=>num.im
,2)按片映射端口someport(W-1向下到0)=>num.re,someport(2*W-1向下到W)=>num.im
3)创建一个中间std_逻辑_矢量信号(使用转换函数)并映射它,或者4)使端口本身成为mycomplex_t.@ytukel至于使其通用,这在VHDL中有点棘手,您需要做的是使包本身通用(VHDL-2008特性)。关于堆栈溢出,有一个相关的答案:。