bisogno di consigli e aiuto!

M

mat_jat

Guest
ciao!i, m novizio in questo forum e programmazione VHDL ...
quindi spero che qualcuno mi può aiutare a correggere la mia programmazione e
darmi qualche consiglio ..
Stavo cercando di fare una unità di controllo tra UART e core AES ...Faccio un po
'moddification del codice sorgente che ho scaricato da nuclei aperti ...
soffietto è la mia unità di controllo che provo a scrivere ma non so come controllare che ogni percorso di ricevere i dati che dovrebbero ricevere ... plz help me- Versione Beta

library IEEE;
uso IEEE.std_logic_1164.ali;
uso IEEE.std_logic_arith.all;
uso IEEE.std_logic_unsigned.all;entità final_aes128 è
port (
RxD: in std_logic;
TxD: out std_logic;
Reset: in std_logic;
Fatto: out std_logic;
CLK: in std_logic

);
fine final_aes128;final_aes128_arch architettura di final_aes128 è

- AES segnali
segnale AES_start, AES_outrdy, AES_mode, carico: std_logic;
AES_DataOut segnale: std_logic_vector (127 downto 0);
- Segnale counter_DataIn, counter_KeyIn: std_logic;

- ricevere e trasmettere il segnale
segnale UART_Outrdy, UART_Rx, UART_Tx, UART_Tdone, UART_TbufE: std_logic;

- AES segnale di input core
segnale AES_key: std_logic_vector (127 downto 0);
segnale AES_data: std_logic_vector (127 downto 0);

segnale UART_DataIn, UART_DataOut: std_logic_vector (7 downto 0);
En_Encryp segnale: std_logic;

- lo stato del segnale
stato del segnale: std_logic_vector (3 downto 0);
sub_state segnale: std_logic_vector (3 downto 0);componente clk_divider
port (
SysClk: in std_logic; - L'orologio del sistema
En_Encryp: out std_logic; - segnale di controllo
Reset: in std_logic - reset
);

clk_divider end component;componente miniUART
port (
DataRdy: out std_logic;
SysClk: in std_logic; - L'orologio del sistema
Reset: in std_logic; - ingresso Reset
- CS_N: in std_logic;
RD_N: in std_logic;
WR_N: in std_logic;
RxD: in std_logic; - assegnare i pin di W8
TxD: out std_logic; - assegnare i pin di D15
TBufE: buffer std_logic;
TDone: out std_logic;
DataIn: in std_logic_vector (7 downto 0); - ricevere l'output da AES core
DataOut: out std_logic_vector (7 downto 0 ));-- inviare dati a AES core
componente fine miniUART;componente aes128_fast
port (
clk: in std_logic;
reset: in std_logic;
Start: in std_logic; - di avviare il processo di cifratura / decifratura dopo il caricamento
Modalità: in std_logic; - per selezionare la cifratura o decifratura
carico: in std_logic; - per caricare l'ingresso e le chiavi.
principali: in std_logic_vector (127 downto 0);
data_in: in std_logic_vector (127 downto 0);
data_out: out std_logic_vector (127 downto 0);
Fatto: out std_logic);
aes128_fast end component;iniziare

U_clkdiv: clk_divider
port map (clk, En_Encryp, reset);

U_UART: miniUART
port map (UART_outrdy, clk, reset, UART_Rx, UART_Tx, RxD, TxD,
UART_TBufE, UART_TDone, UART_DataIn, UART_DataOut);

U_AES: aes128_fast
port map (En_Encryp, reset, AES_start, AES_mode, carico, AES_key,
AES_data, AES_DataOut, AES_Outrdy);FSM: process (clk, reset, UART_DataIn, UART_DataOut, UART_Outrdy,
UART_TbufE, UART_TDone,
Stato, sub_state, AES_key, AES_Data, AES_Outrdy,
AES_DataOut)

- Le variabili messaggio di stato, con "#" come end-of-line carattere.

iniziare

