VHDL中的函数

VHDL中的函数,vhdl,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

我试图读取多个组件的输出,并以整数形式显示它们。输出均为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试试这个

function my_int(X : std_logic_vector(3 downto 0)) return integer is
    begin
        return to_integer(unsigned(X));
end function my_int;
我有一种感觉,这也可以与一个未定义的长度slv工作。。。 e、 g

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


我还应该指出,你实际上不必为此构建自己的函数。如果你说你想要一个整数,只要把
variable1放进去,为什么不使用无符号和to_整数函数呢?请参阅下面我的答案:)无法告诉您为什么函数调用总是返回0而不返回一个值。请注意,您的功能有几个缺陷。标准逻辑元素数组可以包含的不仅仅是二进制值“0”和“1”。对于那些情况,或者对于大于9的二进制值,都没有返回值。如果FourBitsToNumber的参数出现在这两种情况中的任何一种情况下,这将导致错误。您可能需要一个else,或者可以将case语句与其他选项一起使用。@诵读困难Gruffalo-为什么不使用无符号和to_整数函数?unsigned是在您的答案中的IEEE包numeric_std中声明的类型。它用于具有特定语法和语义的类型转换,是一种基本操作,而不是函数调用。nuneric_std包位于参考库IEEE中。函数FourBitsToNumber的子程序体中的if语句条件不需要括号。在VHDL中,条件表达式在语法上是不同的,括号内的任何表达式在没有括号的情况下也是有效的。通过在
is
begin
之间插入use子句,可以使这些函数完全自包含的,即
)返回整数is use ieee.numeric\u std.all;开始时
(为了清晰起见,请使用一些换行符,obvs)。有一个免费的“专家级VHDL”供你试用。哦,谢谢,马修,是的,我完全忘了你也可以加进去!
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;