Function 向量上的vhdl位运算
试图模仿关于逐位操作的verilog行为(意思是——一种对向量的所有位都有效并输出1位答案的操作) 例如: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
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、 我像这样使用Vandif 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包中。有趣的是,当我打开软件包并查看函数时,它们与我实现的完全一样:)马丁·汤普森:谢谢你的回答