Разработка методов синтеза и логического проектирования модулей сигнатурного мониторинга

Разработка и совершенствование моделей синтеза и логического проектирования унифицированных модулей сигнатурного мониторинга для повышения эффективности тестового и функционального диагностирования микроконтроллерных устройств управления на их частоте.

Рубрика Коммуникации, связь, цифровые приборы и радиоэлектроника
Вид диссертация
Язык русский
Дата добавления 29.09.2012
Размер файла 2,3 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

inc(z1);

end;

end;

for i:=1 to x4[0] do x0[i]:=x4[i];

x0[0]:=x4[0];

end;

Result:=x0;

end;

function ReadPOL:Tx;

var

s:string;

i,j,z,k:integer;

x0:Tx;

begin

s:=frmMain.cxComboBox1.Text;

i:=1;

j:=1;

z:=2;

for k:=1 to Length(s) do

begin

if (s[k]='+') then

inc(z);

end;

x0[0]:=z-1;

while i<=Length(s) do

begin

//перебор символов

if (s[i]='x') or (s[i]='X') then

begin

if Length(s)<>i then

begin

if (s[i+1]='+') then

begin

x0[j]:=1;

inc(j);

end;

end;

end

else

if (s[i]='+') then

begin

if Length(s)<>i then

begin

if (s[i+1]='1') then

begin

x0[j]:=0;

inc(j);

inc(i);

end;

end;

end

else

begin

x0[j]:=StrToInt(s[i]);

inc(j);

if Length(s)<>i then

begin

if (s[i+1]<>'x') and (s[i+1]<>'X') and (s[i+1]<>'+') then

begin

dec(j);

x0[j]:=StrToInt(s[i]+s[i+1]);

inc(j);

inc(i);

end;

end;

end;

inc(i);

end;

Result:=x0;

end;

procedure TfrmMain.SetSi;

var

i:integer;

begin

Lab[1]:=cxCB1;

Lab[2]:=cxCB2;

Lab[3]:=cxCB3;

Lab[4]:=cxCB4;

Lab[5]:=cxCB5;

Lab[6]:=cxCB6;

Lab[7]:=cxCB7;

Lab[8]:=cxCB8;

Lab[9]:=cxCB9;

Lab[10]:=cxCB10;

Lab[11]:=cxCB11;

Lab[12]:=cxCB12;

Lab[13]:=cxCB13;

Lab[14]:=cxCB14;

Lab[15]:=cxCB15;

Lab[16]:=cxCB16;

for i:=1 to SpinEdit1.Value do

begin

Lab[i].Enabled:=TRUE;

end;

for i:=SpinEdit1.Value+1 to 16 do

begin

Lab[i].Enabled:=FALSE;

end;

//

SpinEdit2.MinValue:=SpinEdit1.Value+1;

SpinEdit2.MaxValue:=Trunc(Power(2,SpinEdit1.Value))-1;

SpinEdit2.Value:=SpinEdit1.Value+1;

end;

function SortSheiker(var x0:Tx;r:integer):Tx;

var

B,S,i,j:integer;

begin

repeat

begin

// проход вверх

for i:=1 to r do

begin

if x0[i-1]<x0[i] then

begin

S:=x0[i];

B:=x0[i-1];

x0[i]:=B;

x0[i-1]:=S;

end;

end;

// проход вниз

for j:=r downto 1 do

begin

if x0[j-1]<x0[j] then

begin

S:=x0[j];

B:=x0[j-1];

x0[j]:=B;

x0[j-1]:=S;

end;

end;

r:=r-1;

end;

until r < 1;

Result:=x0;

end;

procedure TfrmMain.Button1Click(Sender: TObject);

var

x,x0,x1:Tx;

y0:Ex;

n,i,j,q,k,rez,rez2:integer;

begin

cxTimeEdit1.Time:=Now;

// n - степень полинома

n:=SpinEdit1.Value;

// q -

q:=Trunc(Power(2,n))-2;

// Проверка на сочетания

rez2:=0;

for i:=1 to 17 do

begin

if si[i-1]<>-1 then inc(rez2);

end;

if rez2<=1 then

begin

MessageDlg('Введите сочетания полинома P(x) !!!! ', mtError,[mbOk], 0);

Abort;

end;

// Сортировка массива Si=1-16 с прим. function SortSheiker

si:=SortSheiker(Si,16);

// обнуление счётчика для массива-остатков

k:=0;

// Создание массива-остатков

SetLength(y0,q-n+1,n);

// Чтение полинома с прим. function ReadPOL

x1:=ReadPOL;

// Заполнение массива-остатков -1

for i:=0 to q-n do

for j:=0 to n-1 do

y0[i,j]:=-1;

// Заполнение массива-остатков остатками с прим. function DevPOL

for i:=n to q do

begin

x0[0]:=1;

x0[1]:=i;

