vhdl中的数值运算
我是vhdl编程语言的新手。我正试图用“+”运算符做一个全加器,我也做了代码和l编译,但当我模拟它时,输出非常奇怪,与全加器输出不一致,我认为错误可能在向量长度上,但我无法修复它vhdl中的数值运算,vhdl,Vhdl,我是vhdl编程语言的新手。我正试图用“+”运算符做一个全加器,我也做了代码和l编译,但当我模拟它时,输出非常奇怪,与全加器输出不一致,我认为错误可能在向量长度上,但我无法修复它 library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.std_logic_unsigned.all; entity adder is port (a,b,c : in std_logic; s,d :
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use ieee.std_logic_unsigned.all;
entity adder is
port (a,b,c : in std_logic;
s,d : out std_logic);
end entity;
architecture arc_adder of adder is
signal z : std_logic_vector (1 downto 0);
signal w : std_logic_vector (3 downto 0);
begin
z <= ('0'&a + ('0'&b));
w <= '0'&z + "00"&c;
s<=w(0);
d<=w(1);
end architecture;
ieee库;
使用ieee.std_logic_1164.all;
使用ieee.numeric_std.all;
使用ieee.std_logic_unsigned.all;
实体加法器是
端口(a、b、c:标准逻辑中;
s、 d:输出标准(U逻辑);
终端实体;
加法器的结构是arc_加法器
信号z:std_逻辑_向量(1到0);
信号w:标准逻辑向量(3到0);
开始
z必须使用unsigned来使用“+”运算符进行键入
ieee.numeric\U std.all中包含无符号类型
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity adder is
port (a,b,c : in std_logic;
s,d : out std_logic);
end entity;
architecture arc_adder of adder is
signal z : std_logic_vector (1 downto 0);
signal w : std_logic_vector (3 downto 0);
begin
z <= std_logic_vector(unsigned('0'&a) + unsigned('0'&b));
w <= std_logic_vector(unsigned('0'&z) + unsigned("00"&c));
s<=w(0);
d<=w(1);
end architecture;
ieee库;
使用ieee.std_logic_1164.all;
使用ieee.numeric_std.all;
实体加法器是
端口(a、b、c:标准逻辑中;
s、 d:输出标准(U逻辑);
终端实体;
加法器的结构是arc_加法器
信号z:std_逻辑_向量(1到0);
信号w:标准逻辑向量(3到0);
开始
z必须使用unsigned来使用“+”运算符进行键入
ieee.numeric\U std.all中包含无符号类型
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity adder is
port (a,b,c : in std_logic;
s,d : out std_logic);
end entity;
architecture arc_adder of adder is
signal z : std_logic_vector (1 downto 0);
signal w : std_logic_vector (3 downto 0);
begin
z <= std_logic_vector(unsigned('0'&a) + unsigned('0'&b));
w <= std_logic_vector(unsigned('0'&z) + unsigned("00"&c));
s<=w(0);
d<=w(1);
end architecture;
ieee库;
使用ieee.std_logic_1164.all;
使用ieee.numeric_std.all;
实体加法器是
端口(a、b、c:标准逻辑中;
s、 d:输出标准(U逻辑);
终端实体;
加法器的结构是arc_加法器
信号z:std_逻辑_向量(1到0);
信号w:标准逻辑向量(3到0);
开始
z您需要std_logic_unsigned
做什么?@Staszek因为他错误地使用了std_logic_vector
而不是unsigned
类型。分配给w的表达式的可能副本有两个具有相同优先级的运算符,它们将按从左到右的顺序关联,可以用括号显示:(('0'&z)+“00”)&c代码>。最后的值长度为4,等于“0”&z&c。那不是你想要的。z的二进制值可以是“00”、“01”或“10”。对于进位(c),w可以具有这些值和“11”,因此只需要相同的范围1到0w您需要std\u logic\u unsigned
做什么?@Staszek因为他错误地使用了std\u logic\u vector
而不是unsigned
类型。分配给w的表达式的可能副本有两个具有相同优先级的运算符,它们将按从左到右的顺序关联,可以用括号显示:(('0'&z)+“00”)&c代码>。最后的值长度为4,等于“0”&z&c。那不是你想要的。z的二进制值可以是“00”、“01”或“10”。对于进位(c),w可以具有这些值和“11”,因此只需要相同的范围1到0w如果z
和w
也有类型unsigned
,这看起来会更整洁。如果z
和w
也有类型unsigned
,这看起来会更整洁。