内容在下面及其附件中,大家帮忙出出主意,有朝一日来武汉的时候,我请你吃周黑鸭
呵呵
模拟数字电路(复赛)
一、 题目背景
在数字电路中,人们使用各种数字电子器件来实现逻辑运算(即布尔代数),以实现各种逻辑控制功能。
我们将设计一个简单的模拟器来实现对基本的数字电子器件组合成的电路进行仿真。对一个基本器件,如与门(见表格 1‑1 ),当输入端A、B为高电平(相当于1),输出端C的电平就为C=A*B=1;若A、B有任意一个为低电平(相当于0),则输出C为0。当输入波形随时间变化时,输出端电平也会变化。
若需了解更多,可参考数字电路相关书籍。
二、 程序功能说明
我们将需要模拟至多由6种基本器件(见表格 1‑1)组成的数字电路的功能。这些器件组合成一个m输入,n输出的组合逻辑电路。要求对电路的输入输出波形图以文本形式描述出来。取1us为一个最小单位时间,对时间描述均以此为单位,在文档和代码中可以省略。
1、 程序输入说明
程序输入为input.txt和map.txt。
input.txt内容如下(示例):
# 以“#”号开始的行是注释 # 本文件描述逻辑电路的输入波形 Input # 0(500), 0表示低电平,500表示持续时间500us system.input1:0(500),1(400),0(100) system.input2:1(100),0(300),1(600) system.input3:1(300),0(400),1(300) EndInput |
该文件描述的波形可用图 1 表示:
图 1 示例波形
map.txt内容如下(示例):
# 以“#”号开始的行是注释 # 本文件描述逻辑电路用到的器件和连接方式 # 逻辑电路的器件 # 每个器件有两个属性,input和output,input属性可以有多个,output只有一个 # AND为器件类型,and1为名称 Element AND:and1 OR:or1 EndElement # 逻辑电路的连接图 # system表示整个系统 # system.input 是系统的外部输入 # system.output 是系统的输出 Map # 系统输入,将指定波形输入到器件管脚上 Input:system.input1,or1.input1 Input:system.input2,or1.input2 Input:system.input3,and1.input2 # 系统输出,将器件模拟波形输出到系统输出 # 单个器件的输出仅有一个,为 器件名称.output Output:or1.output,system.output1 Output:and1.output,system.output2 # 器件间的连接关系,前面一个是一个器件的输出,后面的是另一个器件的输入 Connect:or1.output,and1.input1 EndMap |
图 2示例器件连接图
2、 程序输出说明
按照如下格式生成输出波形描述文件output.txt,其内容如下(示例):
# 以“#”号开始的行是注释 # 本文件描述逻辑电路的输出波形 # Delay:yes 实现了延时功能 # Delay:no 未实现延时功能 #输出时必需合并相同的相邻电平比如system.output1:1(50),1(30)不合法 #必需输出为 system.output1:1(80) Delay:yes Output system.output1:0(10),1(100),0(300),1(590) system.output2:0(20),1(100),0(590),1(290) EndOutput |
以下几点请注意:
Ø 评分时输入文件由评委组提供,与示例文件内容不同,但格式相同。
Ø 各输入管脚波形时间总和相同,输出时间也应与输入管脚波形时间总和相同。
Ø 输出文件不需要包含注释。
Ø 初始状态下所有的管脚为0,即低电平。
3、 器件延时
器件延时ts(单位us):实际器件中,输出对输入的响应会有一定延时。假设输出端和输入端均为高电平,在t0时刻以输入端变为低时,则根据器件逻辑功能表达式输出应该为低,但由于输出与输入间延时,在t0+ts时刻输出才变为低电平。这也是仿真中重要的一步,可以用波形图描述如下
图 3器件延时 示意图
三、 程序要求
1、 基本运行要求
程序名为Simulator.exe(Windows)、Simulator(非Windows),使用的编程语言限于C、C++、Java、C#、VB,以命令行方式运行。
接受以下命令:Simulator [input file] [map file] [output file]
如果有图形输出:Simulator [input file] [map file] [output file] [BMP file]
读入输入波形文件[input file] 和器件连接关系描述文件[map file]。将输出波形以指定的格式保存在[output file]和[BMP file]([BMP file]的格式参考图 1)。
[input file] [map file] [output file]必需为文本格式。
[BMP file]要求为BMP格式。
2、 功能要求
能够对复杂器件连成的电路进行仿真并得出正确的结果。考虑到延时的难度比较大,可以以下两种方式中的一种来实现:
A. 考虑延时,按照表 1‑1中各器件的延时实现延时功能
B. 不考虑延时,即所有器件的延时为0
对于采用B方式来实现程序功能的,我们会将程序功能的分数乘一个难度系数N(小于1,A方式的难度系数为1)。
每个队只需提交以上两种实现的一种的一份作品,提交两个者选得分低的。
3、 附加要求
以图形方式描述输出波形(提供读写BMP C语言接口)。该项要求亦可不使用提供接口。
四、 评分标准
测试将采用黑盒测试,会使用多个测试用例进行测试(其中六个测试用例为六种分立器件),将测试程序的输出与正确输出进行比较,如果输出波形相同则可以获得该测试用例的分数。
程序功能 |
80 |
代码规范 |
10 |
文档 |
10 |
附加功能(画图) |
5 |
测试时将直接考察[output file]的正确性,并且请特别注意格式,包括大小写,空格等。格式错误导致无法正常自动测试者将手工评分,并且该测试用例得分需乘以0.5作为最终得分。
五、 基本器件说明
数字电路中使用以下器件来实现布尔运算:*表示与运算,+表示或运算,~表示非运算。
逻辑表达式:描述了输出与输入的逻辑运算关系。
图形:描述了器件的输入输出管脚号以及相应在逻辑表达式中的表示。
表 1‑1基本器件说明表
器件名称 |
类型 |
器件延时(us) |
逻辑表达式 |
图形 |
真值表 |
|||
与门 |
AND |
10 |
C = A*B |
|
输入 |
输出 |
||
A |
B |
C |
||||||
0 |
0 |
0 |
||||||
0 |
1 |
0 |
||||||
1 |
0 |
0 |
||||||
1 |
1 |
1 |
||||||
或门 |
OR |
10 |
C = A + B |
|
输入 |
输出 |
||
A |
B |
C |
||||||
0 |
0 |
0 |
||||||
0 |
1 |
1 |
||||||
1 |
0 |
1 |
||||||
1 |
1 |
1 |
||||||
非门 |
NOT |
5 |
B = ~A |
|
输入 |
输出 |
||
A |
B |
|||||||
0 |
1 |
|||||||
1 |
0 |
|||||||
与非门 |
NAND |
15 |
C = ~(A*B) |
|
输入 |
输出 |
||
A |
B |
C |
||||||
0 |
0 |
1 |
||||||
0 |
1 |
1 |
||||||
1 |
0 |
1 |
||||||
1 |
1 |
0 |
||||||
异或门 |
XOR |
20 |
C =( ~A)*B + A*(~B) |
|
输入 |
输出 |
||
A |
B |
C |
||||||
0 |
0 |
0 |
||||||
0 |
1 |
1 |
||||||
1 |
0 |
1 |
||||||
1 |
1 |
0 |
||||||
同或门 |
NXOR |
20 |
C = A*B +( ~A)* (~B) |
|
输入 |
输出 |
||
A |
B |
C |
||||||
0 |
0 |
1 |
||||||
0 |
1 |
0 |
||||||
1 |
0 |
0 |
||||||
1 |
1 |
1 |
||||||
六、 作品提交
试题提交邮箱为:seedcup2008@gmail.com
邮件主题命名方式:复赛提交-队名-年级
要求将完整的工程和工程文档打包提交,压缩包命名规则为:队名.rar(zip),提交的目录格式如下:
─[Team Name]
├─源代码及工程文件
├─文档
└─报名表
文档中需要包含:
1、 程序的编译环境说明
2、 程序使用方法,测试方法(需要测试数据的附带你的测试数据)
3、 算法原理
4、 程序的模块图及各模块的功能说明
5、 对题目功能要求的完成情况,可以列举自己程序中觉得设计良好的部分,并说明为什么好
6、 你认为必要的附加信息,以方便评委了解你的想法