计算list1中每个元素的位置与list2中相同元素的位置之间的距离,然后在vhdl中找到标准化距离 首先,我们将生成mem1(由每个数据输入的地址组成),即从1,2,3,4 ....到mem1数据输入结束的地址,ok mem2(由每个数据输入的地址组成),即从mem2数据输入的1,2,3,4 .... t0结束的地址,确定 检查从mem1输入的任何数据是否是从mem2输入的任何数据。 即mem1中每个元素的位置以及mem2中相同元素的位置 因此,同一元素的地址在两个mem中会有所不同 地址差异将是距离测量。 即搜索相似性,计算list1和list2之间的距离 我如何在vhdl代码中执行此操作??? 请帮忙???
答案 0 :(得分:1)
你的方法听起来很合理。我会设计一个实例化一块内存的实体。输入将是您要查找的数据。输出将是数据的位置,以及指示是否找到数据的信号。从存储器中读出所有数据需要许多时钟周期。时钟周期数等于存储器的深度。因此,如果您的内存中有10个数据字,则需要10个时钟才能读取所有单词。
你应该考虑一些极端情况......如果数据字在内存中两次怎么办?数据是按顺序存储在内存中的吗?
一旦你想出了所有这些,就在更高级别的文件中实例化其中两个组件。此文件计算两个数据位置之间的距离。
这就是我如何在概念上解决它。祝你好运。
答案 1 :(得分:0)
如果我理解正确,你想要产生一个数组,其中包含array_1中每个元素到array_2中保持相同值的元素的距离。
如果是这样,这是对可能的解决方案的第一次尝试:
function individual_distances(vector_1, vector_2: integer_vector) return integer_vector is
variable distances: integer_vector(vector_1'range);
begin
for i in vector_1'range loop
for j in vector_2'range loop
if (vector_1(i) = vector_2(j)) then
distances(i) := j - i;
end if;
end loop;
end loop;
return distances;
end;
以下是一些随机数组的示例输出:
individual_distances( (1, 2, 3, 4, 5), (5, 4, 3, 2, 1) ); --> (4, 2, 0, -2, -4)
individual_distances( (1, 2, 3, 4), (4, 3, 2, 1) ); --> (3, 1, -1, -3)
individual_distances( (1, 2, 3), (1, 2, 3) ); --> (0, 0, 0)
正如Martin Thompson所说,此解决方案是否适用于您的情况取决于您的性能目标和列表的大小。实际上,这可以适用于中小型列表。如果您的列表很大,您应该研究架构选择。例如,算法的完全序列化版本将花费N ^ 2个时钟周期。下面的示例需要64个周期来计算两个数组之间的距离,每个数组包含8个元素:
process (clock, reset) is
variable i, j: integer range 0 to 7;
begin
if reset then
i := 0;
j := 0;
distances <= (others => 0);
elsif rising_edge(clock) then
if (vector_1(i) = vector_2(j)) then
distances(i) <= abs(j - i);
end if;
if i < 7 then
i := i + 1;
else
i := 0;
j := (j + 1) mod 8;
end if;
end if;
end process;
存在其他中间解决方案,例如仅序列化外部循环。如果您需要性能,还可以考虑使用流水线技术。
以上代码是可综合的,只需记住根据您的设计要求约束范围。
答案 2 :(得分:0)
我做了一个代码作为你的建议rick,但我有同样的问题,是什么错误类型的距离与类型不兼容 -
library IEEE;
使用IEEE.STD_LOGIC_1164.all;
包装样品是 type sample是std_logic_vector(0到7)的数组(0到255);
结束样本;
entity measure is
端口( CLK:STD_LOGIC; A1:样品中; A2:样品; 距离:出样本); 结束措施; 建筑行为衡量标准是 信号d:样本; 函数距离(A1,A2:样本)返回样本是 可变距离:样本; 开始 我在A1'范围循环中 对于A2'范围循环中的j if(A1(i)= A2(j))然后 距离:=(j - i); 万一; 结束循环; 结束循环;
return distances;
端; 结束行为;