x:=DevPOL(x0,x1);

for j:=1 to x[0] do y0[k,j-1]:=x[j];

inc(k);

end;

// Отображение результата в гриде-------------------------------------//

StringGrid1.ColWidths[0]:=60;

StringGrid1.ColCount:=n+1;

StringGrid1.RowCount:=q-n+2;

for i:=0 to q-n do

begin

StringGrid1.Cells[0,i+1]:='S'+IntToStr(i+n+1);

for j:=0 to n-1 do

begin

if y0[i,j]<>-1 then

StringGrid1.Cells[j+1,i+1]:=IntToStr(y0[i,j]);

end;

end;

//--------------------------------------------------------------------//

// Сравнение Si+...+Sn c массивом-остатков

rez:=0;

for i:=1 to n do

begin

if y0[SpinEdit2.Value-n-1,i-1]=Si[i-1] then inc(rez);

end;

//

cxTimeEdit2.Time:=Now;

// Вывод результата линейности

if rez=n then

MessageDlg(Edit2.text+' и '+'S'+IntToStr(SpinEdit2.Value)+' '+'ЛИНЕЙНО ЗАВИСИМЫ', mtInformation,[mbOk], 0)

else

MessageDlg(Edit2.text+' и '+'S'+IntToStr(SpinEdit2.Value)+' '+'ЛИНЕЙНО НЕЗАВИСИМЫ', mtError,[mbOk], 0);

end;

procedure TfrmMain.FormCreate(Sender: TObject);

var

i:integer;

begin

SetSi;

// Заполнение S i=1-16 =-1

for i:=1 to 17 do si[i-1]:=-1;

end;

procedure TfrmMain.SpinEdit1Change(Sender: TObject);

begin

SetSi;

end;

procedure TfrmMain.SpeedButton1Click(Sender: TObject);

var

i:integer;

begin

for i:=1 to SpinEdit1.Value do Lab[i].Checked:=FALSE;

Edit2.Text:='';

// очистка массива

for i:=1 to 17 do si[i-1]:=-1;

end;

procedure TfrmMain.cxCBClick(Sender: TObject);

var

i:integer;

begin

Edit2.Text:=Edit2.Text+

TcxCheckBox(Sender as TComponent).Properties.Caption+';';

// заполнение массива

i:=TcxCheckBox(Sender as TComponent).Properties.ValueChecked;

Si[i+1]:=i;

end;

end.

В.2. Генератор последовательности де Брейна на основе примитивного многочлена.

Программа написана на языке программирования Visual C++ 6.0. По алгоритму (раздел 3.5) программа осуществляет формирование многочлена обратной связи СРНОС для генерации последовательностей де Брейна. С помощью данной программы вычисляются функции обратной связи СРНОС разрядности .

#include <stdio.h>

#include <process.h>

void main( void )

{

char name[] = "res1.txt";

FILE *F;

if( !(F = fopen(name,"w")) ) printf("Error open F\n"), exit(0);

const width = 16;

long height = 65538l;

item *x;

x = new item[height];

if( !x ) printf("Out of memory\n"), exit(0);*/

int x[2][width];

for( int w=0; w<width; x[0][w++] = 0 );

for( w=0; w<width; fprintf(F,"%d ",x[0][w++]) ); fprintf(F,"\n");

short go = 1;

for( long h=1; (h<height) & go; h++ )

{

x[1][0] = (x[0][0] | (!x[0][1] & !x[0][3] & !x[0][4] & !x[0][5] & !x[0][6] & !x[0][7] & !x[0][8] & !x[0][9] & !x[0][10] & !x[0][12] & !x[0][13] & !x[0][14] & !(!x[0][0] & !x[0][2] & x[0][11])))

^ x[0][2] ^ x[0][11] ^ x[0][15];

for( w=1; w<width; x[1][w] = x[0][w-1], w++ );

for( w=0; w<width; fprintf(F,"%d ",x[1][w++]) ); fprintf(F,"\n");

for( w=0; w<width; x[0][w] = x[1][w], w++ );

for( go=0, w=0; (w<width) & !go; go |= x[1][w++] );

}

FILE *F2;

char name2[] = "res1_2.txt";

fclose(F);

if( !(F = fopen(name,"r")) ) printf("Error open F again\n"), exit(0);

if( !(F2 = fopen(name2,"w")) ) printf("Error open F2\n"), exit(0);

for( long i=0; i<h; i++ )

{

for( w=0; w<width; fscanf(F,"%d ",*x+w++) ); fscanf(F,"\n");

if( !(x[0][1] | x[0][3] | x[0][4] | x[0][5] |

x[0][6] | x[0][7] | x[0][8] | x[0][9] |

x[0][10] | x[0][12] | x[0][13] | x[0][14]) )

fprintf(F2,"line # %5ld: %d %d %d %d\n",i+1,x[0][15],x[0][11],x[0][2],x[0][0]);

}

fclose(F); fclose(F2);

}

