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 стойност на един или повече Дата пътя винаги изграждане.
Пиша код за 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 стойност на един или повече Дата пътя винаги изграждане.