3.3 在VIPLE中创建计算机系统部件
在本节中,你将创建代表与门的活动,以及其他用来建立ALU的组件。
3.3.1 创建逻辑与门
创建一个新的项目并保存为“ALU_Simulation”。
1)插入一个活动并命名为“GateAND”,如下图所示。请基于逻辑真值表(机械模型)来实现这个逻辑门。
2)定义输入,双击Action按钮然后点击下图所示的橙色按钮。
3)对于一个与门,你需要定义两个输入值,如下图所示。
确保两个输入变量都是Integer类型。
4)将一个如果/否则活动添加到框图里。创建4个不同的条件来匹配每个可能的结果。添加两个数据活动,每个数据活动代表一个可能的结果,1或者0。然后拖放两个或并活动,并如下图所示连接每个活动。
为了测试你自己设计的活动的正确性,在“diagram”窗口中,添加所需的“data”输入并在输出上添加一个“Print Line”,用以查看活动的输出。运行程序并查看你的活动在所有基于真值表的输入组合情况下是否正确。
在你的测试中尝试不同的数据输入:0 0、01、10和1 1,如下图所示。
完成实验后请通知你的实验指导老师验收你的程序,然后换一个操作员进行下一个实验任务。
创建逻辑或门和创建逻辑非门及异或门的步骤与创建与门类似,故不再赘述。
3.3.2 创建一个1位全加器
在本节中,你会创建一个代表1位全加器的活动。下图给出了逻辑电路。请根据给出的框图并使用之前作业中创建的活动和服务来实现这个活动。
重要提示:绘图时应从左至右进行,一旦在设计中给出了连接的双方,就可以绘制双方的链接。这样可以保证活动和服务间的关系正确。如果从右到左绘图,将会出现许多错误。从理论上讲,一旦连接好所有的组件,上述错误将会消失。但在实践中,开发环境可能无法同时消除所有的错误。
为了测试自行设计活动的正确性,在“diagram”窗口中,添加所需的“数据”活动作为输入,并为每个活动添加一个“简单对话框”服务作为输出。运行程序并测试该活动正确与否。
将OneBitAdder活动导出成一个服务并测试这个服务。
3.3.3 创建一个2-1多路选择器
一个2-1多路选择器的数学模型(真值表的简写形式)在下图中给出。2-1多路选择器是4-1多路选择器的简单版本。你可以用之前实验创建的活动和服务。
3.3.4 创建一个4-1多路选择器
在接下来的两个练习中,将添加一个4-1多路选择器活动或者服务到项目中。4-1多路选择器的数学模型如下图所示。
你的4-1多路选择器应如下图所示。
为了测试设计的活动的正确性,在“diagram”窗口中给每个设计的活动添加所需数量的“数据”活动作为输入,并且添加一个“简单对话框”服务作为输出。运行该程序,看看设计的活动是否正确。
3.3.5 创建一个1位ALU
在构建这个ALU之前,它所需的所有的服务已经创建了,它们完成四个不同的功能:与、或、加和减。
给这个逻辑设计VIPLE程序,一个示范代码如下图所示。但是实验者仍然需要根据活动和服务的名字编写代码,还需要定义部件之间数据连接的值。下图中的数值可能有不同的名字。
1位ALU设计完成以后,添加输入数据和输出服务来测试这个ALU,如下图所示。测试方法和1位全加器类似,但是需要给op0、op1和op2添加3个额外的输入数据。
3.3.6 自动测试
在前面的实验中,你需要手动修改输入数据以采用不同的输入值来进行测试。在本练习中,你会构建基于Counter活动的一个自动测试样本生成机制。十进制输出被映射成了二进制数,用来作为全加器的测试样本。
首先我们需要将Counter的十进制数转成二进制数。下图给出了我们需要做的转换。
下图中的VIPLE代码大致给出了一个自动测试机制的基本实现。你仍需要实现Counter活动,它有两个输入参数:最小值和最大值。
下图给出了Counter活动。
下图给出了带真值表数值输出的OneBitAdder活动。
由于并行计算的特性,测试样本的生成是乱序的。保持并行线程之间的同步是有难度的。我们现在不解决这个问题,在分布式软件开发中,我们会花大量时间来解决线程监控和同步的问题。