SOGO論壇
標題:
低成本誤碼測試儀設計
[列印本頁]
作者:
alphi
時間:
2012-5-4 12:36:10
標題:
低成本誤碼測試儀設計
本帖最後由 alphi 於 2012-5-4 12:35 編輯
一、前言
在通訊系統中常常需要使用誤碼測試儀來判斷通訊品質好壞,但是通常一台要價不便宜以太克的BERTScope BSA125C 就至少要四百萬台幣
2012-5-4 10:57:40 上傳
下載附件
(10.08 KB)
而便宜一點的Centellax TG1B1 也要八十 幾萬
2012-5-4 10:54:57 上傳
下載附件
(82.46 KB)
當然另一種常見方式就是自行使用FPGA去製作相關功能.這樣就必須花費許多技術成本.以我為例使用Xilinx Virtex-6 一顆就要30000~40000元台幣(使用Xilinx 是因為他已經有相關的Application Notes,只要花時間去修改跟增加功能).最後就是本文採用現有 IC達到功能.
本文中採用Maxim DS2174 E-BERT(增強型誤碼測試),其特性如下:
(a) 位元率(Bit rate)最高可達 155Mbps
(b) 測式樣式(Test Pattern):PRBS1~PRBS32
(c) 使用者自訂樣式(User Define Pattern): 512bytes= 4096bits
(d) 誤碼計數器:48bit (以155Mbps進行測試可以量測時間為504小時:2^48/155Mbps=504hours)
(e) 支援誤碼插入(Error Injection)
二、原理
Function Diagram如下圖所示
2012-5-4 11:10:21 上傳
下載附件
(27.67 KB)
三、實做
由於想要產生5Mbps~155Mbps,所以採用VCO Oscillator 比較不適合,所以採用SiLabs公司出產的Low Jitter 4Channel AnyClock IC:SI5338A
SI5338 產生LVPECL Clock 相關程式碼,使用ATMEL AVR ATMEGA128A MCU
/*
SI5338 副程式
使用ATMEL GCC Toolchain
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "si5338.h"
void SI5338_WriteData(uint8_t devid,uint8_t addr,uint8_t data)
{
uint8_t status;
status=TWI_Start();
//_delay_ms(5);
status=TWI_Write(devid);
//_delay_ms(5);
status=TWI_Write(addr);
_delay_ms(5);
status=TWI_Write(data);
//_delay_ms(5);
status=TWI_Stop();
//_delay_ms(5);
}
void SI5338_Init(uint8_t devid)
{
int16_t i;
struct SI5338_RegMap SI5338_RegData[NUM_REGS_MAX] ={
{ 0,0x00},
{ 1,0x00},
{ 2,0x00},
{ 3,0x00},
{ 4,0x00},
{ 5,0x00},
{ 6,0x08},
{ 7,0x00},
{ 8,0x70},
{ 9,0x0F},
{ 10,0x00},
{ 11,0x00},
{ 12,0x00},
{ 13,0x00},
{ 14,0x00},
{ 15,0x00},
{ 16,0x00},
{ 17,0x00},
{ 18,0x00},
{ 19,0x00},
{ 20,0x00},
{ 21,0x00},
{ 22,0x00},
{ 23,0x00},
{ 24,0x00},
{ 25,0x00},
{ 26,0x00},
{ 27,0x70},
{ 28,0x96},
{ 29,0x90},
{ 30,0xB0},
{ 31,0xC0},
{ 32,0xC0},
{ 33,0xC0},
{ 34,0xC0},
{ 35,0x00},
{ 36,0x04},
{ 37,0x04},
{ 38,0x04},
{ 39,0x04},
{ 40,0xEF},
{ 41,0x3D},
{ 42,0x2F},
{ 43,0x00},
{ 44,0x00},
{ 45,0x00},
{ 46,0x00},
{ 47,0x14},
{ 48,0x3A},
{ 49,0x00},
{ 50,0xC4},
{ 51,0x07},
{ 52,0x10},
{ 53,0x00},
{ 54,0x06},
{ 55,0x00},
{ 56,0x00},
{ 57,0x00},
{ 58,0x00},
{ 59,0x01},
{ 60,0x00},
{ 61,0x00},
{ 62,0x00},
{ 63,0x10},
{ 64,0x00},
{ 65,0x06},
{ 66,0x00},
{ 67,0x00},
{ 68,0x00},
{ 69,0x00},
{ 70,0x01},
{ 71,0x00},
{ 72,0x00},
{ 73,0x00},
{ 74,0x10},
{ 75,0x6F},
{ 76,0x05},
{ 77,0x74},
{ 78,0xC4},
{ 79,0x07},
{ 80,0x00},
{ 81,0xCD},
{ 82,0x15},
{ 83,0x04},
{ 84,0x00},
{ 85,0x10},
{ 86,0x5E},
{ 87,0x07},
{ 88,0xA8},
{ 89,0x80},
{ 90,0x00},
{ 91,0x00},
{ 92,0x85},
{ 93,0xCF},
{ 94,0x00},
{ 95,0x00},
{ 96,0x10},
{ 97,0xC4},
{ 98,0x2F},
{ 99,0xF0},
{100,0x01},
{101,0x00},
{102,0x00},
{103,0x71},
{104,0x02},
{105,0x00},
{106,0x80},
{107,0x00},
{108,0x00},
{109,0x00},
{110,0x40},
{111,0x00},
{112,0x00},
{113,0x00},
{114,0x40},
{115,0x00},
{116,0x80},
{117,0x00},
{118,0x40},
{119,0x00},
{120,0x00},
{121,0x00},
{122,0x40},
{123,0x00},
{124,0x00},
{125,0x00},
{126,0x00},
{127,0x00},
{128,0x00},
{129,0x00},
{130,0x00},
{131,0x00},
{132,0x00},
{133,0x00},
{134,0x00},
{135,0x00},
{136,0x00},
{137,0x00},
{138,0x00},
{139,0x00},
{140,0x00},
{141,0x00},
{142,0x00},
{143,0x00},
{144,0x00},
{145,0x00},
{146,0xFF},
{147,0x00},
{148,0x00},
{149,0x00},
{150,0x00},
{151,0x00},
{152,0x00},
{153,0x00},
{154,0x00},
{155,0x00},
{156,0x00},
{157,0x00},
{158,0x00},
{159,0x00},
{160,0x00},
{161,0x00},
{162,0x00},
{163,0x00},
{164,0x00},
{165,0x00},
{166,0x00},
{167,0x00},
{168,0x00},
{169,0x00},
{170,0x00},
{171,0x00},
{172,0x00},
{173,0x00},
{174,0x00},
{175,0x00},
{176,0x00},
{177,0x00},
{178,0x00},
{179,0x00},
{180,0x00},
{181,0x00},
{182,0x00},
{183,0x00},
{184,0x00},
{185,0x00},
{186,0x00},
{187,0x00},
{188,0x00},
{189,0x00},
{190,0x00},
{191,0x00},
{192,0x00},
{193,0x00},
{194,0x00},
{195,0x00},
{196,0x00},
{197,0x00},
{198,0x00},
{199,0x00},
{200,0x00},
{201,0x00},
{202,0x00},
{203,0x00},
{204,0x00},
{205,0x00},
{206,0x00},
{207,0x00},
{208,0x00},
{209,0x00},
{210,0x00},
{211,0x00},
{212,0x00},
{213,0x00},
{214,0x00},
{215,0x00},
{216,0x00},
{217,0x00},
{218,0x00},
{219,0x00},
{220,0x00},
{221,0x0D},
{222,0x00},
{223,0x00},
{224,0xF4},
{225,0xF0},
{226,0x00},
{227,0x00},
{228,0x00},
{229,0x00},
{230,0x00},
{231,0x00},
{232,0x00},
{233,0x00},
{234,0x00},
{235,0x00},
{236,0x00},
{237,0x00},
{238,0x14},
{239,0x00},
{240,0x00},
{241,0x65},
{242,0x00},
{243,0xF0},
{244,0x00},
{245,0x00},
{246,0x00},
{247,0x00},
{248,0x00},
{249,0xA8},
{250,0x00},
{251,0x84},
{252,0x00},
{253,0x00},
{254,0x00},
{255,1},
{ 0,0x00},
{ 1,0x00},
{ 2,0x00},
{ 3,0x00},
{ 4,0x00},
{ 5,0x00},
{ 6,0x00},
{ 7,0x00},
{ 8,0x00},
{ 9,0x00},
{ 10,0x00},
{ 11,0x00},
{ 12,0x00},
{ 13,0x00},
{ 14,0x00},
{ 15,0x00},
{ 16,0x00},
{ 17,0x01},
{ 18,0x00},
{ 19,0x00},
{ 20,0x90},
{ 21,0x31},
{ 22,0x00},
{ 23,0x00},
{ 24,0x01},
{ 25,0x00},
{ 26,0x00},
{ 27,0x00},
{ 28,0x00},
{ 29,0x00},
{ 30,0x00},
{ 31,0x00},
{ 32,0x00},
{ 33,0x01},
{ 34,0x00},
{ 35,0x00},
{ 36,0x90},
{ 37,0x31},
{ 38,0x00},
{ 39,0x00},
{ 40,0x01},
{ 41,0x00},
{ 42,0x00},
{ 43,0x00},
{ 44,0x00},
{ 45,0x00},
{ 46,0x00},
{ 47,0x00},
{ 48,0x00},
{ 49,0x01},
{ 50,0x00},
{ 51,0x00},
{ 52,0x90},
{ 53,0x31},
{ 54,0x00},
{ 55,0x00},
{ 56,0x01},
{ 57,0x00},
{ 58,0x00},
{ 59,0x00},
{ 60,0x00},
{ 61,0x00},
{ 62,0x00},
{ 63,0x00},
{ 64,0x00},
{ 65,0x01},
{ 66,0x00},
{ 67,0x00},
{ 68,0x90},
{ 69,0x31},
{ 70,0x00},
{ 71,0x00},
{ 72,0x01},
{ 73,0x00},
{ 74,0x00},
{ 75,0x00},
{ 76,0x00},
{ 77,0x00},
{ 78,0x00},
{ 79,0x00},
{ 80,0x00},
{ 81,0x00},
{ 82,0x00},
{ 83,0x00},
{ 84,0x90},
{ 85,0x31},
{ 86,0x00},
{ 87,0x00},
{ 88,0x01},
{ 89,0x00},
{ 90,0x00},
{ 91,0x00},
{ 92,0x00},
{ 93,0x00},
{ 94,0x00},
{255,0},
{246,2}};
for(i=0;i<NUM_REGS_MAX;i++)
{
SI5338_WriteData(devid,SI5338_RegData[i].Reg_Addr,SI5338_RegData[i].Reg_Val);
//_delay_ms(5);
}
}
void SI5338_SetDatarate(uint8_t devid,float datarate)
{
struct SI5338_RegMap SI5338_RegData[21];
struct SI5338_clock_Setting Clock_set;
float refclock=159.25248/(datarate+0.12);
uint32_t Res=100000;
uint32_t A=16;
uint32_t B=0;
uint32_t C=1;
uint32_t INT;
uint32_t DEC;
uint32_t NUM;
uint16_t i;
A=(uint32_t)refclock;
B=(uint32_t)((refclock-A)*(float)Res);
C=Res;
//FreqOut=2488.32/(float)A+(float)B/(float)C);
INT=floor(128.0*(A*C+B)/C-512);
NUM=(((128.0*((double)A*(double)C+(double)B)/(double)C)-floor(128.0*((double)A*(double)C+(double)B)/(double)C))*(double)C);
DEC=C;
NUM<<=2;
Clock_set.INT_R2=(INT & 0xff);
Clock_set.INT_R1=(INT>>=8 & 0xff);
Clock_set.INT_R0=(INT>>=8 & 0xff);
Clock_set.NUM_R3=(NUM & 0xff);
Clock_set.NUM_R2=(NUM>>=8 & 0xff);
Clock_set.NUM_R1=(NUM>>=8 & 0xff);
Clock_set.NUM_R0=(NUM>>=8 & 0xff);
Clock_set.DEC_R3=(DEC & 0xff);
Clock_set.DEC_R2=(DEC>>=8 & 0xff);
Clock_set.DEC_R1=(DEC>>=8 & 0xff);
Clock_set.DEC_R0=(DEC>>=8 & 0xff);
/*
Refernce Clock M0
*/
//INT
SI5338_RegData[0].Reg_Addr=53;
SI5338_RegData[0].Reg_Val=Clock_set.INT_R2;
SI5338_RegData[1].Reg_Addr=54;
SI5338_RegData[1].Reg_Val=Clock_set.INT_R1;
//NUM
SI5338_RegData[2].Reg_Addr=55;
SI5338_RegData[2].Reg_Val=Clock_set.NUM_R3|Clock_set.INT_R0;
SI5338_RegData[3].Reg_Addr=56;
SI5338_RegData[3].Reg_Val=Clock_set.NUM_R2;
SI5338_RegData[4].Reg_Addr=57;
SI5338_RegData[4].Reg_Val=Clock_set.NUM_R1;
SI5338_RegData[5].Reg_Addr=58;
SI5338_RegData[5].Reg_Val=Clock_set.NUM_R0;
//DEN
SI5338_RegData[6].Reg_Addr=59;
SI5338_RegData[6].Reg_Val=Clock_set.DEC_R3;
SI5338_RegData[7].Reg_Addr=60;
SI5338_RegData[7].Reg_Val=Clock_set.DEC_R2;
SI5338_RegData[8].Reg_Addr=61;
SI5338_RegData[8].Reg_Val=Clock_set.DEC_R1;
SI5338_RegData[9].Reg_Addr=62;
SI5338_RegData[9].Reg_Val=Clock_set.DEC_R0;
/*
Refernce Clock M1
*/
//INT
SI5338_RegData[10].Reg_Addr=64;
SI5338_RegData[10].Reg_Val=Clock_set.INT_R2;
SI5338_RegData[11].Reg_Addr=65;
SI5338_RegData[11].Reg_Val=Clock_set.INT_R1;
//SI5338_RegData[12].Reg_Addr=66;
//SI5338_RegData[12].Reg_Val=Clock_set.INT_R0;
//NUM
SI5338_RegData[12].Reg_Addr=66;
SI5338_RegData[12].Reg_Val=Clock_set.NUM_R3|Clock_set.INT_R0;
SI5338_RegData[13].Reg_Addr=67;
SI5338_RegData[13].Reg_Val=Clock_set.NUM_R2;
SI5338_RegData[14].Reg_Addr=68;
SI5338_RegData[14].Reg_Val=Clock_set.NUM_R1;
SI5338_RegData[15].Reg_Addr=69;
SI5338_RegData[15].Reg_Val=Clock_set.NUM_R0;
//DEN
SI5338_RegData[16].Reg_Addr=70;
SI5338_RegData[16].Reg_Val=Clock_set.DEC_R3;
SI5338_RegData[17].Reg_Addr=71;
SI5338_RegData[17].Reg_Val=Clock_set.DEC_R2;
SI5338_RegData[18].Reg_Addr=72;
SI5338_RegData[18].Reg_Val=Clock_set.DEC_R1;
SI5338_RegData[19].Reg_Addr=73;
SI5338_RegData[19].Reg_Val=Clock_set.DEC_R0;
SI5338_RegData[20].Reg_Addr=246;
SI5338_RegData[20].Reg_Val=2;
for(i=0;i<21;i++)
SI5338_WriteData(devid,SI5338_RegData[i].Reg_Addr,SI5338_RegData[i].Reg_Val);
}
複製代碼
Maxim DS2174 部分程式控制碼
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay>
#define EBERT_ENABLE() (PORTF&=~(1<<0))
#define EBETT_DISABLE() (PORTF|=(1<<0))
#define RD_ENABLE() (PORTF&=~(1<<1))
#define RD_DISABLE() (PORTF|=(1<<1))
#define WR_ENABLE() (PORTF&=~(1<<2))
#define WR_DISABLE() (PORTF|=(1<<2))
void EBERT_WriteData(unsigned char reg,unsigned char data)
{
EBERT_ENABLE();
WR_ENABLE();
PORTA=(reg & 0x0F); //4bit暫存器位址
PORTD=data; //8bit資料
WR_DISABLE();
EBERT_DISABLE();
}
unsigned char EBERT_ReadData(unsigned char reg)
{
unsigned data;
EBERT_ENABLE();
RD_ENABLE();
PORTA=(reg & 0x0F); //4bit暫存器位址
data=PINE; //8bit資料
RD_DISABLE();
EBERT_DISABLE();
return data;
}
void EBERT_Init(void)
{
BERT_WriteData(0x00,0x00); //Auto Resync,Pesudo Random Binrary Sequence
BERT_WriteData(0x01,0x00); //Bit Mode,No Error Bit Inject
BERT_WriteData(0x02,0x00); //No Error
BERT_WriteData(0x03,0xFF); //Pattern Length
BERT_WriteData(0x04,0x0C);
}
unsigned long long int EBERT_GetErrorCount(void)
{
unisnged long long int ErrorCount=0;
ErrorCount|=EBERT_ReadData(0x0A);
ErrorCount|=EBERT_ReadData(0x0B)<<8;
ErrorCount|=EBERT_ReadData(0x0C)<<16;
ErrorCount|=EBERT_ReadData(0x0D)<<24;
ErrorCount|=EBERT_ReadData(0x0E)<<32;
ErrorCount|=EBERT_ReadData(0x0F)<<40;
return ErrorCount;
}
複製代碼
四、測試波型
2012-5-4 12:35:29 上傳
下載附件
(255.96 KB)
附件:
TG1B1-A_picture__500_150.png
(2012-5-4 10:54:57, 82.46 KB) / 下載次數 9
https://oursogo.com/forum.php?mod=attachment&aid=MjA4NDkzMnxiMjExYTVkN3wxNzUyOTcyOTM2fDB8MA%3D%3D
附件:
bertscope.jpg
(2012-5-4 10:57:40, 10.08 KB) / 下載次數 10
https://oursogo.com/forum.php?mod=attachment&aid=MjA4NDkzM3w4ZWYwZDM1ZnwxNzUyOTcyOTM2fDB8MA%3D%3D
附件:
DS2174.png
(2012-5-4 11:10:21, 27.67 KB) / 下載次數 17
https://oursogo.com/forum.php?mod=attachment&aid=MjA4NTAyNnwwODczMzM4OHwxNzUyOTcyOTM2fDB8MA%3D%3D
附件:
DS2174.png
(2012-5-4 12:35:29, 255.96 KB) / 下載次數 13
https://oursogo.com/forum.php?mod=attachment&aid=MjA4NTYzMXw0ZTM0ZjQ4OXwxNzUyOTcyOTM2fDB8MA%3D%3D
歡迎光臨 SOGO論壇 (https://oursogo.com/)
Powered by OURSOGO.COM