首页 > 解决方案 > VHDL 中的函数

问题描述

我正在尝试从多个组件中读取输出并以整数形式显示它们。输出都是 4 位向量。由于我不想多次重复代码,因此我正在尝试使用 VHDL 原生的函数。我以前没有使用过这些,也无法在网上看到很多解释清楚的文档。

function FourBitsToNumber (X : std_logic_vector(3 downto 0))
return integer is
begin
if (X = "0000") then return 0;
  elsif (X = "0001") then return integer(1);
  elsif (X = "0010") then return integer(2);
  elsif (X = "0011") then return integer(3);
  elsif (X = "0100") then return integer(4);
  elsif (X = "0101") then return integer(5);
  elsif (X = "0110") then return integer(6);
  elsif (X = "0111") then return integer(7);
  elsif (X = "1000") then return integer(8);
  elsif (X = "1001") then return integer(9);
 end if;
end FourBitsToNumber;

我使用以下代码在时钟脉冲上调用该函数:

variable1 <= FourBitsToNumber(A);

... 'variable1' 是整数声明类型。'A' 是一个 4 位向量。

但是,从我的测试台上,我可以看到代码行已到达,但始终只收到 0 值(即使我知道它应该更多)。

我的猜测可能是代表我的语法或另一个愚蠢的错误。

标签: vhdl

解决方案


尝试这个...

function my_int(X : std_logic_vector(3 downto 0)) return integer is
    begin
        return to_integer(unsigned(X));
end function my_int;

我有一种感觉,这也可以与未定义的长度 slv 一起工作......例如

function my_int_of_any_len(X : std_logic_vector) return integer is
    begin
        return to_integer(unsigned(X));
end function my_int_of_any_len;

马修的建议:(见下面他的评论)

function my_int(X : std_logic_vector(3 downto 0)) return integer is
use ieee.numeric_std.all;
    begin
        return to_integer(unsigned(X));
end function my_int;

我还应该指出,您实际上不必为此构建自己的功能。你说过你想要一个整数的地方,把variable1 <= to_integer(unsigned(X));


推荐阅读