IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VHDL Discussion :

Codage RC4 sur FPGA


Sujet :

VHDL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2013
    Messages : 12
    Points : 11
    Points
    11
    Par défaut Codage RC4 sur FPGA
    Bonjour.

    Quelqu'un peux m'aider à détecter les erreurs dans ce programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    LIBRARY ieee;
    USE ieee.std_logic_1164.all;
    USE ieee.numeric_std.all;
    --
    ENTITY RC4 IS
    GENERIC (d_width : natural := 8;
    a_width : natural := 8);
    PORT(clk : IN std_logic;
    data_en : IN std_logic;
    seed : IN std_logic_vector(63 DOWNTO 0) :=
    X"0369CF258BE147AD";
    data_out : OUT std_logic_vector(d_width-1 DOWNTO 0));
    END ENTITY RC4;
    --
    ARCHITECTURE Arch OF RC4 IS
    SUBTYPE byte IS natural RANGE 0 TO 2**d_width-1;
    TYPE ram IS ARRAY (natural RANGE <>) OF byte;
    SIGNAL x_s,y_s : byte;
    SIGNAL rst_1_s,rst_2_s : std_logic := '0';
    BEGIN
    rise : PROCESS(clk,data_en,seed,rst_1_s,rst_2_s)
    VARIABLE temp_1_v,temp_2_v,temp_3_v : byte;
    VARIABLE state_v : ram(0 TO 2**a_width-1);
    VARIABLE j_v,x_v,y_v : byte;
    VARIABLE seed_v : ram(0 TO 7);
    -- ATTRIBUTE logic_block : boolean;
    -- ATTRIBUTE logic_block OF state_v: VARIABLE IS true;
    BEGIN
    IF (rst_1_s = rst_2_s) THEN
    FOR i IN 7 DOWNTO 0 LOOP
    seed_v(i) := to_integer( unsigned( seed((i+1)*8-1 DOWNTO
    i*8) ) );
    END LOOP;
    FOR i IN 0 TO 2**a_width-1 LOOP
    state_v(i) := i;
    END LOOP;
    FOR i IN 0 TO 2**a_width-1 LOOP
    temp_1_v := seed_v(i mod 8);
    temp_2_v := state_v(i);
    j_v := (temp_1_v + temp_2_v + j_v) mod 2**a_width;
    temp_3_v := state_v(j_v);
    state_v(i) := temp_3_v;
    state_v(j_v) := temp_2_v;
    END LOOP;
    x_s <= 0;
    y_s <= 0;
    rst_1_s <= NOT(rst_2_s);
    data_out <= (OTHERS => '0');
    ELSIF rising_edge(clk) THEN
    IF (data_en = '1') THEN
    x_v := (x_s + 1) mod 2**a_width;
    y_v := (y_s + state_v(x_v)) mod 2**a_width;
    temp_1_v := state_v(x_v);
    temp_2_v := state_v(y_v);
    state_v(x_v) := temp_2_v;
    state_v(y_v) := temp_1_v;
    temp_3_v := state_v((temp_1_v + temp_2_v) mod 2**a_width);
    data_out <= std_logic_vector(to_unsigned(temp_3_v, d_width));
    x_s <= x_v;
    y_s <= y_v;
    END IF;
    END IF;
    END PROCESS rise;
    new_frame_reset : PROCESS(data_en,rst_1_s)
    BEGIN
    IF rising_edge(data_en) THEN
    rst_2_s <= rst_1_s;
    END IF;
    END PROCESS new_frame_reset;
    END ARCHITECTURE Arch;
    d'avance.

  2. #2
    Membre expérimenté

    Homme Profil pro
    Collégien
    Inscrit en
    Juillet 2010
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afghanistan

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Juillet 2010
    Messages : 545
    Points : 1 429
    Points
    1 429
    Par défaut
    Bonjour,

    -C'est illisible, peut être faudrait-t-il faire un effort sur l’indentation.
    -Le VHDL n'est pas un langage de programmation mais de description de circuit numérique. Tu ne peux pas juste traduire du code C en VHDL. il faut le repenser.
    -Première règle: ne rien mettre d'autre dans les la liste de sensibilité des process que le reset et l'horloge.
    - Ne pas déclarer comme signal d'autre type que std_logic et std_logic_vector, (oublie byte)

Discussions similaires

  1. Programme Core sur FPGA
    Par okitrinaw dans le forum VHDL
    Réponses: 1
    Dernier message: 23/05/2012, 16h15
  2. Réponses: 7
    Dernier message: 22/04/2012, 14h45
  3. Implémentation du MC-CDMA sur FPGA
    Par 3omayer dans le forum VHDL
    Réponses: 0
    Dernier message: 05/05/2010, 23h37
  4. Réponses: 2
    Dernier message: 31/01/2008, 15h31
  5. codage differentiel sur pgm
    Par BatuBou dans le forum Traitement d'images
    Réponses: 1
    Dernier message: 19/01/2008, 16h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo