-1

これは、Xilinx 9.2 ise で VHDL で記述されたコードです。NK = 4 NR = 10; 値=43; K_IN は、次の形式のユーザーからのキーです。

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);

subword は、32 ビット入力の Sbox 値を返すコンポーネントです。

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;

出力エラー:

エラー:Xst:528 - 信号 <K_OUT<10><31>> のユニット <KEY_MODULE> のマルチソース エラー:Xst:528 - 信号 <K_OUT<10><30>> のユニット <KEY_MODULE> のマルチソースエラー:Xst:528 - 信号 <K_OUT<10><29>>
のユニット <KEY_MODULE> のマルチソース エラー:Xst:528 - 信号 <K_OUT<10><28>> のユニット <KEY_MODULE> のマルチソースエラー:Xst:528 - 信号 <K_OUT<10><27>> のユニット <KEY_MODULE> のマルチソース エラー:Xst:528 - 信号 <K_OUT<10><26>> のユニット <KEY_MODULE> のマルチソース
エラー:Xst:528 - 信号 <K_OUT<10><25>> のユニット <KEY_MODULE> のマルチソース エラー:Xst:528 - 信号 <K_OUT<10><24>> のユニット <KEY_MODULE> のマルチソースエラー:Xst:528 - 信号 <K_IN<3><1><7>> のユニット <KEY_MODULE> のマルチソース
エラー:Xst:528 - 信号 <K_IN<3><1><6>> のユニット <KEY_MODULE> のマルチソース エラー:Xst:528 - 信号 <K_IN<3>< のユニット <KEY_MODULE> のマルチソース1><5>> エラー:Xst:528 - 信号 <K_IN<3><1><4>>
のユニット <KEY_MODULE> のマルチソース エラー:Xst:528 - 信号のユニット <KEY_MODULE> のマルチソース<K_IN<3><1><3>> エラー:Xst:528 - 信号 <K_IN<3><1><2>> のユニット <KEY_MODULE> のマルチソース エラー:Xst:528 - マルチソース イン信号 <K_IN<3><1><1>>
のユニット <KEY_MODULE> ERROR:Xst:528 - 信号 <K_IN<3><1><0>> のユニット <KEY_MODULE> のマルチソース エラー:Xst: 528 - ユニット内のマルチソース <KEY_MODULE>信号 <K_IN<3><2><7>> でエラー:Xst:528 - 信号 <K_IN<3><2><6>> でユニット <KEY_MODULE> のマルチソース
エラー:Xst:528 - 信号 <K_IN<3><2><5>> のユニット <KEY_MODULE> のマルチソース エラー:Xst:528 - 信号 <K_IN<3>< のユニット <KEY_MODULE> のマルチソース2><4>> エラー:Xst:528 - 信号 <K_IN<3><2><3>>
のユニット <KEY_MODULE> のマルチソース エラー:Xst:528 - 信号のユニット <KEY_MODULE> のマルチソース<K_IN<3><2><2>> エラー:Xst:528 - 信号 <K_IN<3><2><1>> のユニット <KEY_MODULE> のマルチソース エラー:Xst:528 - マルチソース イン信号 <K_IN<3><2><0>>
のユニット <KEY_MODULE> ERROR:Xst:528 - 信号 <K_IN<3><3><7>> のユニット <KEY_MODULE> のマルチソース エラー:Xst: 528 - ユニット内のマルチソース <KEY_MODULE>信号 <K_IN<3><3><6>> でエラー:Xst:528 - 信号 <K_IN<3><3><5>> でユニット <KEY_MODULE> のマルチソース
エラー:Xst:528 - 信号 <K_IN<3><3><4>> のユニット <KEY_MODULE> のマルチソース エラー:Xst:528 - 信号 <K_IN<3>< のユニット <KEY_MODULE> のマルチソース3><3>> エラー:Xst:528 - 信号 <K_IN<3><3><2>>
のユニット <KEY_MODULE> のマルチソース エラー:Xst:528 - 信号のユニット <KEY_MODULE> のマルチソース<K_IN<3><3><1>> エラー:Xst:528 - 信号 <K_IN<3><3><0>> のユニット <KEY_MODULE> のマルチソース

4

1 に答える 1

0

1 つのプロセスで TEMP_WORD (K_OUT) へのすべての割り当てをカプセル化するか、ブロックを生成します (例: Gmain の下の G1 と G2)。インデックスが重複していないように見えても、コンパイラはそれを受け入れない場合があります。

編集 :

コードをより詳しく読むと、問題は TEMP_WORD -> K_OUT に割り当てられる TEMP 信号の複数の割り当てに起因します

さらに、TEMP <= TEMP_WORD(J-1); があります。TEMP_WORD(J) <= TEMP_WORD(J-NK) XOR TEMP; G2: の最初と最後で、組み合わせループを作成します。

于 2015-02-06T10:12:32.420 に答える