Разработка методов синтеза и логического проектирования модулей сигнатурного мониторинга
Разработка и совершенствование моделей синтеза и логического проектирования унифицированных модулей сигнатурного мониторинга для повышения эффективности тестового и функционального диагностирования микроконтроллерных устройств управления на их частоте.
Рубрика | Коммуникации, связь, цифровые приборы и радиоэлектроника |
Вид | диссертация |
Язык | русский |
Дата добавления | 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