2015-02-06 45 views
-2

这是在Xilinx 9.2 ise上用VHDL编写的代码。 NK = 4 NR = 10; VALUE = 43; K_IN是从用户在赛灵思AES上的密钥扩展模块:错误:信号上的多重接口

type STATEX is array(0 to 3, 0 to 3) of std_logic_vector (7 downto 0); 

K_OUT形式的关键是

type KEYWORD is array (0 to 43) of std_logic_vector (31 downto 0); 

子字的输出是返回32位输入的S盒值的成分。

我不知道在K_IN和K_OUT多信号源发生在哪里。请帮我弄清楚并解决这个问题。谢谢。

LIBRARY IEEE; 
USE IEEE.STD_LOGIC_1164.ALL; 
USE IEEE.STD_LOGIC_ARITH.ALL; 
USE IEEE.STD_LOGIC_UNSIGNED.ALL; 
USE WORK.STATEVARIABLE.ALL; 

ENTITY KEY_MODULE IS 
    PORT ( 
     SYS_CLK: IN STD_LOGIC; 
     RST:  IN STD_LOGIC; 
     S:   IN STD_LOGIC; 
     K_IN:  IN STATEX; ---- FOR 128 BITS KEY 
     K_OUT:  OUT KEYWORD 
    ); 

END KEY_MODULE; 

ARCHITECTURE BEHAVIORAL OF KEY_MODULE IS 
    SIGNAL SWORD_OUT: STD_LOGIC_VECTOR(31 DOWNTO 0); 
    SIGNAL TEMP:  STD_LOGIC_VECTOR(31 DOWNTO 0); 
    SIGNAL TEMP_WORD: KEYWORD; 

    COMPONENT SUBWORD 
     PORT (
      SYS_CLK: IN STD_LOGIC; 
      RST:  IN STD_LOGIC; 
      S:   IN STD_LOGIC; 
      WORD:  IN STD_LOGIC_VECTOR(31 DOWNTO 0); 
      SWORD:  OUT STD_LOGIC_VECTOR(31 DOWNTO 0) 
     ); 
    END COMPONENT; 

    FUNCTION ROTWORD (A: STD_LOGIC_VECTOR(31 DOWNTO 0)) 
      RETURN STD_LOGIC_VECTOR IS 
     VARIABLE OUTPUT: STD_LOGIC_VECTOR(31 DOWNTO 0); 
    BEGIN 
     OUTPUT := A(23 DOWNTO 16) & A(15 DOWNTO 8) & A(7 DOWNTO 0)& 
        A(31 DOWNTO 24); 
     RETURN OUTPUT; 
    END FUNCTION; 

    FUNCTION RCON (I: INTEGER) RETURN STD_LOGIC_VECTOR IS 
     VARIABLE OUTPUT: STD_LOGIC_VECTOR(31 DOWNTO 0); 
     VARIABLE TEMP1: STD_LOGIC_VECTOR(7 DOWNTO 0); 
     VARIABLE NUM: INTEGER; 
    BEGIN 
     NUM := 2**(I-1) REM 229 ; 
     TEMP1 := CONV_STD_LOGIC_VECTOR(NUM,8); 
     OUTPUT := TEMP1 & X"000000" ; 
     RETURN OUTPUT; 
    END FUNCTION; 

BEGIN 

G1: FOR J IN 0 TO NK-1 GENERATE 
     TEMP_WORD(J) <= K_IN(0,J) & K_IN(1,J) & K_IN(2,J) & K_IN(3,J); 
    END GENERATE G1; 

G2: FOR J IN NK TO VALUE GENERATE 
     TEMP <= TEMP_WORD(J-1); 
G3:  IF J MOD NK = 0 GENERATE 
UUT1 :  SUBWORD 
       PORT MAP (
        SYS_CLK => SYS_CLK, 
        RST => RST, 
        S => S, 
        WORD => ROTWORD(TEMP), 
        SWORD => SWORD_OUT 
       ); 
      TEMP <= SWORD_OUT XOR RCON(J/NK); 
     END GENERATE G3; 

G4:  IF (NK > 6 AND (J MOD NK) = 4) GENERATE 
UUT2 :  SUBWORD 
       PORT MAP (
        SYS_CLK => SYS_CLK, 
        RST => RST, 
        S => S, 
        WORD => TEMP, 
        SWORD => SWORD_OUT 
       ); 
      TEMP <= SWORD_OUT; 
     END GENERATE G4; 
     TEMP_WORD(J) <= TEMP_WORD(J-NK) XOR TEMP; 
    END GENERATE G2; 

    K_OUT <= TEMP_WORD; 

END BEHAVIORAL; 

输出错误:

