Помощ необходимо писмено ФЩМ за Ethernet.

A

atif.india

Guest
Здрасти,
Пиша код за Ethernet събира, когато аз трябва първо да прочетете първия Loc на паметта (32 бита) място на данни в 8 Loc малко Temp (промяна на всеки два часа след цикъла) това нарастване на кор показалеца и направи същото (това време е само на юмрук 16 бита).Използвал съм моден брояч за тази цел.Моят прог изглежда така

модул асемблер (данни, Strt, EØF, Err2, CLK, RST, buf_data, buf_addr);
продукция обл [7:0] данни;
вход Strt, CLK, RST;
обл EOF продукция, Err2;
вход [31:0] buf_data;
продукция обл [8:0] buf_addr;
обл [31:0] рамка;

Винаги @ (buf_data)
рамка = buf_data;

обл [3:0] mod8 = 4'd0;
обл [2:0] mod4 = 3'd0;

параметър празен = 3'd0;
параметър desadd = 3'd1;
параметър desadd2 = 3'd2;
параметър Sadd = 3'd3;

обл [2:0]-членка;

Винаги @ (posedge CLK)
започвам
IF (RST)
състояние = празен;
в противен случай
случай (държава)
празен: ако (Strt)
състояние = desadd;
в противен случай
състояние = празен;

