如何使用Or函数循环大数组

时间:2014-05-15 08:15:27

标签: arrays vhdl

问题

我创建了一个简单的脚本,它扫描了我在顶层(N)定义的一些引脚。如果引脚已经死了,它们通常会保持高或低,或者做一些意想不到的事情。此时,每个引脚发送一个脉冲,延迟一个时钟周期。

我的尝试

这些脉冲被发送到名为s_pulse的数组。这个数组的大小是在合成时动态创建的,如下所示:

<snip>
generic (N : natural);
<snip>

PulseGen : for I in 0 to N-1 generate
    begin
    FMC_IBUF : IBUFDS
   generic map (
        DIFF_TERM => TRUE,
        IOSTANDARD => "DEFAULT")
   port map (  
      O  => s_pulse (I) ,
      I => pulse_p (I) ,
      IB  => pulse_n (I) 
      );
end generate PulseGen;

然后我希望只要一个名为std_logic的{​​{1}}引脚有一个信号就发出信号,这样可行,但由于上述明显的原因,它无法动态运行,但我可以'找出一种方法:

pulse

关于如何为数组的每个成员快速生成大if rising_edge(clk) then pulse <= s_pulse(0) or s_pulse(1) or s_pulse(2) or s_pulse(3).... end if; 函数的任何想法,或者提出一些我不知道的函数来使这更短,更重要的是,动态?

1 个答案:

答案 0 :(得分:3)

对于疲惫的旅行者,我找到了一个解决方案:

library ieee;
use ieee.std_logic_misc.all;
<snip>

    if rising_edge(clk) then
        pulse <= or_reduce(s_fmc);

    end if;