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);
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 值(即使我知道它应该更多)。
我的猜测可能是代表我的语法或另一个愚蠢的错误。
解决方案
尝试这个...
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));
推荐阅读
- azure - 当一个管道触发另一个管道时如何获取 customSourceVersion 的值?
- javascript - 如何根据状态 INVALID 过滤嵌套对象
- python - 在每个唯一列值之后添加空行
- python - 应用模型后如何从sklearn导出数据集?
- javascript - 使用 JS 删除 CSS 中的注释
- php - PHP 导出到 csv,估计完成时间或进度条百分比加载
- dart - 如何更新在 dart 中编译的可执行详细信息
- r - 使用 dplyr 对两个变量进行递归求和
- javascript - 每当我导入 bootstrap.bundle.min.js 时,控制台浏览器都会出现问题
- c++ - 在声明后(运行时)创建一个类变量 const(使用一些类方法)