В.3. Нахождение правил эволюции СКА для генерации М - последовательности.

Программа написана на языке программирования Visual C++ 6.0. По алгоритму (раздел 4.7) программа осуществляет поиск правил эволюции СКА для генерации М - последовательностей степени .

// Determ.cpp: implementation of the CDeterm class.

/

//////////////////////////////////////////////////////////////////////

#include "stdafx.h"

#include "matrix.h"

#include "Determ.h"

#include <math.h>

#ifdef _DEBUG

#undef THIS_FILE

static char THIS_FILE[]=__FILE__;

#define new DEBUG_NEW

#endif

//////////////////////////////////////////////////////////////////////

// Construction/Destruction

//////////////////////////////////////////////////////////////////////

CDeterm::CDeterm( BOOL** coefStr, byte length )

{

coefs = coefStr;

dimen = length;

}

CDeterm::~CDeterm()

{

}

BOOL* CDeterm::Binom( BOOL** coefs )

{

BOOL *res = new BOOL[2];

res[0] = coefs[0][0] ^ coefs[1][1];

res[1] = (coefs[0][0] & coefs[1][1]) ^ (coefs[0][1] & coefs[1][0]);

return res;

}

BOOL* CDeterm::GetPolynom( BOOL** coefs, byte dimen, byte col /* = -1 */)

{

BOOL** currCoefs;

__try {

if( col == 255 ) currCoefs = coefs;

else {

currCoefs = new BOOL*[dimen-1];

for( byte i = 1; i < dimen; i++ ) {

currCoefs[i-1] = new BOOL[dimen-1];

for( byte j = 0, pos = 0; j < dimen; j++ )

if( j != col ) currCoefs[i-1][pos++] = coefs[i][j];

}

dimen--;

}

if( dimen == 2 ) return Binom(currCoefs);

BOOL* polynom = new BOOL[dimen];

BOOL* curr = GetPolynom(currCoefs,dimen,0);

polynom[0] = curr[0] ^ currCoefs[0][0];

for( byte i = 1; i < dimen-1; i++ ) polynom[i] = curr[i] ^ (currCoefs[0][0] & curr[i-1]);

polynom[dimen-1] = currCoefs[0][0] & curr[dimen-2];

delete curr;

for( i = 1; i < dimen; i++ )

if( currCoefs[0][i]) {

curr = GetPolynom(currCoefs,dimen,i);

for( byte j = 1; j < dimen; polynom[j] ^= curr[j-1], j++ );

delete curr;

}

return polynom;

} __finally {

if( col != 255 ) {

for( int i=0; i<dimen; delete currCoefs[i++] );

delete currCoefs;

}

}

}

BOOL CDeterm::IsPolynom( CString polynom )

{

byte length = polynom.GetLength();

if( dimen != length ) return false;

BOOL * currPolynom = GetPolynom(coefs,dimen);

for( int i = 0; i < dimen; i++ ) if( currPolynom[i] != (polynom[i] == '1')) {

delete currPolynom;

return false;

}

delete currPolynom;

return true;

}

В.4. Анализ сложности последовательностей де Брейна.

Программа написана на языке программирования Visual C++ 6.0. По алгоритму (раздел 5.1) программа осуществляет оценку сложности последовательностей де Брейна степени .

// test3Dlg.cpp : implementation file

//

#include "stdafx.h"

#include "test3.h"

#include "test3Dlg.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

/////////////////////////////////////////////////////////////////////////////

// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog

{

public:

CAboutDlg();

// Dialog Data

//{{AFX_DATA(CAboutDlg)

enum { IDD = IDD_ABOUTBOX };

//}}AFX_DATA

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(CAboutDlg)

protected:

virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support

//}}AFX_VIRTUAL

// Implementation

protected:

//{{AFX_MSG(CAboutDlg)

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)

{

//{{AFX_DATA_INIT(CAboutDlg)

//}}AFX_DATA_INIT

}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

//{{AFX_DATA_MAP(CAboutDlg)

//}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)

//{{AFX_MSG_MAP(CAboutDlg)

// No message handlers

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

// CTest3Dlg dialog

CTest3Dlg::CTest3Dlg(CWnd* pParent /*=NULL*/)

: CDialog(CTest3Dlg::IDD, pParent)

