我正在使用 Xilinx ISE 工具。
遵循的步骤:-
当我检查 TB 的行为检查语法时,它编译时带有 2 个警告:
警告 1:- 第 39 行:子程序 <"+"> 不符合其声明。 警告 2:- 第 39 行:函数“+”并不总是返回值。
无论如何,我都模拟(使用模拟行为模型)TB,但没有显示任何波形。
请指导我解决这个问题。
代码如下:-
VHDL 封装:
library IEEE;
use IEEE.STD_LOGIC_1164.all;
package my_package is
function "+" (a,b : std_logic_vector)
return std_logic_vector;
end package my_package;
package body my_package is
function "+" (a,b : std_logic_vector(3 downto 0))
return std_logic_vector is
variable result : std_logic_vector (3 downto 0) := "0000";
variable carry : std_logic := '0';
begin
for i in a'reverse_range loop
result(i) := a(i) xor b(i) xor carry;
carry := (a(i) and b(i)) or (b(i) and carry) or (a(i) and carry);
end loop;
end "+";
end package body my_package;
VHDL 模块:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use work.my_package.all;
entity my_package_check is
Port ( A : in STD_LOGIC_VECTOR (3 downto 0);
B : in STD_LOGIC_VECTOR (3 downto 0);
C : in STD_LOGIC;
res : out STD_LOGIC_VECTOR (3 downto 0);
Cout : out STD_LOGIC);
end my_package_check;
architecture Behavioral of my_package_check is
SIGNAL Z : STD_LOGIC_VECTOR (4 downto 0);
begin
Z <= A + B;
res <= Z (3 downto 0);
Cout <= Z(4);
end Behavioral;
VHDL 测试台:
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;
ENTITY my_package_checktb IS
END my_package_checktb;
ARCHITECTURE behavior OF my_package_checktb IS
COMPONENT my_package_check
PORT(
C : IN std_logic;
A : IN std_logic_vector(3 downto 0);
B : IN std_logic_vector(3 downto 0);
res : OUT std_logic_vector(3 downto 0);
Cout : OUT std_logic
);
END COMPONENT;
SIGNAL C : std_logic :='0';
SIGNAL A : std_logic_vector(3 downto 0) := "0000";
SIGNAL B : std_logic_vector(3 downto 0) := "0000";
SIGNAL Cout : std_logic;
SIGNAL res : std_logic_vector(3 downto 0);
BEGIN
uut: my_package_check PORT MAP(
A => A,
B => B,
C => C,
res => res,
Cout => Cout
);
A <= "0000", "1111" after 100 ns;
B <= "0000", "1111" after 100 ns;
END;
注意:- 由于通过刺激过程提供输入的测试向量,导致错误,我使用了不同的方法来提供测试向量。
目的:- 获取输出波形并验证包中声明的“+”函数的功能。
您的自定义
"+"
函数没有 return 语句。它需要以以下内容结尾:
Return carry & result;