Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: E1 CRC MFAS
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > ISDN/G.703/E1
Igor657
Добрый день.

Подскажите пожалуйста,
каковы критерии потери синхронизации CRC MFAS ?

Нужно ли после неё сбрасывать синхронизацию FAS ?

Заранее спасибо за ответы.
Морква
Цитата
...каковы критерии потери синхронизации CRC MFAS?

Две ошибки подряд.

Цитата
Нужно ли после неё сбрасывать синхронизацию FAS ?

Нет, не надо.
Igor657
А не подскажите ли в какой рекомендации это указано ?
Про 2 раза я читал, но это косалось _CAS_ MFAS, а про _CRC_ MFAS в G.706 я ничего не нашел.

Успехов во всех начинаниях !
Морква
Цитата
А не подскажите ли в какой рекомендации это указано?

G732, раздел 5.
Artem_Petrik
Цитата
А не подскажите ли в какой рекомендации это указано ?
Про 2 раза я читал, но это косалось _CAS_ MFAS, а про _CRC_ MFAS в G.706 я ничего не нашел.



Возможно у вас какой-то не такой G.706 smile.gif В моем четко написано: срыв синхронизации если есть ошибки в трех синхрословах подряд, или если в среди последней тысячи кадров CRC не сошлась в 915. Это почти первое, что написано для системы 2048 Мбит/с (раздел 4.1.1 Правда у меня стандарт за 91 год, в новых возможно нумерация изменилась.). А вот про CAS - ни слова.
maegg
[quote name='Artem_Petrik' date='Feb 17 2007, 20:26' post='212466']
[quote]А не подскажите ли в какой рекомендации это указано ?
Про 2 раза я читал, но это косалось _CAS_ MFAS, а про _CRC_ MFAS в G.706 я ничего не нашел.[/quote]

Про CRC_MFAS в основном говорится в G.704.
Правда пока я сам не стал подписывать CRC к фреймеру все казалось ясно.
А тут элементарная вещь не получилась... Может посоветуете
Считаю сейчас так: начиная с бита С1 циклового сигнала SMF (субмультифрейм по CRC) последовательно подаю на схему сдвига 8 циклов. После результат переписывается в регистр CRC, сдвиговый регистр обнуляется, а в следующем SMF CRC передается в С битах циклового.
Так-вот CRC-MFAS от моего формирователя воспринимается верно, а по CRC сыпятся ошибки.
//calculate CRC4
reg [3:0] newcrc;
reg [3:0] c;
wire crc_cio;
assign crc_cio = (slot_count[10:0] == 11'b111_11111_111); //8 frames

always @(posedge f2m or negedge rst)
if(rst == 1'b0)
crcreg <= 'b0;
else if (crc_cio == 1'b1)
crcreg <= newcrc;

always @(posedge f2m or negedge rst)
if(rst == 1'b0)
c <= 'b0;
else if (crc_cio == 1'b1)
c <= 'b0;
else
c <= newcrc;

always @(c, nrzout) begin
newcrc[0] = nrzout ^c[3];
newcrc[1] = nrzout ^c[0] ^c[3];
newcrc[2] = c[1];
newcrc[3] = c[2];
end

То-есть пожоже периодически CRC считается верно.
maegg
Только спросил, как сам разобрался...
Забыл удалить из последовательности для подсчета значения CRC
G.704
2.3.3.5.2 Encoding procedure
i) The CRC-4 bits in the SMF are replaced by binary 0s.
Вот модуль для формирования тестового фрейма с CRC

module pcmfrm_crc ( f2m ,rst ,nrzout );

output nrzout ;
wire nrzout ;

input f2m ; //2048 kHz
wire f2m ;
input rst ; //global reset
wire rst ;
reg nrz;
reg [7:0] pcm_dc;
reg [11:0] slot_count;
wire count_set;
reg cb; //replace bit P1 in FAS
reg cbn; //replace bit P1 in NFAS
wire [7:0] fasc; //assemble FAS word
wire [7:0] nfasc; //assemble NFAS word
reg [3:0] crcreg; //crc register


parameter FAS = 8'b00011011;
parameter NFAS = 8'b11011111;
parameter MFAS = 8'b00001011;
parameter IDLE = 8'b11010101;
parameter CRCMFAS = 8'b001011_11;

wire [7:0] crc_mfas = CRCMFAS;

//loadable slot count
always @(posedge f2m or negedge rst)
if(rst == 1'b0)
slot_count <= 'b0;
else
slot_count <= slot_count + 'b1;

always @(slot_count[10:9], crcreg) begin
case(slot_count[10:9])
2'b00: cb = crcreg[3];
2'b01: cb = crcreg[2];
2'b10: cb = crcreg[1];
2'b11: cb = crcreg[0];
endcase
end

assign fasc = {cb, FAS[6:0]};

//form MFAS CI0
always @(slot_count[11:9],crc_mfas) begin
case(slot_count[11:9])
3'b000: cbn = crc_mfas[7];
3'b001: cbn = crc_mfas[6];
3'b010: cbn = crc_mfas[5];
3'b011: cbn = crc_mfas[4];
3'b100: cbn = crc_mfas[3];
3'b101: cbn = crc_mfas[2];
3'b110: cbn = crc_mfas[1];
3'b111: cbn = crc_mfas[0];
endcase
end

assign nfasc = {cbn, NFAS[6:0]};


always @(slot_count, fasc, nfasc) begin
if(slot_count[8:3] == 6'b0_00000)
pcm_dc = fasc;
else if(slot_count[8:3] == 6'b1_00000)
pcm_dc = nfasc;
else if(slot_count[11:3] == 9'b0000_10000)
pcm_dc = MFAS;
else
pcm_dc = IDLE;
end

always @(slot_count[2:0], pcm_dc) begin
case(slot_count[2:0])
3'b000: nrz = pcm_dc[7];
3'b001: nrz = pcm_dc[6];
3'b010: nrz = pcm_dc[5];
3'b011: nrz = pcm_dc[4];
3'b100: nrz = pcm_dc[3];
3'b101: nrz = pcm_dc[2];
3'b110: nrz = pcm_dc[1];
3'b111: nrz = pcm_dc[0];
endcase
end

assign nrzout = nrz;

always @(slot_count)
if(slot_count[8:0] == 9'b0_00001_000)
cio = 1'b1;
else
cio = 1'b0;

//calculate CRC4
reg [3:0] newcrc;
reg [3:0] c;
wire crc_cio;
wire c_cio; //strobe C bit in frame signal
assign crc_cio = (slot_count[10:0] == 11'b111_11111_111); //8 frames
assign c_cio = (slot_count[8:0] == 9'b0_00000_000);

always @(posedge f2m or negedge rst)
if(rst == 1'b0)
crcreg <= 'b0;
else if (crc_cio == 1'b1)
crcreg <= newcrc;

always @(posedge f2m or negedge rst)
if(rst == 1'b0)
c <= 'b0;
else if (crc_cio == 1'b1)
c <= 'b0;
else
c <= newcrc;

always @(c, nrzout) begin
newcrc[0] = (nrz & ~c_cio) ^c[3];
newcrc[1] = (nrz & ~c_cio) ^c[0] ^c[3];
newcrc[2] = c[1];
newcrc[3] = c[2];
end
endmodule
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.