{

//{{AFX_DATA_INIT(CTest3Dlg)

m_Length = _T("");

m_Comp = _T("");

//}}AFX_DATA_INIT

// Note that LoadIcon does not require a subsequent DestroyIcon in Win32

m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

void CTest3Dlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

//{{AFX_DATA_MAP(CTest3Dlg)

DDX_Control(pDX, IDC_EDIT_COMP, m_CompControl);

DDX_Control(pDX, IDC_EDIT_LENGTH, m_LengthControl);

DDX_Text(pDX, IDC_EDIT_LENGTH, m_Length);

DDX_Text(pDX, IDC_EDIT_COMP, m_Comp);

//}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CTest3Dlg, CDialog)

//{{AFX_MSG_MAP(CTest3Dlg)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

ON_BN_CLICKED(IDC_BUTTON_COMP, OnButtonComp)

ON_BN_CLICKED(IDC_BUTTON_LENGTH, OnButtonLength)

ON_BN_CLICKED(IDC_BUTTON_RUN_COMP, OnButtonRunComp)

ON_BN_CLICKED(IDC_BUTTON_RUN_LEN, OnButtonRunLen)

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

// CTest3Dlg message handlers

BOOL CTest3Dlg::OnInitDialog()

{

CDialog::OnInitDialog();

// Add "About..." menu item to system menu.

// IDM_ABOUTBOX must be in the system command range.

ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);

ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);

if (pSysMenu != NULL)

{

CString strAboutMenu;

strAboutMenu.LoadString(IDS_ABOUTBOX);

if (!strAboutMenu.IsEmpty())

{

pSysMenu->AppendMenu(MF_SEPARATOR);

pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);

}

}

// Set the icon for this dialog. The framework does this automatically

// when the application's main window is not a dialog

SetIcon(m_hIcon, TRUE);// Set big icon

SetIcon(m_hIcon, FALSE);// Set small icon

// TODO: Add extra initialization here

return TRUE; // return TRUE unless you set the focus to a control

}

void CTest3Dlg::OnSysCommand(UINT nID, LPARAM lParam)

{

if ((nID & 0xFFF0) == IDM_ABOUTBOX)

{

CAboutDlg dlgAbout;

dlgAbout.DoModal();

}

else

{

CDialog::OnSysCommand(nID, lParam);

}

}

// If you add a minimize button to your dialog, you will need the code below

// to draw the icon. For MFC applications using the document/view model,

// this is automatically done for you by the framework.

void CTest3Dlg::OnPaint()

{

if (IsIconic())

{

CPaintDC dc(this); // device context for painting

SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

// Center icon in client rectangle

int cxIcon = GetSystemMetrics(SM_CXICON);

int cyIcon = GetSystemMetrics(SM_CYICON);

CRect rect;

GetClientRect(&rect);

int x = (rect.Width() - cxIcon + 1) / 2;

int y = (rect.Height() - cyIcon + 1) / 2;

// Draw the icon

dc.DrawIcon(x, y, m_hIcon);

}

else

{

CDialog::OnPaint();

}

}

// The system calls this to obtain the cursor to display while the user drags

// the minimized window.

HCURSOR CTest3Dlg::OnQueryDragIcon()

{

return (HCURSOR) m_hIcon;

}

void CTest3Dlg::OnButtonComp()

{

CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,NULL,NULL);

if( dlg.DoModal() != IDOK ) return;

m_Comp = dlg.GetPathName();

m_CompControl.SetSel(0,255);

m_CompControl.ReplaceSel(m_Comp);

}

void CTest3Dlg::OnButtonLength()

{

CFileDialog dlg(FALSE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_OVERWRITEPROMPT,NULL,NULL);

if( dlg.DoModal() != IDOK ) return;

m_Length = dlg.GetPathName();

m_LengthControl.SetSel(0,255);

m_LengthControl.ReplaceSel(m_Length);

}

void CTest3Dlg::OnButtonRunComp()

{

UpdateData();

if( m_Comp == "" ) { MessageBox("Введите имя файла ",MB_OKCANCEL | MB_ICONQUESTION); return; }

const MAX = 65536;

CString list[MAX];

int div = RAND_MAX/2+1;

if( m_Comp.Find("Creature",0)!=-1 ) {

CTime tm = CTime::GetCurrentTime();

srand(tm.GetTime());

for( int i=0; i<MAX; list[i++].Format("%d",rand()/div) );

CString tmp = m_Comp.Mid(9);

CStdioFile fileres(tmp,CFile::modeCreate | CFile::modeWrite);

for( i=0; i<MAX; tmp = list[i++], tmp += '\n', fileres.WriteString(tmp) );

fileres.Close();

return;

}

CStdioFile fileres;

//MessageBox("Test Before","Test");

fileres.Open(m_Comp,CFile::modeRead);

//MessageBox("Test After","Test");

for( int i=0; i<MAX; i++ )

fileres.ReadString(list[i]);

short *b, *a = new short[MAX];

for( i=0; i<MAX; i++ )

switch( list[i][0] ) {

case '0': a[i] = 0; break;

case '1': a[i] = 1; break;

default: return;

}

int c = 0,len = MAX,is1;

while( len != 1 ) {

len /= 2;

b = new short[len];

for( i=0, is1=0; i<len; i++ ) {

b[i] = a[i] ^ a[i+len];

is1 = is1 | (b[i] == 1);

}

if( is1 ) { a = b; c += len; };

}

c += a[0] == 1;

CString show;

show.Format("а вот и получи: %d",c);

MessageBox(show, "вот и результат :)",MB_OK | MB_ICONINFORMATION);

}

