Arrays VHDL-标准逻辑向量数组转换为标准逻辑向量
意图: 我在ZedBoard上从RAM读取数据,RAM由32位长的字组成,因此我使用以下缓冲区Arrays VHDL-标准逻辑向量数组转换为标准逻辑向量,arrays,vector,vhdl,fpga,Arrays,Vector,Vhdl,Fpga,意图: 我在ZedBoard上从RAM读取数据,RAM由32位长的字组成,因此我使用以下缓冲区 type mem_word is array (0 to 127) of std_logic_vector(31 downto 0); signal buffer_word : mem_word; 但是,我想以线性方式处理数据,在中间线性缓冲区中 signal buffer_linear : std_logic_vector(4095 downto 0); buffer_linear <
type mem_word is array (0 to 127) of std_logic_vector(31 downto 0);
signal buffer_word : mem_word;
但是,我想以线性方式处理数据,在中间线性缓冲区中
signal buffer_linear : std_logic_vector(4095 downto 0);
buffer_linear <= buffer_word; -- !!! PROBLEM
信号缓冲区线性:标准逻辑向量(4095向下至0);
buffer_linear您需要一个函数来将向量转换为一维向量
下面的示例使用类型名T_SLVV_32
表示它是一个向量向量,而内部向量是32位长的。(有关名为T\u SLM
)的真正二维标准逻辑矩阵类型,请参阅我的链接源文件)。因此,T_SLVV_32
相当于您的mem_word
类型
subtype T_SLV_32 is STD_LOGIC_VECTOR(31 downto 0);
type T_SLVV_32 is array(NATURAL range <>) of T_SLV_32;
function to_slv(slvv : T_SLVV_32) return STD_LOGIC_VECTOR is
variable slv : STD_LOGIC_VECTOR((slvv'length * 32) - 1 downto 0);
begin
for i in slvv'range loop
slv((i * 32) + 31 downto (i * 32)) := slvv(i);
end loop;
return slv;
end function;
子类型T_SLV_32是标准逻辑向量(31到0);
T_SLVV_32型是T_SLV_32的阵列(自然范围);
返回标准逻辑向量的函数是
变量slv:STD_逻辑_向量((slvv'长度*32)-1到0);
开始
对于slvv范围循环中的i
slv((i*32)+31向下至(i*32)):=slvv(i);
端环;
返回slv;
末端功能;
用法:
buffer_linear <= to_slv(buffer_word);
buffer\u linear在什么条件下可以使用RAM块?“一次访问的位有限制吗?”MartinG你最好的选择是查看你的合成工具内存推理模式。例如,在此第95页及以后,条件可能包括读和写过程都是同步的,即时钟过程,因为块RAM是同步RAM,并且同时读取一些上限(32或64)位。