Se il reset = '1 'then
state <= X "0"; - Stato
sub_state <= X "0"; - sottostato

UART_Tx <= '1 '; - il trasferimento dei dati bl = '0'
UART_Rx <= '1 '; - dati TRM bl = '0'
UART_DataIn <= (others => '0');-- chiaro i dati di input UART
AES_data <= (others => '0 ');
AES_key <= (others => '0 ');
AES_start <= '0 '; - avviare un processo cifrare / decifrare
AES_mode <= '0 '; - encrypt modalità segnale / decifrare
done <= '0 '; - da un'entità superiore
Carico <= '0 '; - chiave di carico e dati

elsif clk'event e clk = '1 'then
AES_Start <= '0 '; - encrypt start disattivare / decifrare
UART_Tx <= '1 '; - disabilitare la trasmissione del segnale
UART_Rx <= '1 '; - disattivare il segnale ricevuto

caso è stato
- Stato di standby, attendere po 'Start
quando X "0" => - quando lo stato 0
UART_Rx <= '0 '; - enable leggere
se UART_Outrdy = '1 'allora - i dati pronto a leggere
se UART_DataOut X = "31", quindi - start byte = 1 in Hex
state <= Stato 1;
done <= '0 ';
elsif UART_DataOut = X "30", quindi - stato della richiesta
state <= X "0"; - Stato <= "1101"
done <= '0 ';

end if;
end if;

quando X "1" => - quando lo stato 1
se UART_TBufE = '1 'then - buffer di controllo vuoto
UART_DataIn <= X "31";
UART_Tx <= '0 '; - consentire la trasmissione dei dati
state <= Stato 1;

end if;

- Ricevere PlainText
quando X "2" =>
UART_Rx <= '0 '; - enable ricevere
Carico <= '1 '; - caricamento dei dati
if (UART_Outrdy = '1 '), poi - pronto a leggere
sub_state caso è