void CTest3Dlg::OnButtonRunLen()

{

short z[7][128]; //определили массив последовательности

short m=0; //максимальная длина последовательности

CString line;/* = GetCommandLine();

char upto;

if( line[0] == '\"' ) upto = '"';

else upto = ' ';

short len = line.GetLength();

for( int i=1; (i<len) && (line[i] != upto); i++ );

i++, i+= upto=='"';

CString arg = line.Mid(i);

MessageBox(arg,"test",MB_OKCANCEL | MB_ICONINFORMATION);*/

UpdateData();

if( m_Length == "" ) { MessageBox("Введите имя файла ",MB_OKCANCEL | MB_ICONQUESTION); return; }

CStdioFile fileres(m_Length,CFile::modeCreate | CFile::modeWrite);

for( short n=0; n<128; n++ )

{

line.Format("%3d: ",n);

fileres.WriteString(line);

for( short t=6,k = n; t>=0; t-- )

{

z[t][0] = k % 2; //остаток от деления на 2

k /= 2; //частное от деления на 2

} //получили начальное состояние

for( short i=1,s=0; i<128 && s!=7; i++ )

{

z[0][i] = !z[0][i-1] | z[1][i-1];

z[1][i] = (z[0][i-1] & z[1][i-1]) | !(z[0][i-1] | z[1][i-1] | z[2][i-1]);

z[2][i] = (!z[1][i-1] & (z[2][i-1] | !z[3][i-1])) | (z[1][i-1] & !z[2][i-1]);

z[3][i] = (z[2][i-1] & !z[4][i-1]) | (!z[3][i-1] & z[4][i-1]);

z[4][i] = (z[3][i-1] & z[5][i-1]) | (z[4][i-1] & !z[5][i-1]);

z[5][i] = (!z[4][i-1] & z[5][i-1]) | (z[4][i-1] & !z[6][i-1]);

z[6][i] = !z[6][i-1];

for( short j=0; j<i && s!=7; j++ )

{

for( t=0,s=0; t<7; s += z[t][i] == z[t][j], t++ );

if( s==7 ) {

line.Format("длина: %3d начало: %3d конец: %3d\n",i-j,j,i);

//write(" длина",(i-j));

//write(" начало",j);

//writeln(" конец",i);

fileres.WriteString(line);

if( (i-j) > m ) m = (i-j);

}

}

}

}

fileres.Close();

}

В.5. VHDL - модели модулей сигнатурного мониторинга, реализованных на ПЛИС ALTERA MAX 7000S.

В.5.1. Самопроверяемый многоканальный сигнатурный анализатор с порождающим многочленом

entity msa is

port (

clk: in BIT;

reset: in BIT;

x: in BIT_VECTOR (1 to 16);

o: buffer BIT_VECTOR (1 to 16);

a: out BIT;

b: out BIT

);

end msa;

--}} End of automatically maintained section

architecture msa of msa is

begin

-- <<enter your statements here>>

process (clk,reset)

variable v1,v2,v3,v4,v5:BIT;

begin

v1:=x(1) xor x(2) xor x(3) xor x(4) xor x(5) xor x(6) xor x(7) xor x(8)

xor x(9) xor x(10) xor x(11) xor x(12) xor x(13) xor x(14) xor x(15) xor x(16);

v2:=o(7) xor o(9) xor o(12) xor o(16);

v3:=x(1) xor v2;

v4:=o(1) xor o(2) xor o(3) xor o(4) xor o(5) xor o(6) xor

o(8) xor o(10) xor o(11) xor o(13) xor o(14) xor o(15);

if reset='0' then

o<=B"1111_0000_0000_0000";

b<='0';

else

if clk='1' and clk'event then

o(1) <= v3;

o(2) <=x(2) xor o(1);

o(3) <=x(3) xor o(2);

o(4) <=x(4) xor o(3);

o(5) <=x(5) xor o(4);

o(6) <=x(6) xor o(5);

o(7) <=x(7) xor o(6);

o(8) <=x(8) xor o(7);

o(9) <=x(9) xor o(8);

o(10)<=x(10) xor o(9);

o(11)<=x(11) xor o(10);

o(12)<=x(12) xor o(11);

o(13)<=x(13) xor o(12);

o(14)<=x(14) xor o(13);

o(15)<=x(15) xor o(14);

o(16)<=x(16) xor o(15);

b<=v4 xor v1;

end if;

end if;

end process;

process (x,o)

variable v1,v2,v3,v4,v5:BIT;

begin

