Besoin d'aide par écrit FSM pour Ethernet.

A

atif.india

Guest
Salut,
Je vous écris un code pour assembler Ethernet où je dois d'abord lire la loc premier mémoire (32 bits) placer les données à 8 bits loc temp (changement toutes les deux cycles d'horloge), puis incrémente le pointeur de MEM et faire la même chose (ce fois, c'est seulement le poing 16 bits).J'ai utilisé contre mod pour la fin.Mon prog ressemble à ceci

assembleur module (données, STRT, du folklore, err2, CLK, RST, buf_data, buf_addr);
reg de sortie [07:00] données;
STRT entrée, CLK, la TVD;
reg sortie du folklore, err2;
entrée [31:0] buf_data;
sortie reg [08:00] buf_addr;
reg [31:0] cadre;

toujours @ (buf_data)
frame = buf_data;

reg [3:0] = MOD8 4'd0;
reg [02:00] Mod4 3'd0 =;

paramètre ralenti 3'd0 =;
= paramètre desadd 3'd1;
paramètre desadd2 3'd2 =;
= paramètre Sadd 3'd3;

reg [02:00] État;

toujours @ (posedge CLK)
commencer
if (TVD)
Etat = ralenti;
d'autre
affaire (d'Etat)
ralenti: if (START)
Etat = desadd;
d'autre
Etat = ralenti;

desadd:
if (MOD8 == 4'd8)
Etat = desadd2;
d'autre
commencer
Etat = desadd;
MOD8 = MOD8 4' D1;
fin

desadd2:if (Mod4 == 3'd4)Etat = Sadd;d'autrecommencerEtat = desadd2;Mod4 = Mod4 3 D1;fin

endcase
fin

toujours @ (Etat ou MOD8 ou Mod4 ou cadre)
commencer
affaire (d'Etat)
au repos:
commencer
data = 8'd0;
EOF = 1'd0;
err2 = 1'd0;
buf_addr = 9'd0;
fin
desadd:
commencer
cas (MOD8)
4'd0: data = [cadre 31:24];
4'd1: data = [cadre 31:24];
4'd2: data = [cadre 23:16];
4'd3: data = [cadre 23:16];
4'd4: data = [cadre 15:08];
4'd5: data = [cadre 15:08];
4'd6: data = [cadre 07:00];
4'd7: data = [cadre 07:00];
par défaut: data = 8'd0;
endcase
findesadd2:commencerbuf_addr = 9'd1;cas (Mod4)3'd0: data = [cadre 31:24];3'd1: data = [cadre 31:24];3'd2: data = [cadre 23:16];3'd3: data = [cadre 23:16];par défaut: data = 8'd0;endcasefin

endcase
fin
endmoduleQuand je commente sur l'état et l'utilisation que desadd2 desadd Je reçois la production proprement dite (les données sont prises à partir de tampon et est changé tous les deux cycles CLK), mais le moment je ajouter l'état suivant mon op disparaît complètement.Quel pourrait être le problème avec cette affaire.Un avertissement que je veux en venir, c'est qu'il ya problème avec déduire les verrous qui détient sa valeur perv dans un ou plusieurs trhu chemin toujours construire.

 
Voir le code ci-dessous!
déclaration de cas d'état = Sadd est manquant!Code:

assembleur module (données, STRT, du folklore, err2, CLK, RST, buf_data, buf_addr);

reg de sortie [07:00] données;

STRT entrée, CLK, la TVD;

reg sortie du folklore, err2;

entrée [31:0] buf_data;

reg de sortie [08:00] buf_addr;

fils [31:0] frame = buf_data;reg [3:0] MOD8;

reg [02:00] Mod4;paramètre ralenti 3'd0 =;

= paramètre desadd 3'd1;

paramètre desadd2 3'd2 =;

= paramètre Sadd 3'd3;reg [02:00] État;toujours @ (posedge CLK) commencent

if (TVD) commencent

<= État inactif;

MOD8 <= 4'd0;

Mod4 <= 3'd0;

end else

affaire (d'Etat)

au repos:

if (START)

<= Desadd État;

d'autre

<= État inactif;desadd:

if (MOD8 == 4'd8)

<= Desadd2 État;

d'autre commence

<= Desadd État;

MOD8 <= MOD8 4'd1;

findesadd2:

if (Mod4 == 3'd4)

<= Sadd État;

d'autre commence

<= Desadd2 État;

Mod4 <= Mod4 3'd1;

finSadd: begin / / ce qui manquefin

endcase / / cas (d'Etat)

fin / / @ toujours (posedge CLK)toujours @ (Etat ou MOD8 ou Mod4 ou cadre) commencent

affaire (d'Etat)

ralenti: commencer

data = 8'd0;

EOF = 1'd0;

err2 = 1'd0;

buf_addr = 9'd0;

findesadd: commencer

cas (MOD8)

4'd0: data = [cadre 31:24];

4'd1: data = [cadre 31:24];

4'd2: data = [cadre 23:16];

4'd3: data = [cadre 23:16];

4'd4: data = [cadre 15:08];

4'd5: data = [cadre 15:08];

4'd6: data = [cadre 07:00];

4'd7: data = [cadre 07:00];

par défaut: data = 8'd0;

endcase

findesadd2:

commencer

buf_addr = 9'd1;

cas (Mod4)

3'd0: data = [cadre 31:24];

3'd1: data = [cadre 31:24];

3'd2: data = [cadre 23:16];

3'd3: data = [cadre 23:16];

par défaut: data = 8'd0;

endcase

fin

endcase

fin / / @ toujours (Etat ou MOD8 ou Mod4 ou cadre)

endmodule
 
Même après avoir ajouté l'état Sadd Je reçois toujours 0 comme op d'abord, quand je me op je n'ai même pas eu desadd2 état (j'ai vraiment faire toute 802.3 ainsi jusqu'à plus de nombreux États sont laissés à longueur de trame, les données réelles) Ceci est mon nouveau code après l'ajout de Sadd

Code:

assembleur module (données, STRT, du folklore, err2, CLK, RST, buf_data, buf_addr);

reg de sortie [07:00] données;

STRT entrée, CLK, la TVD;

reg sortie du folklore, err2;

entrée [31:0] buf_data;

reg de sortie [08:00] buf_addr;

reg [31:0] cadre;toujours @ (buf_data)

frame = buf_data;reg [3:0] = MOD8 4'd0;

reg [02:00] Mod4 3'd0 =;paramètre ralenti 3'd0 =;

= paramètre desadd 3'd1;

paramètre desadd2 3'd2 =;

= paramètre Sadd 3'd3;reg [02:00] État;toujours @ (posedge CLK)

commencer

if (TVD)

Etat = ralenti;

d'autre

affaire (d'Etat)

ralenti: if (START)

Etat = desadd;

d'autre

Etat = ralenti;desadd:

if (MOD8 == 4'd8)

Etat = desadd2;

d'autre

commencer

Etat = desadd;

MOD8 = MOD8 4' D1;

fin

desadd2:

if (Mod4 == 3'd4)

Etat = Sadd;

d'autre

commencer

Etat = desadd2;

Mod4 = Mod4 3 D1;

fin

Sadd:

Etat = ralenti;

endcase

fintoujours @ (Etat ou MOD8 ou Mod4 ou cadre)

commencer

affaire (d'Etat)

au repos:

commencer

data = 8'd0;

EOF = 1'd0;

err2 = 1'd0;

buf_addr = 9'd0;

fin

desadd:

commencer

cas (MOD8)

4'd0: data = [cadre 31:24];

4'd1: data = [cadre 31:24];

4'd2: data = [cadre 23:16];

4'd3: data = [cadre 23:16];

4'd4: data = [cadre 15:08];

4'd5: data = [cadre 15:08];

4'd6: data = [cadre 07:00];

4'd7: data = [cadre 07:00];

par défaut: data = 8'd0;

endcase

findesadd2:

commencer

buf_addr = 9'd1;

cas (Mod4)

3'd0: data = [cadre 31:24];

3'd1: data = [cadre 31:24];

3'd2: data = [cadre 23:16];

3'd3: data = [cadre 23:16];

par défaut: data = 8'd0;

endcase

finSadd:;endcase

fin

endmodule

 

Welcome to EDABoard.com

Sponsor

Back
Top