desadd:
IF (mod8 == 4'd8)
състояние = desadd2;
в противен случай
започвам
състояние = desadd;
mod8 = mod8 4' d1;
приключвам

desadd2:IF (mod4 == 3'd4)състояние = Sadd;в противен случайзапочвамсъстояние = desadd2;mod4 = mod4 3 d1;приключвам

endcase
приключвам

Винаги @ (държавна или mod8 или mod4 или рамка)
започвам
случай (държава)
Idle:
започвам
данни = 8'd0;
EOF = 1'd0;
Err2 = 1'd0;
buf_addr = 9'd0;
приключвам
desadd:
започвам
случай (mod8)
4'd0: данни = рамка [31:24];
4'd1: данни = рамка [31:24];
4'd2: данни = рамка [23:16];
4'd3: данни = рамка [23:16];
4'd4: данни = рамка [15:8];
4'd5: данни = рамка [15:8];
4'd6: данни = рамка [7:0];
4'd7: данни = рамка [7:0];
по подразбиране: данни = 8'd0;
endcase
приключвамdesadd2:започвамbuf_addr = 9'd1;случай (mod4)3'd0: данни = рамка [31:24];3'd1: данни = рамка [31:24];3'd2: данни = рамка [23:16];3'd3: данни = рамка [23:16];по подразбиране: данни = 8'd0;endcaseприключвам

endcase
приключвам
endmoduleКога аз коментар на държавната desadd2 и да използват само desadd аз съм се правилното продукция (данните са взети в от буфер и се променя на всеки две CLK цикъла), но в момента добавя следващото състояние ми оп напълно изчезва.Какви може да са проблемите с този случай.Едно предупреждение, че аз съм се е там е проблемът с inferring ключалки, която държи Perv стойност на един или повече Дата пътя винаги изграждане.

 
Вижте кода по-долу!
Дело отчет за състоянието = Sadd липсва!Код:

модул асемблер (данни, Strt, EØF, Err2, CLK, RST, buf_data, buf_addr);

продукция обл [7:0] данни;

вход Strt, CLK, RST;

обл EOF продукция, Err2;

вход [31:0] buf_data;

продукция обл [8:0] buf_addr;

тел [31:0] = buf_data рамка;обл [3:0] mod8;

обл [2:0] mod4;параметър празен = 3'd0;

параметър desadd = 3'd1;

параметър desadd2 = 3'd2;

параметър Sadd = 3'd3;обл [2:0]-членка;Винаги @ (posedge CLK) започва

IF (RST) започва

държавни <= празен;

mod8 <= 4'd0;

mod4 <= 3'd0;

края друго

случай (държава)

Idle:

IF (Strt)

държавни <= desadd;

в противен случай

държавни <= празен;desadd:

IF (mod8 == 4'd8)

държавни <= desadd2;

иначе започва

държавни <= desadd;

mod8 <= mod8 4'd1;

приключвамdesadd2:

IF (mod4 == 3'd4)

държавни <= Sadd;

иначе започва

държавни <= desadd2;

mod4 <= mod4 3'd1;

приключвамSadd: започва / / това липсваприключвам

endcase / / Case (щат)

край / / винаги @ (posedge CLK)Винаги @ (държавна или mod8 или mod4 или рамка) започва

случай (държава)

Idle: започва

данни = 8'd0;

EOF = 1'd0;

Err2 = 1'd0;

buf_addr = 9'd0;

приключвамdesadd: започва

случай (mod8)

4'd0: данни = рамка [31:24];

4'd1: данни = рамка [31:24];

4'd2: данни = рамка [23:16];

4'd3: данни = рамка [23:16];

4'd4: данни = рамка [15:8];

4'd5: данни = рамка [15:8];

4'd6: данни = рамка [7:0];

4'd7: данни = рамка [7:0];

по подразбиране: данни = 8'd0;

endcase

приключвамdesadd2:

започвам

buf_addr = 9'd1;

случай (mod4)

3'd0: данни = рамка [31:24];

3'd1: данни = рамка [31:24];

3'd2: данни = рамка [23:16];

3'd3: данни = рамка [23:16];

по подразбиране: данни = 8'd0;

endcase

приключвам

endcase

край / / винаги @ (държавна или mod8 или mod4 или рамка)

endmodule
 
Дори и след добавянето на Sadd състояние съм аз все още се оп 0 като първоначално когато бях получаване оп аз дори не е desadd2 състояние (и действително трябва да направи целия 802,3 рамка, така до много по-членки са оставени за рамка дължина, действителните данни) Това е моят нов код, след добавяне на Sadd

Код:

модул асемблер (данни, Strt, EØF, Err2, CLK, RST, buf_data, buf_addr);

продукция обл [7:0] данни;

вход Strt, CLK, RST;

обл EOF продукция, Err2;

вход [31:0] buf_data;

продукция обл [8:0] buf_addr;

обл [31:0] рамка;Винаги @ (buf_data)

рамка = buf_data;обл [3:0] mod8 = 4'd0;

обл [2:0] mod4 = 3'd0;параметър празен = 3'd0;

параметър desadd = 3'd1;

параметър desadd2 = 3'd2;

параметър Sadd = 3'd3;обл [2:0]-членка;Винаги @ (posedge CLK)

започвам

IF (RST)

състояние = празен;

в противен случай

случай (държава)

празен: ако (Strt)

състояние = desadd;

в противен случай

състояние = празен;desadd:

IF (mod8 == 4'd8)

състояние = desadd2;

в противен случай

започвам

състояние = desadd;

mod8 = mod8 4' d1;

приключвам

desadd2:

IF (mod4 == 3'd4)

състояние = Sadd;

в противен случай

започвам

състояние = desadd2;

mod4 = mod4 3 d1;

приключвам

Sadd:

състояние = празен;

endcase

приключвамВинаги @ (държавна или mod8 или mod4 или рамка)

започвам

случай (държава)

Idle:

започвам

данни = 8'd0;

EOF = 1'd0;

Err2 = 1'd0;

buf_addr = 9'd0;

приключвам

desadd:

започвам

случай (mod8)

4'd0: данни = рамка [31:24];

4'd1: данни = рамка [31:24];

4'd2: данни = рамка [23:16];

4'd3: данни = рамка [23:16];

4'd4: данни = рамка [15:8];

4'd5: данни = рамка [15:8];

4'd6: данни = рамка [7:0];

4'd7: данни = рамка [7:0];

по подразбиране: данни = 8'd0;

endcase

приключвамdesadd2:

започвам

buf_addr = 9'd1;

случай (mod4)

3'd0: данни = рамка [31:24];

3'd1: данни = рамка [31:24];

3'd2: данни = рамка [23:16];

3'd3: данни = рамка [23:16];

по подразбиране: данни = 8'd0;

endcase

приключвамSadd:;endcase

приключвам

endmodule

 

Welcome to EDABoard.com

Sponsor

Back
Top