是否可以在函数中使用同步过程?

时间:2014-11-13 14:38:04

标签: function if-statement vhdl fpga synchronous

i=0;
If rising_edge (clk) then
y(i)<=x(i) ;
i=:i+1;
end if;

是否可以在功能块中使用上面的块?如果不是,是否有任何类似函数的子程序样式来实现这一目标?

或者是否有任何可合成的'for loop'用法而不是'if statement'?

2 个答案:

答案 0 :(得分:1)

您可以使用以下程序:

  procedure SetBits(signal clk : in std_logic; signal y : out std_logic_vector(7 downto 0)) is
  begin
    for i in 7 downto 0 loop
      wait until (rising_edge(clk));
      y(i) <= '1';
    end loop;
  end procedure;

然后是这样的

  sequential : process
  begin
    SetBits;
    wait;
  end process sequential;

答案 1 :(得分:0)

不,你不能在函数内部有一个时钟进程。但可以使用循环:

if rising_edge(clk) then
  for i in 0 to x'length - 1 loop
    y(i) <= x(i); -- or whatever operation
  end loop;
end if;

如果你真的想要,你可以在函数中包含for循环部分

function f(x : std_logic_vector) return std_logic_vector is
  variable result : std_logic_vector(x'range);
begin
  for i in x'range loop
    result(i) := x(i); -- or whatever operation
  end loop;
  return result;
end function f;

if rising_edge(clk) then
  y <= f(x);
end if;

我假设你想做的不仅仅是分配比特,当然,否则根本就不需要循环或功能。