quando X "0" => - sub_state
AES_data (127 downto 120) <= UART_DataOut;
state <= Stato 1;
sub_state <sub_state = 1;
quando X "1" =>
AES_data (119 downto 112) <= UART_DataOut;
state <= Stato 1;
sub_state <sub_state = 1;
quando X "2" =>
AES_data (111 downto 104) <= UART_DataOut;
state <= Stato 1;
sub_state <sub_state = 1;
quando X "3" =>
AES_data (103 downto 96) <= UART_DataOut;
state <= Stato 1;
sub_state <sub_state = 1;
quando X "4" =>
AES_data (95 downto 8

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Fresco" border="0" />

<= UART_DataOut;
state <= Stato 1;
sub_state <sub_state = 1;
quando X "5" =>
AES_data (87 downto 80) <= UART_DataOut;
state <= Stato 1;
sub_state <sub_state = 1;
quando X "6" =>
AES_data (79 downto 72) <= UART_DataOut;
state <= Stato 1;
sub_state <sub_state = 1;
quando X "7" =>
AES_data (71 downto 64) <= UART_DataOut;
state <= Stato 1;
sub_state <sub_state = 1;
quando X "8" =>
AES_data (63 downto 56) <= UART_DataOut;
state <= Stato 1;
sub_state <sub_state = 1;
quando X "9" =>
AES_data (55 downto 4

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Fresco" border="0" />

<= UART_DataOut;
state <= Stato 1;
sub_state <sub_state = 1;
quando X "A" =>
AES_data (47 downto 40) <= UART_DataOut;
state <= Stato 1;
sub_state <sub_state = 1;
quando X "B" =>
AES_data (39 downto 32) <= UART_DataOut;
state <= Stato 1;
sub_state <sub_state = 1;
quando X "C" =>
AES_data (31 downto 24) <= UART_DataOut;
state <= Stato 1;
sub_state <sub_state = 1;
quando X "D" =>
AES_data (23 downto 16) <= UART_DataOut;
state <= Stato 1;
sub_state <sub_state = 1;
quando X "E" =>
AES_data (15 downto

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Fresco" border="0" />

<= UART_DataOut;
state <= Stato 1;
sub_state <sub_state = 1;
quando X "F" =>
AES_data (7 downto 0) <= UART_DataOut;
state <= X "4"; - andare allo stato 4
sub_state <= X "0";

end case;
end if;
- ottenere il byte successivo dei dati
quando X "3" =>
se UART_TBufE = '1 'then - se buffer trnsmit vuoto
UART_Tx <= '0 '; - consentire la trasmissione
UART_DataIn <= UART_DataOut;
state <= X "2";
end if;

quando X "4" =>
se UART_TBufE = '1 'then
UART_Tx <= '0 ';
UART_DataIn <= UART_DataOut;
state <= Stato 1;
end if;

- Ricevi Crittografare o decrittografare codice selezionare
quando X "5" =>
UART_Rx <= '0 ';
se UART_Outrdy = '1 'then
se UART_Dataout X = "31", quindi
AES_mode <= '1 '; - encrypt
elsif UART_Dataout X = "32", quindi
AES_mode <= '0 '; - decrypt

end if;
state <= Stato 1;
end if;

quando X "6" => - la modalità di trasmissione AES
se UART_TBufE = '1 'then
UART_Tx <= '0 ';
UART_DataIn <= UART_DataOut;
state <= Stato 1;

end if;

- Ricevere Cipher Key
quando X "7" =>
UART_Rx <= '0 ';
Carico <= '1 ';
if (UART_Outrdy = '1 ') then

sub_state caso è

quando X "0" => - sub_state
AES_key (127 downto 120) <= UART_DataOut;
state <= Stato 1;
sub_state <sub_state = 1;
quando X "1" =>
AES_key (119 downto 112) <= UART_DataOut;
state <= Stato 1;
sub_state <sub_state = 1;
quando X "2" =>
AES_key (111 downto 104) <= UART_DataOut;
state <= Stato 1;
sub_state <sub_state = 1;
quando X "3" =>
AES_key (103 downto 96) <= UART_DataOut;
state <= Stato 1;
sub_state <sub_state = 1;
quando X "4" =>
AES_key (95 downto 8

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Fresco" border="0" />

<= UART_DataOut;
state <= Stato 1;
sub_state <sub_state = 1;
quando X "5" =>
AES_key (87 downto 80) <= UART_DataOut;
state <= Stato 1;
sub_state <sub_state = 1;
quando X "6" =>
AES_key (79 downto 72) <= UART_DataOut;
state <= Stato 1;
sub_state <sub_state = 1;
quando X "7" =>
AES_key (71 downto 64) <= UART_DataOut;
state <= Stato 1;
sub_state <sub_state = 1;
quando X "8" =>
AES_key (63 downto 56) <= UART_DataOut;
state <= Stato 1;
sub_state <sub_state = 1;
quando X "9" =>
AES_key (55 downto 4

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Fresco" border="0" />

<= UART_DataOut;
state <= Stato 1;
sub_state <sub_state = 1;
quando X "A" =>
AES_key (47 downto 40) <= UART_DataOut;
state <= Stato 1;
sub_state <sub_state = 1;
quando X "B" =>
AES_key (39 downto 32) <= UART_DataOut;
state <= Stato 1;
sub_state <sub_state = 1;
quando X "C" =>
AES_key (31 downto 24) <= UART_DataOut;
state <= Stato 1;
sub_state <sub_state = 1;
quando X "D" =>
AES_key (23 downto 16) <= UART_DataOut;
state <= Stato 1;
sub_state <sub_state = 1;
quando X "E" =>
AES_key (15 downto

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Fresco" border="0" />

<= UART_DataOut;
state <= Stato 1;
sub_state <sub_state = 1;
quando X "F" =>
AES_key (7 downto 0) <= UART_DataOut;
state <= X "9"; - andare allo stato 9
sub_state <= X "0";
end case;

end if;

- ottenere il byte successivo della chiave
quando X "8" =>
se UART_TBufE = '1 'then
UART_Tx <= '0 ';
UART_DataIn <= UART_DataOut;
state <= X "7";
end if;

quando X "9" => - Stato 9
se UART_TBufE = '1 'then - trasmettere Kosong buffer
UART_Tx <= '0 '; - consentire la trasmissione
UART_DataIn <= UART_DataOut;
AES_start <= '1 '; - avviare una codifica / decodifica
state <= Stato 1;
end if;

- Cipher fatto, trasmettere fuori testo cifrato
quando X "A" => - Stato 10

if (UART_TBufE = '1 'e AES_Outrdy = '1'), poi - aes_outready
UART_Tx <= '0 ';
sub_state caso è
quando X "0" =>
UART_DataIn <= AES_DataOut (127 downto 120);
sub_state <sub_state = 1;
state <= Stato 1;
quando X "1" =>
UART_DataIn <= AES_DataOut (119 downto 112);
sub_state <sub_state = 1;
state <= Stato 1;
quando X "2" =>
UART_DataIn <= AES_DataOut (111 downto 104);
sub_state <sub_state = 1;
state <= Stato 1;
quando X "3" =>
UART_DataIn <= AES_DataOut (103 downto 96);
sub_state <sub_state = 1;
state <= Stato 1;
quando X "4" =>
UART_DataIn <= AES_DataOut (95 downto 8

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Fresco" border="0" />

;
sub_state <sub_state = 1;
state <= Stato 1;
quando X "5" =>
UART_DataIn <= AES_DataOut (87 downto 80);
sub_state <sub_state = 1;
state <= Stato 1;
quando X "6" =>
UART_DataIn <= AES_DataOut (79 downto 72);
sub_state <sub_state = 1;
state <= Stato 1;
quando X "7" =>
UART_DataIn <= AES_DataOut (71 downto 64);
sub_state <sub_state = 1;
state <= Stato 1;
quando X "8" =>
UART_DataIn <= AES_DataOut (63 downto 56);
sub_state <sub_state = 1;
state <= Stato 1;
quando X "9" =>
UART_DataIn <= AES_DataOut (55 downto 4

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Fresco" border="0" />

;
sub_state <sub_state = 1;
state <= Stato 1;
quando X "A" =>
UART_DataIn <= AES_DataOut (47 downto 40);
sub_state <sub_state = 1;
state <= Stato 1;
quando X "B" =>
UART_DataIn <= AES_DataOut (39 downto 32);
sub_state <sub_state = 1;
state <= Stato 1;
quando X "C" =>
UART_DataIn <= AES_DataOut (31 downto 24);
sub_state <sub_state = 1;
state <= Stato 1;
quando X "D" =>
UART_DataIn <= AES_DataOut (23 downto 16);
sub_state <sub_state = 1;
state <= Stato 1;
quando X "E" =>
UART_DataIn <= AES_DataOut (15 downto

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Fresco" border="0" />

;
sub_state <sub_state = 1;
state <= Stato 1;
quando X "F" =>
UART_DataIn <= AES_DataOut (7 downto 0);
state <= X "C";
sub_state <= X "0";

end case;

end if;

quando X "B" => - state11
se UART_TbufE = '0 'allora - non trasmettere pronto
state <= X "A"; - ripetere la trasmissione
end if;

quando X "C" => --
state <= X "0"; - ripeto
done <= '1 '; - completa trasmissionewhen others => null;
end case;
end if;
FSM fine processo;fine final_aes128_arch;

questo è il mio programma di entità superiore ...

 
prima di tutto si deve fare identination al codice.

secondo tutte le hai solo bisogno di mettere clk, reset nella lista sensibilità del FSM.

 
Grazie per la risposta!
così vuol dire che ho bisogno di mettere clk e ripristinare solo in uno stato FSM, che sia sensibile di esso ... cercherò ...

 

Welcome to EDABoard.com

Sponsor

Back
Top