在vhdl中使用resize函数时出错
我正在尝试用VHDL编写FPU单元。我正在做我的第一步。执行此指令时出现两个错误:在vhdl中使用resize函数时出错,vhdl,Vhdl,我正在尝试用VHDL编写FPU单元。我正在做我的第一步。执行此指令时出现两个错误: 尾数1您正在混合VHDL数学库。我建议您使用数字\u std(我的首选项)或std\u logic\u unsigned/std\u logic\u arith,但不能同时使用两者 还有其他几个问题。无法将较大的(按“d”位)manitissa1值分配回manitissa1,您需要适当大小的目标。E1-E2的减法需要一些类型转换才能合法,可能是:有符号(E1)-有符号(E2) 老实说,您可能想重新思考您正在尝试做
尾数1您正在混合VHDL数学库。我建议您使用数字\u std(我的首选项)或std\u logic\u unsigned/std\u logic\u arith,但不能同时使用两者
还有其他几个问题。无法将较大的(按“d”位)manitissa1值分配回manitissa1,您需要适当大小的目标。E1-E2的减法需要一些类型转换才能合法,可能是:有符号(E1)-有符号(E2)
老实说,您可能想重新思考您正在尝试做的事情的整个方法,特别是如果您希望将此代码合成为逻辑。换句话说,你想在那行代码上实现什么?我想通过将尾数A1的大小增加d来调整尾数A1的位数。然而,尾数A1
有一个由其索引范围决定的固定长度。
Error: C:/Modeltech_pe_edu_10.4a/examples/fpu/shifter.vhd(38): Illegal type conversion to ieee.std_logic_1164.STD_LOGIC_VECTOR (operand type is not known).
Error: C:/Modeltech_pe_edu_10.4a/examples/fpu/shifter.vhd(36): (vcom-1078) Identifier "unsigned" is not directly visible.
library ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_misc.ALL;
USE ieee.std_logic_unsigned.ALL;
USE ieee.std_logic_arith.ALL;
use ieee.numeric_std.all;
entity fpu is
port (
E1,E2 : IN std_logic_vector( 30 downto 23);
M1,M2 : IN std_logic_vector( 22 downto 0);
S1,S2 : IN std_logic_vector (31 downto 31);
op : IN std_logic_vector (1 downto 0);
SUM : OUT std_logic_vector (45 downto 0);
E : OUT std_logic_vector (7 downto 0);
clk : IN std_logic
);
end entity;
architecture arch_fpu of fpu is
SIGNAL d: integer;
SIGNAL mantissa1 : std_logic_vector (22 DOWNTO 0) ;
SIGNAL mantissa2 : std_logic_vector (22 DOWNTO 0) ;
begin
process(E1,E2,M1,M2,S1,S2,clk)
BEGIN
if((op="01") or (op="00")) then
E<=E1 when E1>E2 else
E2;
d<=abs(conv_integer(E1-E2));
mantissa1 <= std_logic_vector(resize(unsigned(mantissa1),mantissa1'length + d));
end if;
END process;
end arch_fpu;