Vhdl 浮点实现警告

Vhdl 浮点实现警告,vhdl,fpga,import-module,Vhdl,Fpga,Import Module,我正在尝试使用xilinx ip核实现浮点乘法器模块,用于矩阵乘法,我得到了所有组件输出的警告,类似这样说 NgdBuild:443-SFF原语“乘法.M44/blk00000003/blk0000057e”具有未连接的输出引脚 这是密码 library IEEE; use IEEE.STD_LOGIC_1164.ALL; USE ieee.std_logic_arith.all; USE ieee.std_logic_unsigned.all; entity Multiplier is G

我正在尝试使用xilinx ip核实现浮点乘法器模块,用于矩阵乘法,我得到了所有组件输出的警告,类似这样说 NgdBuild:443-SFF原语“乘法.M44/blk00000003/blk0000057e”具有未连接的输出引脚 这是密码

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
USE ieee.std_logic_arith.all;
USE ieee.std_logic_unsigned.all;


entity Multiplier is
GENERIC( N : integer := 4);
PORT(
   clock,reset : IN STD_LOGIC;
   Aport: IN STD_LOGIC_VECTOR(31 downto 0);
    Bport: IN STD_LOGIC_VECTOR(31 downto 0);
    Xport:out STD_LOGIC_VECTOR(31 downto 0)
    );
end Multiplier;

architecture Behavioral of Multiplier is

type N_array is array (0 to N- 1) of STD_LOGIC_VECTOR (31 downto 0);    
type NfN is array (0 to N - 1) of N_array; 
TYPE state IS (state0, state1); 
SIGNAL pr_state, nx_state: state;
SIGNAL Ain_reg,Ain_next :NfN;
SIGNAL Bin_reg,Bin_next :N_array;
signal mul1,mul2,mul3,mul4,sum1,sum2 :N_array ;
signal prod_reg,prod_next:N_array;
Signal s_reg, s_next: INTEGER RANGE 0 TO 20;----used as counter
Signal P_reg, P_next: INTEGER RANGE 0 TO 10;----used as counter
Signal Address_reg, Address_next: INTEGER RANGE 0 TO 10;----used as counter
Signal out_reg,out_next: STD_LOGIC_VECTOR(31 downto 0);
---------------------------------------------------------------------------------------  
--Declaration of type and signal of a N element RAM  
--and a type and signal of a NXN element RAM
--with each element being 32 bit wide.
type ram_t is array (0 to N) of std_logic_vector(31 downto 0);
type ram_array is array (0 to N*n) of std_logic_vector(31 downto 0);
signal ram_B : ram_t := (others => (others => '0'));
signal ram_out : ram_t := (others => (others => '0'));
signal ram_A : ram_array := (others => (others => '0'));

 --------------------------------------------------------------------------------------
----------Components------------------------------------------------------------------
--This is the floating point 5 components adjusted to be used with virtex6
component Adder
port (
a: IN std_logic_VECTOR(31 downto 0);
b: IN std_logic_VECTOR(31 downto 0);
clk: IN std_logic;
result: OUT std_logic_VECTOR(31 downto 0));
end component;
 ------------------------------------------------------
component Multi
port (
a: IN std_logic_VECTOR(31 downto 0);
b: IN std_logic_VECTOR(31 downto 0);
clk: IN std_logic;
result: OUT std_logic_VECTOR(31 downto 0));
end component;
 --------------------------------------------------------------------------------------
BEGIN
 --------------------------------------------------------------------------------------  

