Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在vhdl中使用resize函数时出错_Vhdl - Fatal编程技术网

在vhdl中使用resize函数时出错

在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) 老实说,您可能想重新思考您正在尝试做

我正在尝试用VHDL编写FPU单元。我正在做我的第一步。执行此指令时出现两个错误:

尾数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;