意图:
我在ZedBoard上读取内存中的数据,内存由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 <= buffer_word; -- !!! PROBLEM因此,我可以轻松地寻址缓冲区中的任何位,而无需重新计算特定单词( buffer_word)中的位置。
问题:
如何将std_logic_vectors数组转换为1长std_logic_vector?有没有办法避免在一个循环中连接128个单词?(类似于buffer_linear <= buffer_word;)
发布于 2016-04-15 11:22:09
您需要一个函数来将向量向量转换为一维向量.
下面的示例使用类型名称T_SLVV_32表示它是向量向量,而内部向量中的向量长度为32位。(请参阅我的链接源文件,以获得名为STD_LOGIC的真正的二维T_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;用法:
buffer_linear <= to_slv(buffer_word);这个函数没有创建逻辑,只是连接。
注释:同时访问内存的所有比特,防止了推断RAM或ROM内存块的综合工具!
来源:PoC.vectors
有关前后转换向量和矩阵的更多示例,请参见我在GitHub上的向量包。
https://stackoverflow.com/questions/36645064
复制相似问题