Multiplication:BLOCK
Begin
M11:Multi port map (a => Ain_reg(0)(0),b => Bin_reg(0),clk => clock,result => mul1(0));
M12:Multi port map (a => Ain_reg(0)(1),b => Bin_reg(1),clk => clock,result => mul2(0));
M13:Multi port map (a => Ain_reg(0)(2),b => Bin_reg(2),clk => clock,result => mul3(0));
M14:Multi port map (a => Ain_reg(0)(3),b => Bin_reg(3),clk => clock,result => mul4(0));
S11: Adder port map (a =>mul1(0),b => mul2(0),clk => clock,result => sum1(0));
S12: Adder port map (a =>mul3(0),b => mul4(0),clk => clock,result => sum2(0));
PROD1: Adder port map (a => sum1(0),b =>sum2(0),clk => clock,result => prod_next(0));

M21:Multi port map (a => Ain_reg(1)(0),b => Bin_reg(0),clk => clock,result => mul1(1));
M22:Multi port map (a => Ain_reg(1)(1),b => Bin_reg(1),clk => clock,result => mul2(1));
M23:Multi port map (a => Ain_reg(1)(2),b => Bin_reg(2),clk => clock,result => mul3(1));
M24:Multi port map (a => Ain_reg(1)(3),b => Bin_reg(3),clk => clock,result => mul4(1));
S21:Adder port map (a => mul1(1),b => mul2(1),clk => clock,result =>  sum1(1));
S22:Adder port map (a => mul3(1),b => mul4(1),clk => clock,result =>  sum2(1));
PROD2:Adder port map (a => sum1(1),b =>sum2(1),clk => clock,result => prod_next(1));

M31:Multi port map (a => Ain_reg(2)(0),b => Bin_reg(0),clk => clock,result => mul1(2));
M32:Multi port map (a => Ain_reg(2)(1),b => Bin_reg(1),clk => clock,result => mul2(2));
M33:Multi port map (a => Ain_reg(2)(2),b => Bin_reg(2),clk => clock,result => mul3(2));
M34:Multi port map (a => Ain_reg(2)(3),b => Bin_reg(3),clk => clock,result => mul4(2));
S31:Adder port map (a => mul1(2),b => mul2(2),clk => clock,result =>sum1(2));
S32:Adder port map (a => mul3(2),b => mul4(2),clk => clock,result =>sum2(2));
PROD3:Adder port map (a => sum1(2),b =>sum2(2),clk => clock,result => prod_next(2));

M41:Multi port map (a => Ain_reg(3)(0),b => Bin_reg(0),clk => clock,result => mul1(3));
M42:Multi port map (a => Ain_reg(3)(1),b => Bin_reg(1),clk => clock,result => mul2(3));
M43:Multi port map (a => Ain_reg(3)(2),b => Bin_reg(2),clk => clock,result => mul3(3));
M44:Multi port map (a => Ain_reg(3)(3),b => Bin_reg(3),clk => clock,result => mul4(3));
S41: Adder port map (a => mul1(3),b => mul2(3),clk => clock,result => sum1(3));
S42: Adder port map (a => mul3(3),b => mul4(3),clk => clock,result => sum2(3));
PROD4:Adder port map(a => sum1(3),b => sum2(3),clk => clock,result => prod_next(3));    

end BLOCK Multiplication;

 ---------- Lower section: ------------------------ 
 PROCESS (reset, clock) 
 BEGIN 
  IF (reset='1') THEN 
        pr_state <= state0; 
        address_reg <= 0;
        s_reg <= 0;
        P_reg <= 0;         