v1:=x(1) xor x(2) xor x(3) xor x(4) xor x(5) xor x(6) xor x(7) xor x(8)

xor x(9) xor x(10) xor x(11) xor x(12) xor x(13) xor x(14) xor x(15) xor x(16);

v2:=o(7) xor o(9) xor o(12) xor o(16);

v3:=x(1) xor v2;

v4:=o(1) xor o(2) xor o(3) xor o(4) xor o(5) xor o(6) xor

o(8) xor o(10) xor o(11) xor o(13) xor o(14) xor o(15);

a<=v2 xor v4;

end process;

end msa;

В.5.2. Генератор последовательности де Брейна с порождающим многочленом .

entity deBrein3 is

port (

clk: in BIT;

reset: in BIT;

o: buffer BIT_VECTOR (1 to 16)

);

end deBrein3;

architecture deBrein3 of deBrein3 is

begin

-- <<enter your statements here>>

process (clk,reset)

variable v1,v2,v3,v4:BIT;

begin

if reset='0' then

o<=B"0000_0000_0000_0000";

else

if clk='1' and clk'event then

v1:=not(not o(1) and not o(3) and o(12));

v2:=(not o(2) and not o(4) and not o(5) and not o(6) and not o(7)

and not o(8) and not o(9) and not o(10) and not o(11)

and not o(13) and not o(14) and not o(15) and v1);

v3:=o(1) or v2;

v4:=o(3) xor o(12) xor o(16) xor v3;

o(1)<=v4;

o(2)<=o(1);

o(3)<=o(2);

o(4)<=o(3);

o(5)<=o(4);

o(6)<=o(5);

o(7)<=o(6);

o(8)<=o(7);

o(9)<=o(8);

o(10)<=o(9);

o(11)<=o(10);

o(12)<=o(11);

o(13)<=o(12);

o(14)<=o(13);

o(15)<=o(14);

o(16)<=o(15);

end if;

end if;

end process;

end deBrein3;

В.5.3. Генератор последовательности де Брейна с порождающим многочленом .

entity deBrein4 is

port (

clk: in BIT;

reset: in BIT;

o: buffer BIT_VECTOR (1 to 16)

);

end deBrein4;

--}} End of automatically maintained section

architecture deBrein4 of deBrein4 is

begin

-- <<enter your statements here>>

process (clk,reset)

variable v1,v2,v3,v4:BIT;

begin

if reset='0' then

o<=B"0000_0000_0000_0000";

else

if clk='1' and clk'event then

v1:=not(o(9) and not o(13));

v2:=(not o(1) and not o(2) and not o(3) and not o(4) and not o(5)

and not o(7) and not o(8) and not o(10) and not o(11)

and not o(12) and not o(14) and not o(15) and v1);

v3:=o(6) or v2;

v4:=o(9) xor o(13) xor o(16) xor v3;

o(1)<=v4;

o(2)<=o(1);

o(3)<=o(2);

o(4)<=o(3);

o(5)<=o(4);

o(6)<=o(5);

o(7)<=o(6);

o(8)<=o(7);

o(9)<=o(8);

o(10)<=o(9);

o(11)<=o(10);

o(12)<=o(11);

o(13)<=o(12);

o(14)<=o(13);

o(15)<=o(14);

o(16)<=o(15);

end if;

end if;

end process;

end deBrein4;

В.5.4. Генератор М - последовательности на основе клеточного автомата со следующими правилами: 90, 150, 90, 150, 90, 150, 90, 150, 90, 150, 90, 150.

entity cell12 is

port (

clk: in BIT;

reset: in BIT;

o: buffer BIT_VECTOR (1 to 12)

);

end cell12;

architecture cell12 of cell12 is

begin

process (clk,reset)

begin

if reset='0' then

o<=B"111111001100";

else

if clk='1' and clk'event then

o(1)<='0' xor o(2);

o(2)<=o(1) xor o(2) xor o(3);

o(3)<=o(2) xor o(4);

o(4)<=o(3) xor o(4) xor o(5);

o(5)<=o(4) xor o(6);

o(6)<=o(5) xor o(6) xor o(7);

o(7)<=o(6) xor o(8);

o(8)<=o(7) xor o(8) xor o(9);

o(9)<=o(8) xor o(10);

o(10)<=o(9) xor o(10) xor o(11);

o(11)<=o(10) xor o(12);

o(12)<=o(11) xor o(12) xor '0';

end if;

end if;

end process;

end cell12;

В.5.5. Генератор М - последовательности на основе клеточного автомата со следующими правилами: 150, 150, 90, 150, 90, 150, 90, 150, 90, 150, 90, 150, 90, 150, 90, 150.

entity cell16 is

port (

clk: in BIT;

reset: in BIT;

o: buffer BIT_VECTOR (1 to 16)

);

end cell16;

architecture cell16 of cell16 is

begin

-- <<enter your statements here>>

