函数参数内的数学运算

时间:2015-07-17 07:58:49

标签: function vhdl

调用函数时是否可以在参数内执行数学运算?

例如:

answer = to_integer(dividend/divisor);

1 个答案:

答案 0 :(得分:1)

虽然Phillipe夸大了普通VHDL编码器的效率,但尝试并不困难。

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity foo is
end entity;

architecture fum of foo is
    signal dividend:    unsigned (7 downto 0) := ("11111111"); -- 255
    signal divisor:     unsigned (7 downto 0) := ("00001111"); -- 15
    signal answer:      integer;
begin
    process
    begin
        answer <= to_integer(dividend/divisor);
        wait for 0 ns;
        report "answer = " & integer'image(answer);
        wait;
    end process;
end architecture;

结果:

  

foo.vhdl:17:9:@ 0ns :(报告说明):answer = 17

wait for 0 ns;允许answer假设操作的值(它是一个信号,并且当任何进程正在执行或尚未暂停时,不会发生分配)。 0 ns将导致增量循环延迟。

如果answer是在流程中声明的变量,它的值将立即可用,并且不需要等待。

没有延迟的最后一个等待语句会阻止进程重复执行。