模拟电路论文作业程序实现隐含表.docx
- 文档编号:6242421
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:13
- 大小:18.77KB
模拟电路论文作业程序实现隐含表.docx
《模拟电路论文作业程序实现隐含表.docx》由会员分享,可在线阅读,更多相关《模拟电路论文作业程序实现隐含表.docx(13页珍藏版)》请在冰豆网上搜索。
模拟电路论文作业程序实现隐含表
UCD编号:
北京交通大学
数字电路研究性教学论文
程序实现隐含表
本科生姓名:
王宇航09283020
指导教师姓名:
路勇
学科、专业名称:
计算机学院、信息安全专业
二零一零年十二月
AStudyofBeijingJiaotongUniversity’sTranslations
AResearchTeachingofDigitElectricCircuitThesis
AThesis:
Applicationimplementationsuppresstable
UndergraduateStudent:
YuHangWangSupervisor:
YongLu
AcademicTitle:
ComputerScience
December2010
内容摘要:
本文论述了用C语言描述隐含表来实现等效的判断以实现对完全给定同步时序电路的原始状态表进行化简。
Contentsummary:
ThisarticlediscussesusingClanguagedescribesimpliedtabletoachieveequivalentjudgmenttoenablefullygivensynchronoussequentialcircuitsoftheoriginalstatetableforsimplification.
关键词:
隐含表、同步时序电路、C语言程序、原始状态表
引言:
对简单的状态转换表可以采用观察法化简,但好似对比较复杂的状态转换表应当采用隐含表法进行化简。
隐含表法是一种比较传统的方法,更适合于编程实现。
在计算机高速发展的今天,硬件设计越来越复杂,例如从简单的机电产品设计到巨型计算机以至于智能机器人的制造,使其在各方面的应用越来越广泛。
在同步时序电路设计中要求对原始状态表进行化简,以实现电路设计最简,成本最低,人工的方法费时费力并且在状态数很大时很难化简。
本文给出一种用程序化简的方法不但可以适合状态数较大的情况,而且使化简的效率大大地提高提高了工作效率。
正文:
本文是用C语言程序将完全给定的同步时序电路的原始状态表转化为隐含表,一直按隐含表法的解题步骤对隐含表进行化简。
现将根据所给定的完全状态表做出隐含表,然后顺序比较隐含表中所有的状态,将比较结果填入相应的位置上。
比较结果分三种情况。
①第一种是两个状态不等价(输出不同,即不等效),相应的格填1;②第二种是两个状态等价(输出相同,即等效),相应的格填2;③第三种情况是状态是否等价取决于是否满足隐含条件(输出相同,状态不全部相同且不交错,即不一定等效。
)第三种情况出现时系统会进一步对它进行比较,直到查明待查状态等效或不等效为止。
本程序从原始状态表出发,根据隐含表法的步骤,完成做出隐含表,顺序比较隐含表,关联比较的步骤,以确定状态之间的等效关系。
具体过程如下:
⑴定义数据结构——使用结构体structotuint保存原始状态表中的数据结构体中的status单元保存状态,effect单元保存输出结果。
使用结构体structhtuint保存隐含表中的数据,结构体中的flag单元的内容作为标记,用来判断是否等效当为1时不等效,为2时等效;为3时看后继状态是否等效,并用链表保存后继状态。
⑵建立原始状态表——本文通过createtable()函数建立原始状态表。
在函数中要求从键盘输入一个存放原始状态表数据文件的文件名,对文件内容的要求是第一个数据为状态数;第二个数据为输入变量数;接着是一个状态;一个输出间隔出现;数据之间用空格。
用循环语句将文件中的数据取出保存在otable数组中。
⑶建立隐含表——通过chtable()函数建立隐含表,在函数中对otable数组中的数据进行扫描,确定hidetable数组中的数据,当输出不同时hidetable[i][j].flag1赋于表示不等效;当输出相同,状态相同或交错时hidetable[i][j].flag2赋于表示等效;当输出相同,状态不同且不交错,hidetable[i][j].flag3赋于等待判断。
(4)进行比较——通过函数对隐含表进行关联比较,如果出现第一或二种情况直接把状态填入相应的位置。
当出现第三种情况的时候继状态进行处理,按上述继续对第三种情况继续进行关联比较,直到确定状态之间的等效关系。
例如:
一下例题中所给的状态转换表,利用隐含表法的思路对他进行化简体现做隐含表,顺序比较以及关联比较的步骤。
原始状态表
X1X2
Sn
00
01
11
10
A
B
C
D
E
F
G
H
D/0
C/1
C/1
D/0
C/1
D/0
G/0
B/1
D/0
D/0
D/0
B/0
F/0
D/0
G/0
D/0
F/0
E/1
E/1
A/0
E/1
A/0
A/0
E/1
A/0
F/0
A/0
F/0
A/0
F/0
A/0
A/0
B
C
D
E
F
G
H
(a)隐含表
ABCDEFG
(b)顺序比较
B
C
D
E
F
G
H
X
X
AF
BD/AF
X
X
X
DF/AF
DF
X
√
X
X
BD
X
BD/AF
X
X
BG/AF
X
DG/AF
X
BC/AF
BC
X
BC/DF
X
X
ABCDEFG
(c)关联比较
B
C
D
E
F
G
H
X
X
AF
BD/AF/X
X
X
X
DF/AF/X
DF/X
X
√
X
X
BD/X
X
DG/AF/X
X
X
BG/AF/X
X
DG/AF/X
X
BC/AF
BC
X
BC/DF/X
X
X
ABCDEFG
最简状态转换表
X1X2
Sn
00
01
11
10
A
B
D
E
G
D/0
B1
D0
B1
G0
D0
D0
B0
A0
G0
A0
E1
A0
E1
A0
A0
A0
A0
A0
A0
Sn+1
具体程序如下:
#include"math.h"
#include"stdlib.h"
#include"stdio.h"
#include"ctype.h"
#defineNULL0
structotunit
{
charstatus;
inteffect;
};
structcstatus
{
charchrow;
charchcol;
structcstatus*next;
};
structhtunit
{
intflag;
structcstatus*head;
};
intvn,sn;
structotunitotable[30][30];
structhtunithidetable[30][30]
main()
{
createtable();
chtable();
comparehtable();
outputtable();
}
createtable()
{
FILE*fp;
inti,j,number1,number2;
charch[4],str[20];
printf("pleaseinputafilename:
");
scanf("%s",str);
if((fp=fopen(str,"r"))==NULL)
{
printf("filecan'topenfile");
exit(0);
}
fscanf(fp,"%d%d",&sn,&vn);
for(i=1;i<=sn;i++)
for(j=1;j<=exp(vn*log
(2))+1;j++)
{
fscanf(fp,"%s%d",ch,&number2);
otable[i][j].status=toupper(ch[0]);
otable[i][j].effect=number2;
}
fclose(fp);
}
chtable()
{
inti,j,m,flag,flag1;
structcstatus*new,*p;
for(i=2;i<=sn;i++)
for(j=1;j<=i-1;j++)
{
flag=0;
hidetable[i][j].head=NULL;
for(m=1;m<=exp(vn*log
(2))+1;m++)
if(otable[i][m].effect!
=otable[j][m].
effect)flag=1;
if(flag==1)hidetable[i][j].flag=1;
else
{
flag=0;
for(m=1;m<=exp(vn*log
(2))+1;m++)
if(otable[i][m].status!
=otable[j][m].status)
{
flag=1;
flag1=0;
p=hidetable[i][j].head;
while(p!
=NULL)
{
if(p->chrow==otable[i][m].status&&p->chcol==otable[j][m].status||p->chrow==otable[j][m].status&&p->chcol==otable[i][m].status)
flag1=1;
p=p->next;
}
if(flag1==0)
{
new=(structcstatus*)malloc(sizeof(structcstatus));
new->chrow=otable[i][m].status;
new->chcol=otable[j][m].status;
new->next=NULL;
if(hidetable[i][j].head==NULL)
hidetable[i][j].head=new;
else
{
p=hidetable[i][j].head;
while(p->next!
=NULL)
p=p->next;
p->next=new;
}
}
}
if(flag==0)hidetable[i][j].flag=2;
elsehidetable[i][j].flag=3;
}
}
}
comparehtable()
{
inti,j,n,l,t,flag,flag1;
structcstatus*p,*q,*m,*head,*new;
for(i=2;i<=sn;i++)
for(j=1;j<=i-1;j++)
if(hidetable[i][j].flag==3)
{
p=hidetable[i][j].head;
q=p;n=0;
while(p!
=NULL)
{
n=n+1;flag=0;
if(p->chrow==i+64&&p->chcol==j+64||p->chrow==j+64&&p->chcol==i+64)
{
flag=1;
if(n==1&&p->next==NULL)
{
hidetable[i][j].flag=2;
m=p;
p=p->next;
}
else
{
if(n==1)
{
m=p;
p=p->next;
hidetable[i][j].head=p;
}
else
{
m=p;q->next=p->next;
p=q->next;
}
free(m);
}
}
if(flag==0)
q=p;
p=p->next;
}
}
flag1=0;
while(flag1==0)
{
flag1=1;
for(i=2;i<=sn;i++)
for(j=1;j<=i-1;j++)
if(hidetable[i][j].flag==3)
{
p=hidetable[i][j].head;
q=p;
flag=0;
while(p!
=NULL)
{
l=p->chrow-64;
n=p->chcol-64;
flag=flag++;
if(l { t=l;l=n;n=t; } if(hidetable[l][n].flag==1) { hidetable[i][j].flag=1;p=NULL; } else { if(hidetable[l][n].flag==2) { if(flag==1&&p->next==NULL) { hidetable[i][j].flag=2; p=NULL; } else { if(flag==1) { hidetable[i][j]. head=p->next; m=p; p=p->next; } else { m=p;q->next=p->next; p=p->next;} free(m); } } else { if(hidetable[l][n].flag==3&&flag==1) p=p->next; else { q=p; p=p->next; } flag1=0; } } } } } } outputtable() { inti,j; structcstatus*p; for(i=2;i<=sn;i++) for(j=1;j<=i-1;j++) { printf("%d",hidetable[i][j].flag); if(hidetable[i][j].flag==3) { p=hidetable[i][j].head; while(p! =NULL) { printf("%c%c",p->chrow,p->chcol); p=p->next; } } } } 参考文献: 北京交通大学图书馆数据库 清华大学图书馆数据库 XX文库 C语言程序设计·谭浩强著 数字电子技术基础·侯建军主编·高等教育出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 模拟 电路 论文 作业 程序 实现 隐含
![提示](https://static.bdocx.com/images/bang_tan.gif)