process (clk,reset)

begin

if reset='0' then

o<=B"1111_1100_1100_1111";

else

if clk='1' and clk'event then

o(1)<= '0' xor o(1) xor o(2);

o(2)<= o(1) xor o(2) xor o(3);

o(3)<= o(2) xor o(4);

o(4)<= o(3) xor o(4) xor o(5);

o(5)<= o(4) xor o(6);

o(6)<= o(5) xor o(6) xor o(7);

o(7)<= o(6) xor o(8);

o(8)<= o(7) xor o(8) xor o(9);

o(9)<= o(8) xor o(10);

o(10)<=o(9) xor o(10) xor o(11);

o(11)<=o(10) xor o(12);

o(12)<=o(11) xor o(12) xor o(13);

o(13)<=o(12) xor o(14);

o(14)<=o(13) xor o(14) xor o(15);

o(15)<=o(14) xor o(16);

o(16)<=o(15) xor o(16) xor '0';

end if;

end if;

end process;

end cell16;

ПРИЛОЖЕНИЕ Г

Функции обратной связи СРНОС степени 16 для получения последовательностей де Брейна и оценка их сложности.

№ п/п

Примитивный многочлен

Функция обратной связи для получения последовательностей де Брейна.

Сложность c(s).

1.

65533

2.

65535

3.

655535

4.

655534

5.

65533

6.

65533

7.

65535

8.

65535

9.

65535

10.

65535

11.

65535

12.

65533

13.

65533

14.

65535

15.

65535

16.

65535

17.

65535

18.

65534

19.

65535

20.

65535

21.

65534

22.

65532

23.

65534

24.

65535

Размещено на http://www.allbest.ru

ПРИЛОЖЕНИЕ Д

Документы, подтверждающие внедрение результатов диссертации.

УТВЕРЖДАЮ

Главный инженер Института сцинтиляционных

материалов НАН Украины

_________________________ Бородавка Ю.П.

АКТ

внедрения результатов диссертационной работы Темникова Игоря Николаевича

Комиссия в составе: председатель комиссии - ст. научный сотрудник ИСМА, к.т.н. Звягинцев В.Н.; члены комиссии: ст. научный сотрудник ИСМА Епифанов Ю.М., ст. научный сотрудник Герасимчук Л.И. констатирует, что результаты диссертационной работы Темникова И.Н. использованы при выполнении поисковой темы «ТЕМП» НАН Украины № гос. рег. 0103U003476 (24.03.2003 - 21.12.2003) «Разработка новой системы и алгоритмов автоматизированного управления выращиванием крупногабаритных монокристаллов», которая выполнялась в ИСМА с участием Харьковского Национального технического университета «ХПИ».

При разработке программно - аппаратных средств и алгоритмов управления процессом выращивания кристаллов использовались следующие результаты исследований, представленные в диссертационной работе аспиранта И.Н. Темникова:

генераторы тестовых последовательностей на сдвиговых регистрах с линейными и нелинейными обратными связями;

модули сигнатурного мониторинга для функционального диагностирования микроконтроллерных управляющих устройств;

схемные реализации многоканальных самопроверяемых сигнатурных анализаторов на ПЛИС ALTERA MAX 7000S.

Результаты опытной эксплуатации разработанных модулей сигнатурного мониторинга показали, что использование их в составе диагностического обеспечения систем управления технологическим процессом позволило сократить время ремонта, отладки и технического обслуживания сложной системы, повысить качество выращиваемых кристаллов.

Председатель комиссии:с.н.с. Звягинцев В.Н.

Члены комиссии:с.н.с. Епифанов Ю.Н.

с.н.с. Герасимчук Л.И.

УТВЕРЖДАЮ

Технический директор АО Хартрон, к.т.н.

_________________________ В.В. Новиков

АКТ

14 апреля 2004 г.

о внедрении результатов диссертационной работы Темникова Игоря Николаевича.

Комиссия в составе:

Председатель комиссии:Бутенко И.Н. - начальник центра координации работ

Члены комиссии:Бурьян А.Н. - главный специалист

Сирук В.А. - главный специалист

В период с 12 по 14 апреля 2004 года комиссия провела работу по определению внедрения в опытно - конструкторских работах ОАО ХАРТРОН результатов диссертационной работы И.Н. Темникова, представленной на соискание ученой степени кандидата технических наук.

Комиссией установлено, что при разработке исполнительного автомата управления приводом ШЭМ - М системы управления и защиты реакторной установки, которые выполнялись на ОАО ХАРТРОН, использовались разработанные И.Н. Темниковым методы синтеза и проектирования модулей генераторов и сигнатурно - синдромных анализаторов в качестве встроенных средств псевдоисчерпывающего тестирования блоков исполнительного автомата.

