Vhdl 需要知道是否组合

Vhdl 需要知道是否组合,vhdl,Vhdl,我已经编写了一个代码,用于在给定的4位std\u logic\u向量中计算1的数量,并且输出必须以2位向量显示。我编写了如下代码: count <= A + "01" when input(0) = '1' else A; A <= B + "01" when input(1) = '1' else B; B <= C + "01" when input(2) = '1' else C; C <= "01" when input(3) =

我已经编写了一个代码,用于在给定的4位
std\u logic\u向量中计算1的数量,并且输出必须以2位向量显示。我编写了如下代码:

count <= A + "01" when input(0) = '1' else A;
A     <= B + "01" when input(1) = '1' else B;
B     <= C + "01" when input(2) = '1' else C;
C     <=     "01" when input(3) = '1' else "00";

count这个
+
操作符是组合的,可以合成。
+
可以运行 直接在
整数
实数
上操作,并在
标准逻辑向量
上操作 需要使用软件包才能包含必要的功能。从您的代码来看,您似乎使用了:

library ieee;
use ieee.std_logic_unsigned.all;
即使有这个名称,这也是一个非IEEE标准的软件包,并且是另一个选择 IEEE标准包是IEEE.numeric\u std

请注意,根据您的代码,看起来您正在使用一个2位向量 计算4位向量中1的数量,因此如果所有4位都是1,则2位 向量将溢出并显示值0

计数1的另一个实现是生成一个函数,该函数使用 ieee.numeric_std软件包,结果长度为3位,看起来 比如:

该函数也是可合成的,因为循环被展开以实现 所需的硬件量,就像问题中的显式代码一样。这个 然后,可以使用函数使
计数

count <= cnt_1s(input);
计数
count <= cnt_1s(input);