ELSIF (clock'EVENT AND clock='1') THEN 
        pr_state <= nx_state; 
        s_reg <= s_next;
        p_reg <= p_next;
        Address_reg <= Address_next;
        Ain_reg <= Ain_next;
        Bin_reg <= Bin_next;
     prod_reg<=prod_next;
    out_reg<=out_next;          
END IF;
END PROCESS; 

---------- Upper section: ------------------------ 
PROCESS (Bport,Aport,out_reg,Address_reg,pr_state,s_reg,Ain_reg,Bin_reg,prod_reg,p_reg)

BEGIN      
Address_next <= Address_reg ;
s_next <= s_reg;
p_next <= p_reg;
Bin_next <= Bin_reg ;
Ain_next <= Ain_reg;
out_next <= out_reg;
nx_state <= pr_state ;
CASE pr_state IS                                                                        
WHEN state0 =>                                                                        
        IF (s_reg < N) THEN                                                           
            Bin_next(s_reg) <= Bport;                                                           
            Ain_next(0)(s_reg) <=  Aport;
            s_next <= s_reg + 1;
        ELSif(s_reg > 3 and s_reg < 8) then
            Ain_next(1)(4-s_reg) <=  Aport;
            s_next <= s_reg + 1;
        ELSif(s_reg > 7 and s_reg < 12) then
            Ain_next(2)(8-s_reg) <=  Aport;
            s_next <= s_reg + 1;
        ELSif(s_reg > 11 and s_reg < 16) then
            Ain_next(3)(12-s_reg) <=  Aport;
            s_next <= s_reg + 1;
        ElSE
            s_next <= 0;
            nx_state <= state1;
        END IF; 
 WHEN state1 =>  
        IF (P_reg < N) THEN
            out_next<= prod_reg(P_reg);  
            P_next <= P_reg + 1;
         ELSE 
        --- P_next <= 0;
            nx_state <= state0;
         END IF;

 END CASE;

 END PROCESS;
  Xport <= out_reg ;
end Behavioral;
IEEE库;
使用IEEE.STD_LOGIC_1164.ALL;
使用ieee.std_logic_arith.all;
使用ieee.std_logic_unsigned.all;
实体乘数是
泛型(N:整数=4);
港口(
时钟,复位:在标准逻辑中;
Aport:标准逻辑向量(31向下至0);
b端口:标准逻辑向量(31向下至0);
输出:输出标准逻辑向量(31到0)
);
末端倍增器;
乘法器的结构是
N_型数组是标准_逻辑_向量(31到0)的数组(0到N-1);
NfN类型是N_数组的数组(0到N-1);
类型状态为(state0,state1);
信号pr_状态,nx_状态:状态;
信号Ain_reg,Ain_next:NfN;
信号Bin_reg,Bin_next:N_数组;
信号mul1、mul2、mul3、mul4、sum1、sum2:N_阵列;
信号prod_reg,prod_next:N_阵列;
信号s_reg,s_next:整数范围0至20----用作计数器
信号P_reg,P_next:整数范围0至10----用作计数器
信号地址_reg,地址_next:整数范围0到10----用作计数器
信号输出\ reg,输出\ next:STD\ U逻辑\ U矢量(31向下至0);
---------------------------------------------------------------------------------------  
--N元素RAM的类型和信号声明
--以及NXN元件RAM的类型和信号
--每个元素的宽度为32位。
类型ram_t是标准逻辑向量(31到0)的数组(0到N);
类型ram_数组是标准_逻辑_向量(31到0)的数组(0到N*N);
信号ram_B:ram_t:=(其他=>(其他=>“0”);
信号ram_out:ram_t:=(其他=>(其他=>“0”);
信号ram_A:ram_数组:=(其他=>(其他=>'0');
--------------------------------------------------------------------------------------
----------组成部分------------------------------------------------------------------
--这是调整为与virtex6一起使用的浮点5组件
分量加法器
港口(
a:标准逻辑向量(31到0);
b:标准逻辑向量(31到0);
clk:标准逻辑中;
结果:输出标准逻辑向量(31到0);
端部元件;
------------------------------------------------------
多组分
港口(
a:标准逻辑向量(31到0);
b:标准逻辑向量(31到0);
clk:标准逻辑中;
结果:输出标准逻辑向量(31到0);
端部元件;
--------------------------------------------------------------------------------------
开始
--------------------------------------------------------------------------------------  
乘法:块
开始
M11:多端口映射(a=>Ain_reg(0)(0),b=>Bin_reg(0),clk=>clock,result=>mul1(0));
M12:多端口映射(a=>Ain_reg(0)(1),b=>Bin_reg(1),clk=>clock,result=>mul2(0));
M13:多端口映射(a=>Ain_reg(0)(2),b=>Bin_reg(2),clk=>clock,result=>mul3(0));
M14:多端口映射(a=>Ain_reg(0)(3),b=>Bin_reg(3),clk=>clock,result=>mul4(0));
S11:加法器端口映射(a=>mul1(0),b=>mul2(0),clk=>clock,result=>sum1(0));
S12:加法器端口映射(a=>mul3(0),b=>mul4(0),clk=>clock,result=>sum2(0));
PROD1:加法器端口映射(a=>sum1(0),b=>sum2(0),clk=>clock,result=>prod_next(0));
M21:多端口映射(a=>Ain_reg(1)(0),b=>Bin_reg(0),clk=>clock,result=>mul1(1));
M22:多端口映射(a=>Ain_reg(1)(1),b=>Bin_reg(1),clk=>clock,result=>mul2(1));
M23:多端口映射(a=>Ain_reg(1)(2),b=>Bin_reg(2),clk=>clock,result=>mul3(1));
M24:多端口映射(a=>Ain_reg(1)(3),b=>Bin_reg(3),clk=>clock,result=>mul4(1));
S21:加法器端口映射(a=>mul1(1),b=>mul2(1),clk=>clock,result=>sum1(1));
S22:加法器端口映射(a=>mul3(1),b=>mul4(1),clk=>clock,result=>sum2(1));
PROD2:加法器端口映射(a=>sum1(1),b=>sum2(1),clk=>clock,result=>prod_next(1));
M31:多端口映射(a=>Ain_reg(2)(0),b=>Bin_reg(0),clk=>clock,result=>mul1(2));
M32:多端口映射(a=>Ain_reg(2)(1),b=>Bin_reg(1),clk=>clock,result=>mul2(2));
M33:多端口映射(a=>Ain_reg(2)(2),b=>Bin_reg(2),clk=>clock,result=>mul3(2));
M34:多端口映射(a=>Ain_reg(2)(3),b=>Bin_reg(3),clk=>clock,result=>mul4(2));
S31:加法器端口映射(a=>mul1(2),b=>mul2(2),clk=>clock,result=>sum1(2));
S32:加法器端口映射(a=>mul3(2),b=>mul4(2),clk=>clock,result=>sum2(2));
PROD3:加法器端口映射(a=>sum1(2),b=>sum2(2),clk=>clock,result=>prod_next(2));
M41:多端口映射(a=>Ain_reg(3)(0),b=>Bin_reg(0),clk=>clock,result=>mul1(3));
M42:多端口映射(a=>Ain_reg(3)(1),b=>Bin_reg(1),clk=>clock,result=>mul2(3));
M43:多端口映射(a=>Ain_reg(3)(2),b=>Bin_reg(2),clk=>clock,result=>mul3(3));
M44:多端口映射(a=>Ain_reg(3)(3),b=>Bin_reg(3),clk=>clock,result=>mul4(3));
S41:加法器端口映射(a=>mul1(3),b=>mul2(3),clk=>clock,result=>sum1(3));
S42:加法器端口映射(a=>mul3(3),b=>mul4(3),clk=>clock,result=>sum2(3));
PROD4:加法器端口映射(a=>sum1(3),b=>sum2(3),clk=>clock,result=>prod_next(3));
端块乘法;
----------下段:---------------------------
过程(重置、时钟)
开始
如果(reset='1'),则

pr_state可能您没有启用IP核心的一些可选功能。但是,网络列表确实包含这些功能的端口。根据,您可以安全地忽略此类警告,因为未使用的元素将在映射阶段被删除。

请注意,应答记录21718用于警告:NgdBuild:440NgdBuild:440与FF原语(而非SFF原语)的警告相同。我忽略了警告并移动到模拟,但我得到了0输出。您是否可以再次检查是否正确连接所有端口?