Function 向量上的vhdl位运算

Function 向量上的vhdl位运算,function,vector,vhdl,bitwise-operators,Function,Vector,Vhdl,Bitwise Operators,试图模仿关于逐位操作的verilog行为(意思是——一种对向量的所有位都有效并输出1位答案的操作) 例如: use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; ... signal vect : std_logic_vector (length -1 downto 0); signal ans : std_logic; signal addin : std_logic; 当vect=all“0”时,我希望ans为“1

试图模仿关于逐位操作的verilog行为(意思是——一种对向量的所有位都有效并输出1位答案的操作)

例如:

use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
...
signal vect  : std_logic_vector (length -1 downto 0);
signal ans   : std_logic;
signal addin : std_logic;
当vect=all“0”时,我希望ans为“1”(nor)

当vect=all'1'时,我希望ans为'1'(和)

当vect=偶数'1'时,我希望ans为'1'(xor) 等等

我实现了以下功能(此处仅显示一个):

此函数应给出所有位上的“和”。 所以,我的问题来了:

a、 有没有更简单的方法来进行这样的操作

b、 我像这样使用Vand
if Vand(vect&addin)='1'做点什么…
但是当vect是'0H'而addin是'H'时,条件被填满了,我不知道为什么。有人能想一想为什么这种操作会有问题吗?函数在其他情况下会自动运行,但在这里我测试了它的快速变化免疫性,得到了这种不想要的行为

编辑 我不知道向量“vect”或向量“vect&addin”的长度

编辑2
通过创建子函数
Vand(vect:std\u logic\u vector;b:std\u logic)
解决了第二个问题,该函数使用原始的
Vand
(并在我的Vnor中发现了一个bug)。仍然希望找到比这两个函数更好的解决方案。

有名为
的函数,它们可以满足您的需要。它们还可以在输入端调用
到\u X01
,这意味着
H
L
s将转换为
1
0

它们可以在
std_logic_misc
中找到,用于
std_logic_vector
s,并建议用于
ieee的下一版本VHDL。对于
signed
unsigned
向量,可以使用数值std

VHDL-2008还允许在
std\u logic\u vector
s上使用此语法:

anded <= and v;
ored <= or v;

和有名为
的函数,它们可以执行您想要的操作。它们还可以在输入上调用
到\u X01
,这意味着
H
L
s将转换为
1
0

它们可以在
std_logic_misc
中找到,用于
std_logic_vector
s,并建议用于
ieee的下一版本VHDL。对于
signed
unsigned
向量,可以使用数值std

VHDL-2008还允许在
std\u logic\u vector
s上使用此语法:

anded <= and v;
ored <= or v;

anded试图在我的本地数字标准中找到例如
或_reduce
,但只能在Synopsys标准逻辑杂项中找到任何内容;有何查找建议?@MortenZdk-我在或中找不到任何还原逻辑运算符(IEEE-SA补充材料)。我确实在ghdl的Synopsys库中找到了它们,特别是std_logic_misc。它们也可以在David Bishops proposed math extensions(),(用户指南)中找到。建议用于VHDL-201X。@Koontz:感谢您的反馈,IEEE链接:-)@David Koontz:感谢您提供的位置,它确实在std_logic_misc包中。有趣的是,当我打开软件包并查看函数时,它们与我实现的功能一模一样:)马丁·汤普森:感谢您的回答。我试图在我的本地数字标准中找到例如
,但只能在Synopsys标准逻辑misc中找到任何内容;有没有关于去哪里找的建议?@MortenZdk-我在or(IEEE-SA补充材料)中找不到任何简化逻辑运算符。我确实在ghdl的Synopsys库中找到了它们,特别是std_logic_misc。它们也可以在David Bishops提出的数学扩展()中找到(用户指南)。建议用于VHDL-201X。@Koontz:感谢您的反馈,IEEE链接:-)@David Koontz:感谢您提供的位置,事实上它在std_logic_misc包中。有趣的是,当我打开软件包并查看函数时,它们与我实现的完全一样:)马丁·汤普森:谢谢你的回答