ERROR:Xst:528 - Multi-source in Unit <KEY_MODULE> on signal <K_OUT<10><31>> ERROR:Xst:528 - Multi-source in Unit <KEY_MODULE> on signal <K_OUT<10><30>> ERROR:Xst:528 - Multi-source in Unit <KEY_MODULE> on signal <K_OUT<10><29>>
ERROR:Xst:528 - Multi-source in Unit <KEY_MODULE> on signal <K_OUT<10><28>> ERROR:Xst:528 - Multi-source in Unit <KEY_MODULE> on signal <K_OUT<10><27>> ERROR:Xst:528 - Multi-source in Unit <KEY_MODULE> on signal <K_OUT<10><26>>
ERROR:Xst:528 - Multi-source in Unit <KEY_MODULE> on signal <K_OUT<10><25>> ERROR:Xst:528 - Multi-source in Unit <KEY_MODULE> on signal <K_OUT<10><24>> ERROR:Xst:528 - Multi-source in Unit <KEY_MODULE> on signal <K_IN<3><1><7>>
ERROR:Xst:528 - Multi-source in Unit <KEY_MODULE> on signal <K_IN<3><1><6>> ERROR:Xst:528 - Multi-source in Unit <KEY_MODULE> on signal <K_IN<3><1><5>> ERROR:Xst:528 - Multi-source in Unit <KEY_MODULE> on signal <K_IN<3><1><4>>
ERROR:Xst:528 - Multi-source in Unit <KEY_MODULE> on signal <K_IN<3><1><3>> ERROR:Xst:528 - Multi-source in Unit <KEY_MODULE> on signal <K_IN<3><1><2>> ERROR:Xst:528 - Multi-source in Unit <KEY_MODULE> on signal <K_IN<3><1><1>>
ERROR:Xst:528 - Multi-source in Unit <KEY_MODULE> on signal <K_IN<3><1><0>> ERROR:Xst:528 - Multi-source in Unit <KEY_MODULE> on signal <K_IN<3><2><7>> ERROR:Xst:528 - Multi-source in Unit <KEY_MODULE> on signal <K_IN<3><2><6>>
ERROR:Xst:528 - Multi-source in Unit <KEY_MODULE> on signal <K_IN<3><2><5>> ERROR:Xst:528 - Multi-source in Unit <KEY_MODULE> on signal <K_IN<3><2><4>> ERROR:Xst:528 - Multi-source in Unit <KEY_MODULE> on signal <K_IN<3><2><3>>
ERROR:Xst:528 - Multi-source in Unit <KEY_MODULE> on signal <K_IN<3><2><2>> ERROR:Xst:528 - Multi-source in Unit <KEY_MODULE> on signal <K_IN<3><2><1>> ERROR:Xst:528 - Multi-source in Unit <KEY_MODULE> on signal <K_IN<3><2><0>>
ERROR:Xst:528 - Multi-source in Unit <KEY_MODULE> on signal <K_IN<3><3><7>> ERROR:Xst:528 - Multi-source in Unit <KEY_MODULE> on signal <K_IN<3><3><6>> ERROR:Xst:528 - Multi-source in Unit <KEY_MODULE> on signal <K_IN<3><3><5>>
ERROR:Xst:528 - Multi-source in Unit <KEY_MODULE> on signal <K_IN<3><3><4>> ERROR:Xst:528 - Multi-source in Unit <KEY_MODULE> on signal <K_IN<3><3><3>> ERROR:Xst:528 - Multi-source in Unit <KEY_MODULE> on signal <K_IN<3><3><2>>
ERROR:Xst:528 - Multi-source in Unit <KEY_MODULE> on signal <K_IN<3><3><1>> ERROR:Xst:528 - Multi-source in Unit <KEY_MODULE> on signal <K_IN<3><3><0>>

+1

您的代码不是[最小,完整且可验证的示例](https://stackoverflow.com/help/mcve)缺少实体SUBWORD的声明,类型STATEX和KEYWORD或表观常数与基本类型的整数VALUE 。此外,本地没有KEY_IN的驱动程序,这意味着与其相关的错误在您所显示的代码的外部(驱动模式IN的端口是非法的)。 Ril_Dark解决TEMP_WORD的多个驱动程序问题。 – user1155120 2017-09-15 23:57:00

+0

@ user1155120虽然你有一个观点,但我不认为这个两年半的问题仍然存在...... – JHBonarius 2017-09-16 07:40:12

+0

今天有一个投票结束。 – user1155120 2017-09-16 07:51:38

回答

0

我会尝试所有的幽会封装到TEMP_WORD(这是K_OUT)下的一个过程或产生块(例如:戈麦恩下,G1和G2)。尽管索引似乎没有重叠,编译器可能仍然不会接受。

编辑:

更紧密地阅读你的代码,你的问题来自于TEMP信号的多个幽会,然后将其分配给TEMP_WORD - > K_OUT

Moreever,你有 TEMP < = TEMP_WORD(J-1);和TEMP_WORD(J)< = TEMP_WORD(J-NK)XOR TEMP;在G2的开始和结束:它创建了一个组合循环。

+0

我们无法调用组件。为此我们必须使用generate stmnt。并把它更高的Gmain它给我错误的K_OUT 31到0。 – 2015-02-06 10:58:22