Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macros 矢量索引的VHDL宏_Macros_Attributes_Constants_Vhdl - Fatal编程技术网

Macros 矢量索引的VHDL宏

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

我正在搜索宏、常量或属性,无论它是什么,都会替换“(x向下到y)”。要详细解释例如复数

有一个通用值宽度

信号数量:标准逻辑向量(2*宽度向下至0)

**pseudo**
re=2*宽度-1向下至宽度;
im=宽度-1至0;
**伪**


xA
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);

xA
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可能不完全是您想要的,但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特性)。关于堆栈溢出,有一个相关的答案:。