Реализация этих модулей на программируемых логических интегральных схемах позволила повысить качество технического обслуживания блоков автомата управления, исключить дорогостоящие процедуры генерации детерминированных тестов и моделирования неисправностей, сократить время проверки работоспособности.

Председатель комиссии:Бутенко И.Н.

Члены комиссии:Бурьян А.Н.

Сирук В.А.

УТВЕРЖДАЮ

Проректор по учебной работе

Украинской Государственной Академии

Железнодорожного транспорта

_________________________ доц. Писаревский И.М.

СПРАВКА

05 февраля 2004 г.

г. Харьков

О внедрении программных средств синтеза модулей сигнатурного

мониторинга в учебный процесс УкрГАЖТ

В период с 02 по 05 февраля 2004 года была проведена работа по определению внедрения в учебный процесс аппаратно - программных методов синтеза модулей сигнатурного мониторинга, разработанных на кафедре автоматики и управления в технических системах Харьковского Национального технического университета «ХПИ» при непосредственном участии аспиранта Темникова И.Н.

Установлено, что методы синтеза позволяют проектировать на ПЛИС модули сигнатурного мониторинга:

генераторы псевдоисчерпывающих тестов и сигнатурные анализаторы для проверки исправности (n,m,k) схем широкой номенклатуры;

легко тестируемые управляющие модули с реконфигурируемой структурой;

генераторы М - последовательностей на основе сети клеточных автоматов.

Программные средства для проектирования и моделирования вышеуказанных модулей имеют все атрибуты программных продуктов, представленных на языке VHDL.

Разработанные аппаратно - программные средства используются для подготовки студентов в курсах «Электроника и микросхемотехника», «Надежность систем железнодорожной автоматики», в курсовом и дипломном проектировании.

Зав. кафедрой автоматики и д.т.н., проф.Загарий Г.И.

компьютерных систем управления

1. Размещено на www.allbest.ru


Подобные документы

  • Основные понятия теории клеточных автоматов, анализ программных и аппаратных реализаций. Разработка методов синтеза и логического проектирования модулей сигнатурного мониторинга. Программа моделирования сетей клеточных автоматов на языке Delphi.

    дипломная работа [1,9 M], добавлен 06.06.2011

  • Основные понятия теории клеточных автоматов. Анализ подходов встроенного самотестирования цифровых схем. Модули сигнатурного мониторинга на сетях клеточных автоматов. Программа моделирования одномерной сети клеточных автоматов на языке Borland Delphi.

    дипломная работа [1,9 M], добавлен 31.08.2011

  • Минимизация булевых функций. Исследование алгоритмов синтеза цифровых устройств систем автоматического управления. Разработка программного обеспечения для реализации оптимального метода синтеза. Проект цифрового устройства статистического мажорирования.

    отчет по практике [3,9 M], добавлен 28.04.2015

  • Функциональная и принципиальная схема для арифметико-логического устройства, выполненного в виде печатной платы. Параметры используемой серии логических элементов. Составление минимизированного логического выражения для формирования выходного сигнала.

    курсовая работа [521,0 K], добавлен 15.01.2011

  • Обзор существующих технологий мониторинга в телекоммуникациях. Общая характеристика кабельной системы ОАО "Хабровскэнерго", фрагмента телефонной сети и передачи данных. Выбор решения для мониторинга сети и разработка нужного программного обеспечения.

    дипломная работа [512,8 K], добавлен 25.09.2014

  • Сфера использования широкополосных трансформаторов сопротивлений и устройств, выполненных на их основе. Модели высокочастотных широкополосных трансформаторов. Устройства на идентичных двухпроводных линиях. Исследование оптимального варианта ТДЛ.

    дипломная работа [3,3 M], добавлен 02.01.2011

  • Проектирование синхронного счетчика с четырьмя выходами, циклически изменяющего свои состояния. Решение задач логического синтеза узлов и блоков цифровых ЭВМ. Разработка структурной, функциональной и электрической принципиальной схем заданного устройства.

    контрольная работа [500,9 K], добавлен 19.01.2014

  • Выбор и обоснование основных технических решений микроконтроллера. Разработка алгоритма рабочей программы. Расчет потребляемой мощности и определение требований к источникам питания. Описание модулей программы и ее отдельных функциональных модулей.

    курсовая работа [210,3 K], добавлен 25.11.2013

  • Решение задачи синтеза корректирующего устройства при коррекции систем управления. Передаточная функция интегрирующей цепи. Методы синтеза последовательных корректирующих устройств и их классификация. Их логарифмические частотные характеристики.

    контрольная работа [66,9 K], добавлен 13.08.2009

  • Синхронный дискретный автомат Мура как прототип проектируемого электронного автомата с заданными входными сигналами и контролируемыми параметрами. Разработка схемы дискретного автомата. Выбор элементной базы. Разработка устройств сопряжения по входу.

    курсовая работа [958,4 K], добавлен 29.07.2009

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.