我正在xilinx学生实验室工作并尝试学习VHDL,但在修复错误方面遇到了一些麻烦。我现在主要专注于让加法部分工作。
我得到的错误如下:
[Synth 8-1560]正式金额的实际数字必须是变量[" C:/ Nexys 4> Projects / lab4_1_1 / lab4_1_1.srcs / sources_1 / new / add_two_values_procedure.vhd":54 ]
[Synth 8-2778]附近的类型错误;期望类型std_ulogic [" C:/ Nexys 4> Projects / lab4_1_1 / lab4_1_1.srcs / sources_1 / new / add_two_values_procedure.vhd":56]
[Synth 8-2778] b附近的类型错误;期望类型std_ulogic [" C:/ Nexys 4> Projects / lab4_1_1 / lab4_1_1.srcs / sources_1 / new / add_two_values_procedure.vhd":56]
对于第一个错误,我读到如果我不在一个过程中使用该过程,那么我必须将信号传递给过程,以便为其分配变量total。有人可以请问如何解决这个错误吗?
对于第二次和第三次错误,我在库中查找了std_logic_1164并看到了这一行
功能"和" (l,r:std_logic_vector)RETURN std_logic_vector;
据我所知(无论这个主题多么小),第56行在和/运算符/函数(?)的两侧都使用了std_logic_vector,并且应该返回一个std_logic_vector。那么为什么要求我使用std_ulogic。 编辑:上面我从这个网站http://www.csee.umbc.edu/portal/help/VHDL/packages/std_logic_1164.vhd看到的这一行,但从我的书,VHDL的设计师指南,包中没有这条线。
以下是我的代码
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_SIGNED.ALL;
entity add_two_values_procedure is
Port ( a : in STD_LOGIC_VECTOR (3 downto 0);
b : in STD_LOGIC_VECTOR (3 downto 0);
operand : in STD_LOGIC;
sum : out STD_LOGIC_VECTOR (3 downto 0);
cout : out STD_LOGIC);
end add_two_values_procedure;
architecture Behavioral of add_two_values_procedure is
signal s : STD_LOGIC_VECTOR (3 downto 0);
procedure add_values (
a : in STD_LOGIC_VECTOR (3 downto 0);
b : in STD_LOGIC_VECTOR (3 downto 0);
operand : in STD_LOGIC;
sum : out STD_LOGIC_VECTOR (3 downto 0))
is
variable total : STD_LOGIC_VECTOR (3 downto 0);
begin
case operand is
when '1' =>
total := a + b;
when '0' =>
total := a - b;
end case;
sum := total;
end procedure add_values;
begin
add_values(a, b, operand, s); 54
sum <= s;
cout <= a and b; 56
end Behavioral;
答案 0 :(得分:1)
引用VHDL 2008:
如果模式是inout或out,并且没有显式指定对象类,则假定为变量。
所以试试:
procedure add_values (
a : in STD_LOGIC_VECTOR (3 downto 0);
b : in STD_LOGIC_VECTOR (3 downto 0);
operand : in STD_LOGIC;
signal sum : out STD_LOGIC_VECTOR (3 downto 0))
is
variable total : STD_LOGIC_VECTOR (3 downto 0);
begin
case operand is
...
查看cout
的类型。
您正在为std_logic_vector(3 downto 0)
分配std_logic
。