同时从数组中访问四个元素vhdl

时间:2014-12-07 16:00:04

标签: vhdl

如何在一个进程中同时访问二维数组或数组数组中的四个元素? 在这个示例中,我试图同时访问intg1,合成正在进行中。

type img_whole is array (78 downto 0, 130 downto 0) of std_logic_VECTOR(7 downto 0);
signal img1: img_whole;

signal i1_1: integer range 0 to 79:=0;
signal j1_1:integer range 0 to 131:=0;

type intg is array (78 downto 0, 130 downto 0) of integer range 0 to 1751998;--no double??
signal intg1 : intg;



integral :process (clka,finished,finished1)
variable tempo: integer range 0 to 1751998;


begin

if clka'event and clka = '1' then
if finished="1" and finished1="0" then
if i1_1 < 78 and j1_1 <130 then 

j1_1<=j1_1+1;
elsif j1_1=130 and i1_1<78 then
j1_1<=0 ;
i1_1<=i1_1+1;
elsif j1_1<130 and i1_1=78 then
j1_1<=j1_1+1;
elsif j1_1=130 and i1_1=78 then
    finished1<="1";
end if; 
tempo:= to_integer(unsigned('0' & img1(i1_1,j1_1)));

if i1_1-1>=0 then
tempo:=intg1(i1_1-1,j1_1)+tempo;

end if;
if j1_1-1>=0 then
tempo:=intg1(i1_1,j1_1-1)+tempo;

end if; 
if i1_1-1>=0 and j1_1-1>=0 then
tempo:=tempo-intg1(i1_1-1,j1_1-1);

end if;

   intg1(i1_1,j1_1)<=tempo;
    end if;
end if;
end process;

我正在尝试同时访问intg1,合成正在进行中。 这段代码用于从二维数组中获取整数图像。

1 个答案:

答案 0 :(得分:0)

代码中存在功能和综合问题。

功能问题:

  • finished1仅在此过程中被'1'驱动,但从未被'0'驱动,因此如果初始值为'0',那么此过程中的操作只能在上电后执行一次,因为finished1的{​​{1}}值会因进程启用条件而禁止进一步更新。

  • '1'i1_1是在流程开始时被驱动的信号,然后在流程的后期使用,但由于信号,使用j1_1分配的值在下一个过程评估之前不可用。这是故意的吗?

使用模拟器确保正确的功能,这可以在合成之前完成。

综合问题:

  • <=是一张至少有79 * 131&gt;的表格。 10个K条目,每个log2(1751999)&lt; = 18位,因此是一个非常大的表。该设计需要在表中进行异步查找,因为没有额外的周期(时钟边沿)可从索引的新值获得,例如intg1,直到根据表查找生成进程的输出。大型表中的异步查找需要巨大的多路复用网络,这可能是合成时间长的原因。并且基于不同的索引值甚至多次执行此查找。

  • 次要:i1_1,并且流程的敏感度列表中不需要finished,因为这是一个由finished1计时的流程。

    < / LI>

以上问题列表可能不完整。

要修复表查找问题(第一个合成问题),请使用循环进行管道式设计,例如:

  1. 生成索引值clka

  2. 同步
  3. i1_1表格查找

  4. 生成中级intg1,并更新tempo

  5. 当前设计在单个周期中执行步骤2.和3.因此无法在表中进行同步查找,因为周期中只有一个时钟边沿,这用于写回到intg1表。因此,通过在两个周期中分割查找和写回操作,可以使用时钟边沿来读取表(同步读取)和写入表。基于典型FPGA中的可用硬件资源,使用时钟边沿的这种同步读取更加有效,因为它们包含类似于intg1表的大型同步RAM,因此实现将更小且更快。同步intg1查找是通过简单地添加一个时钟进程来完成的,其中信号由基于所需索引值的intg1输出直接驱动。必须进行所有必需的读取,然后后续过程可以确定实际使用的读取值中的哪一个。

    具体的管道实施必须适应设计要求。