Вечер добрый коллеги. В процессе отладки 1Гбит сетки на связке Spartan-6 + Marvell 88E1111 возникла проблема, суть которой в следующем:
1. В процессе отладки принимали и передавали пакеты на ПК (на ПК установлена 7-ка). Так вот при включенном снифере (программа, которая ловит все пакеты), ПК принимал с платы все пакеты и соответственно передавал. Все было ОК. Как только отключили снифер, так сломалась передача с платы на ПК (с ПК на плату все пакеты проходят). Я сам занимаюсь только железом (ПЛИС), а программой для ПК другой человек, но проблема общая и ее надо как то решать.
Сам снифер железо сломать не мог, значит винде что-то не нравится. Я уж начал думать грешным делам на CRC, что не так считаю (я подсчет виду табличным способом; ранее делал аналогичным образом коммутатор на 100Мбит на алтере - все было ок). Полазил в инете и нашел еще одну реализацию - через XOR'ы. Попробовал ее. Результат подсчета CRC одинаков. Нижу привожу все два алгоритма. Может для сетки 1Гбит есть разница?
1-ый способ (табличный).********************************************************************
********************************************************************************
*
***************
CODE
`timescale 1ns / 1ps
module my_crc_prd (
input Clk_125_MHz,
input Eth_ON,
input Clr_CRC,
input [7:0] D_In,
input En_CRC,
output reg [31:0] Rg_CRC, // Регистр хранения текущего значения контрольной суммы.
output [31:0] Out_CRC
);
//--------------------------------------------------------------------------//
//--------------- Вычисление индекса таблицы коэффициентов. ----------------//
//--------------------------------------------------------------------------//
wire [7:0] TAB_ind = (D_In ^ Rg_CRC[7:0]);
//--------------------------------------------------------------------------//
//------------------------- Таблица коэффициентов. -------------------------//
//--------------------------------------------------------------------------//
reg [31:0] TAB_ROM;
always @ (TAB_ind)
begin
case (TAB_ind [7:0])
8'd0 : TAB_ROM <= 32'h00000000;
8'd1 : TAB_ROM <= 32'h77073096;
8'd2 : TAB_ROM <= 32'hee0e612c;
8'd3 : TAB_ROM <= 32'h990951ba;
8'd4 : TAB_ROM <= 32'h076dc419;
8'd5 : TAB_ROM <= 32'h706af48f;
8'd6 : TAB_ROM <= 32'he963a535;
8'd7 : TAB_ROM <= 32'h9e6495a3;
8'd8 : TAB_ROM <= 32'h0edb8832;
8'd9 : TAB_ROM <= 32'h79dcb8a4;
8'd10 : TAB_ROM <= 32'he0d5e91e;
8'd11 : TAB_ROM <= 32'h97d2d988;
8'd12 : TAB_ROM <= 32'h09b64c2b;
8'd13 : TAB_ROM <= 32'h7eb17cbd;
8'd14 : TAB_ROM <= 32'he7b82d07;
8'd15 : TAB_ROM <= 32'h90bf1d91;
8'd16 : TAB_ROM <= 32'h1db71064;
8'd17 : TAB_ROM <= 32'h6ab020f2;
8'd18 : TAB_ROM <= 32'hf3b97148;
8'd19 : TAB_ROM <= 32'h84be41de;
8'd20 : TAB_ROM <= 32'h1adad47d;
8'd21 : TAB_ROM <= 32'h6ddde4eb;
8'd22 : TAB_ROM <= 32'hf4d4b551;
8'd23 : TAB_ROM <= 32'h83d385c7;
8'd24 : TAB_ROM <= 32'h136c9856;
8'd25 : TAB_ROM <= 32'h646ba8c0;
8'd26 : TAB_ROM <= 32'hfd62f97a;
8'd27 : TAB_ROM <= 32'h8a65c9ec;
8'd28 : TAB_ROM <= 32'h14015c4f;
8'd29 : TAB_ROM <= 32'h63066cd9;
8'd30 : TAB_ROM <= 32'hfa0f3d63;
8'd31 : TAB_ROM <= 32'h8d080df5;
8'd32 : TAB_ROM <= 32'h3b6e20c8;
8'd33 : TAB_ROM <= 32'h4c69105e;
8'd34 : TAB_ROM <= 32'hd56041e4;
8'd35 : TAB_ROM <= 32'ha2677172;
8'd36 : TAB_ROM <= 32'h3c03e4d1;
8'd37 : TAB_ROM <= 32'h4b04d447;
8'd38 : TAB_ROM <= 32'hd20d85fd;
8'd39 : TAB_ROM <= 32'ha50ab56b;
8'd40 : TAB_ROM <= 32'h35b5a8fa;
8'd41 : TAB_ROM <= 32'h42b2986c;
8'd42 : TAB_ROM <= 32'hdbbbc9d6;
8'd43 : TAB_ROM <= 32'hacbcf940;
8'd44 : TAB_ROM <= 32'h32d86ce3;
8'd45 : TAB_ROM <= 32'h45df5c75;
8'd46 : TAB_ROM <= 32'hdcd60dcf;
8'd47 : TAB_ROM <= 32'habd13d59;
8'd48 : TAB_ROM <= 32'h26d930ac;
8'd49 : TAB_ROM <= 32'h51de003a;
8'd50 : TAB_ROM <= 32'hc8d75180;
8'd51 : TAB_ROM <= 32'hbfd06116;
8'd52 : TAB_ROM <= 32'h21b4f4b5;
8'd53 : TAB_ROM <= 32'h56b3c423;
8'd54 : TAB_ROM <= 32'hcfba9599;
8'd55 : TAB_ROM <= 32'hb8bda50f;
8'd56 : TAB_ROM <= 32'h2802b89e;
8'd57 : TAB_ROM <= 32'h5f058808;
8'd58 : TAB_ROM <= 32'hc60cd9b2;
8'd59 : TAB_ROM <= 32'hb10be924;
8'd60 : TAB_ROM <= 32'h2f6f7c87;
8'd61 : TAB_ROM <= 32'h58684c11;
8'd62 : TAB_ROM <= 32'hc1611dab;
8'd63 : TAB_ROM <= 32'hb6662d3d;
8'd64 : TAB_ROM <= 32'h76dc4190;
8'd65 : TAB_ROM <= 32'h01db7106;
8'd66 : TAB_ROM <= 32'h98d220bc;
8'd67 : TAB_ROM <= 32'hefd5102a;
8'd68 : TAB_ROM <= 32'h71b18589;
8'd69 : TAB_ROM <= 32'h06b6b51f;
8'd70 : TAB_ROM <= 32'h9fbfe4a5;
8'd71 : TAB_ROM <= 32'he8b8d433;
8'd72 : TAB_ROM <= 32'h7807c9a2;
8'd73 : TAB_ROM <= 32'h0f00f934;
8'd74 : TAB_ROM <= 32'h9609a88e;
8'd75 : TAB_ROM <= 32'he10e9818;
8'd76 : TAB_ROM <= 32'h7f6a0dbb;
8'd77 : TAB_ROM <= 32'h086d3d2d;
8'd78 : TAB_ROM <= 32'h91646c97;
8'd79 : TAB_ROM <= 32'he6635c01;
8'd80 : TAB_ROM <= 32'h6b6b51f4;
8'd81 : TAB_ROM <= 32'h1c6c6162;
8'd82 : TAB_ROM <= 32'h856530d8;
8'd83 : TAB_ROM <= 32'hf262004e;
8'd84 : TAB_ROM <= 32'h6c0695ed;
8'd85 : TAB_ROM <= 32'h1b01a57b;
8'd86 : TAB_ROM <= 32'h8208f4c1;
8'd87 : TAB_ROM <= 32'hf50fc457;
8'd88 : TAB_ROM <= 32'h65b0d9c6;
8'd89 : TAB_ROM <= 32'h12b7e950;
8'd90 : TAB_ROM <= 32'h8bbeb8ea;
8'd91 : TAB_ROM <= 32'hfcb9887c;
8'd92 : TAB_ROM <= 32'h62dd1ddf;
8'd93 : TAB_ROM <= 32'h15da2d49;
8'd94 : TAB_ROM <= 32'h8cd37cf3;
8'd95 : TAB_ROM <= 32'hfbd44c65;
8'd96 : TAB_ROM <= 32'h4db26158;
8'd97 : TAB_ROM <= 32'h3ab551ce;
8'd98 : TAB_ROM <= 32'ha3bc0074;
8'd99 : TAB_ROM <= 32'hd4bb30e2;
8'd100 : TAB_ROM <= 32'h4adfa541;
8'd101 : TAB_ROM <= 32'h3dd895d7;
8'd102 : TAB_ROM <= 32'ha4d1c46d;
8'd103 : TAB_ROM <= 32'hd3d6f4fb;
8'd104 : TAB_ROM <= 32'h4369e96a;
8'd105 : TAB_ROM <= 32'h346ed9fc;
8'd106 : TAB_ROM <= 32'had678846;
8'd107 : TAB_ROM <= 32'hda60b8d0;
8'd108 : TAB_ROM <= 32'h44042d73;
8'd109 : TAB_ROM <= 32'h33031de5;
8'd110 : TAB_ROM <= 32'haa0a4c5f;
8'd111 : TAB_ROM <= 32'hdd0d7cc9;
8'd112 : TAB_ROM <= 32'h5005713c;
8'd113 : TAB_ROM <= 32'h270241aa;
8'd114 : TAB_ROM <= 32'hbe0b1010;
8'd115 : TAB_ROM <= 32'hc90c2086;
8'd116 : TAB_ROM <= 32'h5768b525;
8'd117 : TAB_ROM <= 32'h206f85b3;
8'd118 : TAB_ROM <= 32'hb966d409;
8'd119 : TAB_ROM <= 32'hce61e49f;
8'd120 : TAB_ROM <= 32'h5edef90e;
8'd121 : TAB_ROM <= 32'h29d9c998;
8'd122 : TAB_ROM <= 32'hb0d09822;
8'd123 : TAB_ROM <= 32'hc7d7a8b4;
8'd124 : TAB_ROM <= 32'h59b33d17;
8'd125 : TAB_ROM <= 32'h2eb40d81;
8'd126 : TAB_ROM <= 32'hb7bd5c3b;
8'd127 : TAB_ROM <= 32'hc0ba6cad;
8'd128 : TAB_ROM <= 32'hedb88320;
8'd129 : TAB_ROM <= 32'h9abfb3b6;
8'd130 : TAB_ROM <= 32'h03b6e20c;
8'd131 : TAB_ROM <= 32'h74b1d29a;
8'd132 : TAB_ROM <= 32'head54739;
8'd133 : TAB_ROM <= 32'h9dd277af;
8'd134 : TAB_ROM <= 32'h04db2615;
8'd135 : TAB_ROM <= 32'h73dc1683;
8'd136 : TAB_ROM <= 32'he3630b12;
8'd137 : TAB_ROM <= 32'h94643b84;
8'd138 : TAB_ROM <= 32'h0d6d6a3e;
8'd139 : TAB_ROM <= 32'h7a6a5aa8;
8'd140 : TAB_ROM <= 32'he40ecf0b;
8'd141 : TAB_ROM <= 32'h9309ff9d;
8'd142 : TAB_ROM <= 32'h0a00ae27;
8'd143 : TAB_ROM <= 32'h7d079eb1;
8'd144 : TAB_ROM <= 32'hf00f9344;
8'd145 : TAB_ROM <= 32'h8708a3d2;
8'd146 : TAB_ROM <= 32'h1e01f268;
8'd147 : TAB_ROM <= 32'h6906c2fe;
8'd148 : TAB_ROM <= 32'hf762575d;
8'd149 : TAB_ROM <= 32'h806567cb;
8'd150 : TAB_ROM <= 32'h196c3671;
8'd151 : TAB_ROM <= 32'h6e6b06e7;
8'd152 : TAB_ROM <= 32'hfed41b76;
8'd153 : TAB_ROM <= 32'h89d32be0;
8'd154 : TAB_ROM <= 32'h10da7a5a;
8'd155 : TAB_ROM <= 32'h67dd4acc;
8'd156 : TAB_ROM <= 32'hf9b9df6f;
8'd157 : TAB_ROM <= 32'h8ebeeff9;
8'd158 : TAB_ROM <= 32'h17b7be43;
8'd159 : TAB_ROM <= 32'h60b08ed5;
8'd160 : TAB_ROM <= 32'hd6d6a3e8;
8'd161 : TAB_ROM <= 32'ha1d1937e;
8'd162 : TAB_ROM <= 32'h38d8c2c4;
8'd163 : TAB_ROM <= 32'h4fdff252;
8'd164 : TAB_ROM <= 32'hd1bb67f1;
8'd165 : TAB_ROM <= 32'ha6bc5767;
8'd166 : TAB_ROM <= 32'h3fb506dd;
8'd167 : TAB_ROM <= 32'h48b2364b;
8'd168 : TAB_ROM <= 32'hd80d2bda;
8'd169 : TAB_ROM <= 32'haf0a1b4c;
8'd170 : TAB_ROM <= 32'h36034af6;
8'd171 : TAB_ROM <= 32'h41047a60;
8'd172 : TAB_ROM <= 32'hdf60efc3;
8'd173 : TAB_ROM <= 32'ha867df55;
8'd174 : TAB_ROM <= 32'h316e8eef;
8'd175 : TAB_ROM <= 32'h4669be79;
8'd176 : TAB_ROM <= 32'hcb61b38c;
8'd177 : TAB_ROM <= 32'hbc66831a;
8'd178 : TAB_ROM <= 32'h256fd2a0;
8'd179 : TAB_ROM <= 32'h5268e236;
8'd180 : TAB_ROM <= 32'hcc0c7795;
8'd181 : TAB_ROM <= 32'hbb0b4703;
8'd182 : TAB_ROM <= 32'h220216b9;
8'd183 : TAB_ROM <= 32'h5505262f;
8'd184 : TAB_ROM <= 32'hc5ba3bbe;
8'd185 : TAB_ROM <= 32'hb2bd0b28;
8'd186 : TAB_ROM <= 32'h2bb45a92;
8'd187 : TAB_ROM <= 32'h5cb36a04;
8'd188 : TAB_ROM <= 32'hc2d7ffa7;
8'd189 : TAB_ROM <= 32'hb5d0cf31;
8'd190 : TAB_ROM <= 32'h2cd99e8b;
8'd191 : TAB_ROM <= 32'h5bdeae1d;
8'd192 : TAB_ROM <= 32'h9b64c2b0;
8'd193 : TAB_ROM <= 32'hec63f226;
8'd194 : TAB_ROM <= 32'h756aa39c;
8'd195 : TAB_ROM <= 32'h026d930a;
8'd196 : TAB_ROM <= 32'h9c0906a9;
8'd197 : TAB_ROM <= 32'heb0e363f;
8'd198 : TAB_ROM <= 32'h72076785;
8'd199 : TAB_ROM <= 32'h05005713;
8'd200 : TAB_ROM <= 32'h95bf4a82;
8'd201 : TAB_ROM <= 32'he2b87a14;
8'd202 : TAB_ROM <= 32'h7bb12bae;
8'd203 : TAB_ROM <= 32'h0cb61b38;
8'd204 : TAB_ROM <= 32'h92d28e9b;
8'd205 : TAB_ROM <= 32'he5d5be0d;
8'd206 : TAB_ROM <= 32'h7cdcefb7;
8'd207 : TAB_ROM <= 32'h0bdbdf21;
8'd208 : TAB_ROM <= 32'h86d3d2d4;
8'd209 : TAB_ROM <= 32'hf1d4e242;
8'd210 : TAB_ROM <= 32'h68ddb3f8;
8'd211 : TAB_ROM <= 32'h1fda836e;
8'd212 : TAB_ROM <= 32'h81be16cd;
8'd213 : TAB_ROM <= 32'hf6b9265b;
8'd214 : TAB_ROM <= 32'h6fb077e1;
8'd215 : TAB_ROM <= 32'h18b74777;
8'd216 : TAB_ROM <= 32'h88085ae6;
8'd217 : TAB_ROM <= 32'hff0f6a70;
8'd218 : TAB_ROM <= 32'h66063bca;
8'd219 : TAB_ROM <= 32'h11010b5c;
8'd220 : TAB_ROM <= 32'h8f659eff;
8'd221 : TAB_ROM <= 32'hf862ae69;
8'd222 : TAB_ROM <= 32'h616bffd3;
8'd223 : TAB_ROM <= 32'h166ccf45;
8'd224 : TAB_ROM <= 32'ha00ae278;
8'd225 : TAB_ROM <= 32'hd70dd2ee;
8'd226 : TAB_ROM <= 32'h4e048354;
8'd227 : TAB_ROM <= 32'h3903b3c2;
8'd228 : TAB_ROM <= 32'ha7672661;
8'd229 : TAB_ROM <= 32'hd06016f7;
8'd230 : TAB_ROM <= 32'h4969474d;
8'd231 : TAB_ROM <= 32'h3e6e77db;
8'd232 : TAB_ROM <= 32'haed16a4a;
8'd233 : TAB_ROM <= 32'hd9d65adc;
8'd234 : TAB_ROM <= 32'h40df0b66;
8'd235 : TAB_ROM <= 32'h37d83bf0;
8'd236 : TAB_ROM <= 32'ha9bcae53;
8'd237 : TAB_ROM <= 32'hdebb9ec5;
8'd238 : TAB_ROM <= 32'h47b2cf7f;
8'd239 : TAB_ROM <= 32'h30b5ffe9;
8'd240 : TAB_ROM <= 32'hbdbdf21c;
8'd241 : TAB_ROM <= 32'hcabac28a;
8'd242 : TAB_ROM <= 32'h53b39330;
8'd243 : TAB_ROM <= 32'h24b4a3a6;
8'd244 : TAB_ROM <= 32'hbad03605;
8'd245 : TAB_ROM <= 32'hcdd70693;
8'd246 : TAB_ROM <= 32'h54de5729;
8'd247 : TAB_ROM <= 32'h23d967bf;
8'd248 : TAB_ROM <= 32'hb3667a2e;
8'd249 : TAB_ROM <= 32'hc4614ab8;
8'd250 : TAB_ROM <= 32'h5d681b02;
8'd251 : TAB_ROM <= 32'h2a6f2b94;
8'd252 : TAB_ROM <= 32'hb40bbe37;
8'd253 : TAB_ROM <= 32'hc30c8ea1;
8'd254 : TAB_ROM <= 32'h5a05df1b;
8'd255 : TAB_ROM <= 32'h2d02ef8d;
endcase
end
//--------------------------------------------------------------------------//
//----------------------- Регистр контрольной суммы. -----------------------//
//--------------------------------------------------------------------------//
always @(posedge Clk_125_MHz or negedge Eth_ON)
begin
if (~Eth_ON)
Rg_CRC <= 32'hFFFFFFFF;
else if (Clr_CRC)
Rg_CRC <= 32'hFFFFFFFF;
else if (En_CRC)
Rg_CRC <= TAB_ROM ^ {8'd0, Rg_CRC[31:8]};
end
assign Out_CRC = ~{Rg_CRC[7:0], Rg_CRC[15:8], Rg_CRC[23:16], Rg_CRC[31:24]};
endmodule
2-ой способ - XOR ********************************************************************************
********************************************************************************
CODE
`timescale 1ns / 1ps
module CRC32_Prd (
input Eth_ON,
input Clk_125_MHz,
input Clr_CRC,
input [7:0] D_In,
input En_CRC,
output reg [31:0] Rg_CRC,
output [31:0] CRC_out
);
//--------------------------------------------------------------------------//
//----------------------- Функция вычисления CRC32. ------------------------//
//--------------------------------------------------------------------------//
function [31:0] NextCRC;
input [7:0] D;
input [31:0] C;
reg [31:0] NewCRC;
begin
NewCRC[0] = C[24] ^ C[30] ^ D[1] ^ D[7];
NewCRC[1] = C[25] ^ C[31] ^ D[0] ^ D[6] ^ C[24] ^ C[30] ^ D[1] ^ D[7];
NewCRC[2] = C[26] ^ D[5] ^ C[25] ^ C[31] ^ D[0] ^ D[6] ^ C[24] ^ C[30] ^ D[1] ^ D[7];
NewCRC[3] = C[27] ^ D[4] ^ C[26] ^ D[5] ^ C[25] ^ C[31] ^ D[0] ^ D[6];
NewCRC[4] = C[28] ^ D[3] ^ C[27] ^ D[4] ^ C[26] ^ D[5] ^ C[24] ^ C[30] ^ D[1] ^ D[7];
NewCRC[5] = C[29] ^ D[2] ^ C[28] ^ D[3] ^ C[27] ^ D[4] ^ C[25] ^ C[31] ^ D[0] ^ D[6] ^ C[24] ^ C[30] ^ D[1] ^ D[7];
NewCRC[6] = C[30] ^ D[1] ^ C[29] ^ D[2] ^ C[28] ^ D[3] ^ C[26] ^ D[5] ^ C[25] ^ C[31] ^ D[0] ^ D[6];
NewCRC[7] = C[31] ^ D[0] ^ C[29] ^ D[2] ^ C[27] ^ D[4] ^ C[26] ^ D[5] ^ C[24] ^ D[7];
NewCRC[8] = C[0] ^ C[28] ^ D[3] ^ C[27] ^ D[4] ^ C[25] ^ D[6] ^ C[24] ^ D[7];
NewCRC[9] = C[1] ^ C[29] ^ D[2] ^ C[28] ^ D[3] ^ C[26] ^ D[5] ^ C[25] ^ D[6];
NewCRC[10] = C[2] ^ C[29] ^ D[2] ^ C[27] ^ D[4] ^ C[26] ^ D[5] ^ C[24] ^ D[7];
NewCRC[11] = C[3] ^ C[28] ^ D[3] ^ C[27] ^ D[4] ^ C[25] ^ D[6] ^ C[24] ^ D[7];
NewCRC[12] = C[4] ^ C[29] ^ D[2] ^ C[28] ^ D[3] ^ C[26] ^ D[5] ^ C[25] ^ D[6] ^ C[24] ^ C[30] ^ D[1] ^ D[7];
NewCRC[13] = C[5] ^ C[30] ^ D[1] ^ C[29] ^ D[2] ^ C[27] ^ D[4] ^ C[26] ^ D[5] ^ C[25] ^ C[31] ^ D[0] ^ D[6];
NewCRC[14] = C[6] ^ C[31] ^ D[0] ^ C[30] ^ D[1] ^ C[28] ^ D[3] ^ C[27] ^ D[4] ^ C[26] ^ D[5];
NewCRC[15] = C[7] ^ C[31] ^ D[0] ^ C[29] ^ D[2] ^ C[28] ^ D[3] ^ C[27] ^ D[4];
NewCRC[16] = C[8] ^ C[29] ^ D[2] ^ C[28] ^ D[3] ^ C[24] ^ D[7];
NewCRC[17] = C[9] ^ C[30] ^ D[1] ^ C[29] ^ D[2] ^ C[25] ^ D[6];
NewCRC[18] = C[10] ^ C[31] ^ D[0] ^ C[30] ^ D[1] ^ C[26] ^ D[5];
NewCRC[19] = C[11] ^ C[31] ^ D[0] ^ C[27] ^ D[4];
NewCRC[20] = C[12] ^ C[28] ^ D[3];
NewCRC[21] = C[13] ^ C[29] ^ D[2];
NewCRC[22] = C[14] ^ C[24] ^ D[7];
NewCRC[23] = C[15] ^ C[25] ^ D[6] ^ C[24] ^ C[30] ^ D[1] ^ D[7];
NewCRC[24] = C[16] ^ C[26] ^ D[5] ^ C[25] ^ C[31] ^ D[0] ^ D[6];
NewCRC[25] = C[17] ^ C[27] ^ D[4] ^ C[26] ^ D[5];
NewCRC[26] = C[18] ^ C[28] ^ D[3] ^ C[27] ^ D[4] ^ C[24] ^ C[30] ^ D[1] ^ D[7];
NewCRC[27] = C[19] ^ C[29] ^ D[2] ^ C[28] ^ D[3] ^ C[25] ^ C[31] ^ D[0] ^ D[6];
NewCRC[28] = C[20] ^ C[30] ^ D[1] ^ C[29] ^ D[2] ^ C[26] ^ D[5];
NewCRC[29] = C[21] ^ C[31] ^ D[0] ^ C[30] ^ D[1] ^ C[27] ^ D[4];
NewCRC[30] = C[22] ^ C[31] ^ D[0] ^ C[28] ^ D[3];
NewCRC[31] = C[23] ^ C[29] ^ D[2];
NextCRC = NewCRC;
end
endfunction
//--------------------------------------------------------------------------//
//----------------------- Регистр контрольной суммы. -----------------------//
//--------------------------------------------------------------------------//
always @ (posedge Clk_125_MHz or negedge Eth_ON)
begin
if (~Eth_ON)
Rg_CRC <=32'hffffffff;
else if (Clr_CRC)
Rg_CRC <=32'hffffffff;
else if (En_CRC)
Rg_CRC <=NextCRC(D_In,Rg_CRC);
end
assign CRC_out = ~{Rg_CRC[24], Rg_CRC[25], Rg_CRC[26], Rg_CRC[27], Rg_CRC[28], Rg_CRC[29], Rg_CRC[30], Rg_CRC[31],
Rg_CRC[16], Rg_CRC[17], Rg_CRC[18], Rg_CRC[19], Rg_CRC[20], Rg_CRC[21], Rg_CRC[22], Rg_CRC[23],
Rg_CRC[8], Rg_CRC[9], Rg_CRC[10], Rg_CRC[11], Rg_CRC[12], Rg_CRC[13], Rg_CRC[14], Rg_CRC[15],
Rg_CRC[0], Rg_CRC[1], Rg_CRC[2], Rg_CRC[3], Rg_CRC[4], Rg_CRC[5], Rg_CRC[6], Rg_CRC[7]};
endmodule
Причина редактирования: используйте теги для оформления кода (с) модератор