文档库 最新最全的文档下载
当前位置:文档库 › MIPS流水线CPU的verilog实现

MIPS流水线CPU的verilog实现

MIPS流水线CPU的verilog实现
MIPS流水线CPU的verilog实现

一、实验目的

1.了解提高CPU性能的方法。

2.掌握流水线MIPS微处理器的工作原理。

3.理解数据冒险、控制冒险的概念以及流水线冲突的解决方法。

4.掌握流水线MIPS微处理器的测试方法。

二、实验任务

设计一个32位流水线MIPS微处理器,具体要求如下:

1.至少运行下列MIPS32指令。

(1)算术运算指令:ADD、ADDU、SUB、SUBU、ADDI、ADDIU。

(2)逻辑运算指令:AND、OR、NOR、XOR、ANDI、ORI、XORI、SLT、SLTU、SLTI、SLTIU。

(3)移位指令:SLL、SLLV、SRL、SRLV、SRA。

(4)条件分支指令:BEQ、BNE、BGEZ、BGTZ、BLEZ、BLTZ。

(5)无条件跳转指令:J、JR。

(6)数据传送指令:LW、SW。

(7)空指令:NOP。

2.采用5级流水线技术,对数据冒险实现转发或阻塞功能。

3.在XUP Virtex-Ⅱ Pro 开发系统中实现MIPS微处理器,要求CPU的运行速度大于

25MHz。

三、实验原理

1.总体设计

流水线是数字系统中一种提高系统稳定性和工作速度的方法,广泛应用于高档CPU的架构中。根据MIPS处理器的特点,将整体的处理过程分为取指令(IF)、指令译码(ID)、执行(EX)、存储器访问(MEM)和寄存器会写(WB)五级,对应多周期的五个处理阶段。如图3.1所示,一个指令的执行需要5个时钟周期,每个时钟周期的上升沿来临时,此指令所代表的一系列数据和控制信息将转移到下一级处理。

图3.1 流水线流水作业示意图

由于在流水线中,数据和控制信息将在时钟周期的上升沿转移到下一级,所以规定流水线转移变量命名遵守如下格式:

名称_流水线级名称

例如:在ID级指令译码电路(Decode)产生的寄存器写允许信号RegWrite在ID级、

EX级、MEM级和WB级上的命名分别为RegWrite_id、RegWrite_ex、RegWrite_mem和RegWrite_wb。在顶层文件中,类似的变量名称有近百个,这样的命名方式起到了很好的识别作用。

1)流水线中的控制信号

(1)IF级:取指令级。从ROM中读取指令,并在下一个时钟沿到来时把指令送到ID 级的指令缓冲器中。该级控制信号决定下一个指令指针的PCSource信号、阻塞流水线的PC_IFwrite信号、清空流水线的IF_flush信号。

(2)ID级:指令译码器。对IF级来的指令进行译码,并产生相应的控制信号。整个CPU的控制信号基本都是在这级上产生。该级自身不需任何控制信号。

流水线冒险检测也在该级进行,冒险检测电路需要上一条指令的MemRead,即在检测到冒险条件成立时,冒险检测电路产生stall信号清空ID/EX寄存器,插入一个流水线气泡。

(3)EX级:执行级。该级进行算术或逻辑操作。此外LW、SW指令所用的RAM访问地址也是在本级上实现。控制信号有ALUCode、ALUSrcA、ALUScrB和RegDst,根据这些信号确定ALU操作、选择两个ALU操作数A、B,并确定目标寄存器。

另外,数据转发也在该级完成。数据转发控制电路产生ForwardA和ForwardB两组控制信号。

(4)MEM级:存储器访问级。只有在执行LW、SW指令时才对存储器进行读写,对其他指令只起到一个周期的作用。该级只需存储器写操作允许信号MemWrite。

(5)WB级:写回级。该级把指令执行的结果回写到寄存器文件中。该级设置信号MemtoReg和寄存器写操作允许信号RegWrite,其中MemtoReg决定写入寄存器的数据来自于MEM级上的缓冲值或来自于MEM级上的存储器。

2)流水线冒险

在流水线CPU中,多条指令通知执行,由于各种各样的原因,在下一个时钟周期中下一条指令不能执行,这种情况称为冒险。冒险分为三类:

①结构冒险:硬件不支持多条指令在同一个时钟周期内执行。MIPS指令集专为流水线设计,因此在MIPS CPU中不存在此类冒险。

②数据冒险:在一个操作必须等待另一操作完成后才能进行时,流水线必须停顿,这种情况称为数据冒险。数据冒险分为两类:

ⅰ数据相关:流水线内部其中任何一条指令要用到任何其他指令的计算结果时,将导致数据冒险。通常可以用数据转发(数据定向)来解决此类冒险。

ⅱ数据冒险:此类冒险发生在当定向的目标阶段在时序上早于定向的源阶段时,数据转发无效。通常是引入流水线阻塞,即气泡(bubble)来解决。。

③控制冒险:CPU需要根据分支指令的结果做出决策,而此时其他指令可能还在执行中,这时会出现控制冒险,也称为分支冒险。解决此类冒险的常用方法是延迟分支。

2.1)数据相关与转发

下面通过具体例子来阐述数据相关。见图3.2

图3.2 数据相关性问题实例图

可见,后4条指令都依赖于第一条指令得到寄存器$2的结果,但sub指令要在第五周期才写回寄存器$2,但在第三、四、五个时钟周期$2分别要被and、or和add三个指令用到,所以这三个指令得到的是错误的未更新的数据,会引起错误的结果;而第六个时钟周期$2要被sw指令用到,此时得到的才是正确的已更新的数据。这种数据之间的互相关联引起的冒险就是数据相关。

可以看出,当一条依赖关系的方向与时间轴的方向相反时,就会产生数据冒险。

(1)一阶数据相关与转发(EX冒险)

首先讨论指令sub与and之间的相关问题。

sub指令在第五周期写回寄存器$2,而and指令在第四周期就对sub指令的结果$2提出申请,显然将得到错误的未更新的数据。像这类第I条指令的源操作寄存器与第I-1条指令(即上一条指令)的目标寄存器相重,导致的数据相关称为一阶数据相关。见图3.3中实线所示。

图3.3 一阶数据相关实例图

可以发现,sub指令的结果其实在EX级结尾,即第三周期末就产生了;而and指令在第四时钟周期向sub指令结果发出请求,请求时间晚于结果产生时间,所以只需要sub指令结果产生之后直接将其转发给and指令就可以避免一阶数据相关。如图3.3虚线所示。转发数据为ALUResult_mem

数据转发由Forwarding unit单元控制,判断转发条件是否成立。转发机制硬件实现见图3.4

图3.4 转发机制的硬件实现

转发条件ForwardA、ForwardB作为数据选择器的地址信号,转发条件不成立时,ALU 操作数从ID/EX流水线寄存器中读取;转发条件成立时,ALU操作数取自数据旁路。

转发条件:

①MEM级指令是写操作,即RegWrite_mem=1;

②MEM级指令写回的目标寄存器不是$0,即RegWriteAddr_mem≠0;

③MEM级指令写回的目标寄存器与在EX级指令的源寄存器是同一寄存器,即

RegWriteAddr_mem=RsAddr_ex 或RegWriteAddr_mem=RtAddr_ex。

(2)二阶数据相关与转发(MEM冒险)

接下来讨论sub指令与or指令之间的相关问题。

sub指令在第5时钟周期写回寄存器,而or指令也在第5时钟周期对sub指令的结果提出了请求,很显然or指令读取的数据是未被更新的错误内容。这类第I条指令的源操作寄存器与第I-2条指令(即之上第二条指令)的目标寄存器相重,导致的数据相关称为二阶数据相关。见图3.5中实线所示。

图3.5 一阶数据相关实例图

如前所述,or指令在第五时钟周期向sub指令结果发出请求时,sub指令的结果已经产生。所以,我们同样采用“转发”,即通过MEM/WB流水线寄存器,将sub指令结果转发给or指令,而不需要先写回寄存器堆。如图3.5中虚线所示。转发数据为RegWriteData_wb 转发条件:

①WB级指令是写操作,即RegWrite_wb=1;

②WB级指令写回的目标寄存器不是$0,即RegWriteAddr_wb≠0;

③WB级指令写回的目标寄存器与在EX级指令的源寄存器是同一寄存器,即

RegWriteAddr_wb=RsAddr_ex 或RegWriteAddr_wb=RtAddr_ex;

④EX冒险不成立,即RegWriteAddr_mem≠RsAddr_ex 或

RegWriteAddr_mem=RtAddr_ex。

(3)三阶数据相关与转发

最后讨论sub指令与add指令之间的相关问题。

sub指令与add指令在第五时钟周期内同时读写同一个寄存器。这类同一周期内同时读写同一个寄存器的数据相关称之为三阶数据相关。如图3.6中实线所示。

图3.6 三阶数据相关实例图

假设寄存器的写操作发生在时钟周期的上升沿,而读操作发生在时钟周期的下降沿,那么读操作将读取到最新写入的内容。在这种假设条件下将不会发生数据冒险。这就要求流水线中的寄存器具有“先写后读(Read After Write)”的特性。

这类“写操作发生在时钟周期的上升沿,读操作发生在时钟周期的下降沿”的寄存器虽然在理论上是可实现的,但是不适合应用于同步系统,因为它不但影响系统的运行速度,而且影响系统的稳定性,是不可取的。

因此,我们采用“转发”机制来解决三阶数据相关冒险。该部分转发电路我们放在寄存器堆的设计中完成。如图3.6中虚线所示。转发数据为RegWriteData_wb。

转发条件为:

①WB级指令是写操作,即RegWrite_wb=1;

②WB级指令写回的目标寄存器不是$0,即RegWriteAddr_wb≠0;

③WB级指令写回的目标寄存器与在ID级指令的源寄存器是同一寄存器,即

RegWriteAddr_wb=RsAddr_id 或RegWriteAddr_wb=RtAddr_id。

2.2)数据冒险与阻塞

当一条指令试图读取一个寄存器,而它前一条指令是lw指令,并且该lw指令写入的是

同一个寄存器时,定向转发的方法就无法解决问题。如图3.7所示

注意到lw指令只能在第

四时钟周期从内存中读

出数据,因此它和紧随其

后的and指令之间的依

赖关系与时序方向是相

反的,这种冒险是无法通

过转发来实现的。

这类冒险不同于数据相关冒险,需要单独一个“冒险检测单元(Hazard Detector)”,它

在ID级完成。

冒险成立的条件为:

①上一条指令是lw指令,即MemRead_ex=1;

②在EX级的lw指令与在ID级的指令读写的是同一个寄存器,即

RegWriteAddr_ex=RsAddr_id 或RegWriteAddr_ex=RtAddr_id。

冒险的解决:

为解决数据冒险,我们引入流水线阻塞。当Hazard Detector检测到冒险条件成立时,

在lw指令和下一条指令之间插入阻塞,即流水线气泡(bubble),使后一条指令延迟一个时

钟周期执行,这样就将该冒险转化为二阶数据相关,可用转发解决。如图3.8所示。

图3.8 流水线气泡的引入

需要注意的是,如果处于ID级的指令被阻塞,那么处于IF级的指令也必须阻塞,否则,处于ID级的指令就会丢失。防止这两条指令继续执行的方法是:保持PC寄存器和IF/ID流水线寄存器不变,同时插入一个流水线气泡。

具体实现方法如下:

在ID级检测到冒险条件时,HazardDetector输出

两个信号:Stall与PC_IFWrite。

Stall信号将ID/EX流水线寄存器中的EX、MEM

和WB级控制信号全部清零。这些信号传递到流水线后

面的各级,由于控制信号均为零,所以不会对任何寄存

器和存储器进行写操作,高电平有效。

PC_IFWrite信号禁止PC寄存器和IF/ID流水线寄

存器接收新数据,低电平有效。

2.3)分支冒险

还有一类冒险是包含分支的流水线冒险,下图。

图3.10 分支冒险实例

流水线每个时钟周期都得取指令才能维持运行,但分支指令必须等到MEM级才能确定是否执行分支。这种为了确定预取正确的指令而导致的延迟叫做控制冒险或分支冒险。

一种比较普遍的提高分支阻塞速度的方法是假设分支不发生,并继续执行顺序的指令流。如果分支发生的话,就丢弃已经预取并译码的指令,指令的执行沿着分支目标继续。由于分支指令直到MEM级才能确定下一条指令的PC,这就意味着为了丢弃指令必须将流水线中的IF、ID和EX级的指令都清除掉(flush)。这种优化方法的代价较大,效率较低。

如果我们能在流水线中提前分支指令的执行过程,那么就能减少需要清除的指令数。这是一种提高分支效率的方法,降低了执行分支的代价。

因此我们采用提前分支指令的方法解决分支冒险。

提前分支指令需要提前完成两个操作:

①计算分支的目的地址:

由于已经有了PC值和IF/ID流水线寄存器中的指令值,所以可以很方便地将EX级的分支地址计算电路移到ID级。我们针对所有指令都执行分支地址的计算过程,但只有在需要它的时候才会用到。

②判断分支指令的跳转条件:

我们将用于判断分支指令成立的Zero信号检测电

路(Z test )从ALU中独立出来,并将它从EX级提前

至ID级。具体的设计将在ID级设计中介绍。

在提前完成以上两个操作之外,我们还需丢弃IF级

的指令。具体做法是:加入一个控制信号IF_flush,做

为IF/ID流水线寄存器的清零信号。当分支冒险成立,

即Z=1,则IF_flush=1,否则IF_flush=0,故IF_flush = Z。

考虑到本系统还要实现的无条件跳转指令:J和JR,

在执行这两个指令时也必须要对IF/ID流水线寄存器进

行清空,因此,IF_flush的表达式应表示为:

IF_flush = Z || J || JR。

2.MIPS指令格式

1)R型指令格式

op、funct:共同决定指令名称,都为6位;

rs :指定第一操作数的寄存器地址,为5位;

rt :指定第二操作数的寄存器地址,为5位;

rd :指定目标寄存器地址,为5位;

sa :位移运算的移动位数,为5位。

本实验要实现的R型指令有:

①算术逻辑运算指令:ADD、ADDU、SUB、SUBU、AND、OR、NOR、XOR 、SLT、SLTU

②移位指令:SLLV、SRLV、SRAV、SLL、SRL、SRA

③寄存器跳转指令:JR

2)I型指令格式

op :决定指令名称,为6位;

rs :指定第一操作数的寄存器地址,为5位;

rt :储存结果的寄存器地址,为5位;

Imm:立即数,为16位。

本实验要实现的I型指令有:

①存储器访问指令:LW、SW

②立即数算术逻辑运算指令:ADDI、ADDIU、ANDI、ORI、XORI、SLTI、SLTIU

③分支指令:BEQ、BNE、BGEZ、BGTZ、BLEZ、BLTZ

注:

①I型指令中立即数算术逻辑运算指令对立即数(Imm)的处理应分为两类情况考虑:

当指令为ADDI、ADDIU、SLTI、SLTIU时,指令中的16位立即数(Imm)应做符号扩展为32位:sign-extend(Imm)。此符号扩展电路在ID级完成。

当指令为ANDI、ORI、XORI时,Imm应做“0”扩展为32位。考虑到资源的限制,在执行ANDI、ORI、XORI指令时,“0”扩展功能放在ALU内部(即EX级)完成。

②对于条件分支指令:不执行分支语句时,跳转地址应为下一条地址;执行分支语句时,跳转地址应为下一条地址加上跳转指令数,即为立即数。由于跳转方向有两个:向前与向后,故立即数存在正负性,应该有符号扩展为32位:sign-extend(Imm)。

如果能够将立即数的位数扩充,跳转指令的范围将大大增加。

由于CPU中指令的起始地址都是4的倍数,因此它们地址的后两位都是0,那么跳过的指令数后两位也应为2’b00,故可将16为立即数左移两位扩充为18位,寻址地址范围也

扩大4倍。因此分支地址可表示为{PC+4+sign-extend(Imm)<<2}.

③对于取字指令LW操作为:rt<=Mem[rs+sign_extend(Imm)]

对于存字指令SW操作为:Mem[rs+sign_extend(Imm)]<=rt

由于地址的变化是在内存中进行,故立即数只需进行有符号位扩展,不能位移。

3)J型指令格式

op :决定指令名称,为6位;

address:跳转的地址,为26位。

本实验要实现的I型指令有:

无条件跳转指令:J

注:指令都是32位,因此我们要把26位跳转地址扩展为32位。由于CPU中指令的起始地址都是4的倍数,因此它们地址的后两位都是0,可以把26位的address扩展为28位:{26-bits address,2’b00};剩下的最高4位则直接从PC中取,即跳转地址扩展为:

{PC[31:28],26-bits address,2’b00}。

3.指令译码模块ID的设计

指令译码模块的主要作用是从机器码中解析出指令,并根据解析结果输出各种控制信号。ID模块主要有指令译码(Decode)、寄存器堆(Registers)、冒险监测、分支检测和加法器等组成。ID模块的接口信息如下表所示:

(1)指令译码(Decode)子模块的设计

Decode控制器的主要作用是根据指令确定各个控制信号的值,是一个组合电路。我们将指令分成八类:

R_type1:ADD、ADDU、SUB、SUBU、AND、OR、

NOR、XOR 、SLT、SLTU、SLLV、SRLV、SRAV R型指令

R_type2:SLL、SRL、SRA

JR_type:JR

J_type:J J型指令

I_type:ADDI、ADDIU、ANDI、ORI、XORI、SLTI、SLTIU

Branch:BEQ、BNE、BGEZ、BGTZ、BLEZ、BLTZ I型指令

LW:LW

SW:SW

Decode输出的九组控制信号:

①RegWrite

决定是否对寄存器(Registers)进行写操作。当RegWrite高电平有效时,将数据写入指定的寄存器中。

需要写回寄存器的指令有:LW、R_type1、R_type2和I_type,则

RegWrite_id= LW || R_type1 || R_type2 || I_type

②RegDst

决定目标寄存器是rt还是rd。当RegDst=0时,rt为目标寄存器;当RegDst=1时,rd为目标寄存器。

需要写回寄存器的指令类型有:LW、R_type1、R_type2和I_type。其中,R_type1和R_type2的目标寄存器是rd,而LW和I_type的目标寄存器是rt。所以:

RegDst_id= R_type1 || R_type2

③MemWrite

决定是否对数据存储器进行写操作。当MemWrite有效时,将数据写入数据存储器指定的位置。

需要对写存储器的指令只有SW,所以:

MemWrite_id= SW

④MemRead

决定是否对数据存储器进行读操作。当MemRead有效时,读取数据存储器指定位置的数据。

需要对读存储器的指令只有LW,所以:

MemRead_id= LW

⑤MemtoReg

决定写入寄存器(registers)的数据来自ALU还是数据存储器。?当MemtoReg=0时,数据来自ALU;当MemtoReg=1时,数据来自数据存储器。

需要写回寄存器的指令类型有:LW、R_type1、R_type2和I_type。其中,只有LW写回寄存器的数据取自存储器,所以:

MemtoReg_id= LW

⑥ALUSrcA

决定ALU第一操作数来源。当ALUSrcA=0时,ALU第一操作数A(详见转发电路设计);当ALUSrcA=1时,ALU第一操作数来源于0扩展的用于移位指令的5位sa。

八种指令类型中J_tpye、JR_tpye及Branch类型指令没有使用ALU;其他使用ALU的指令类型中LW、SW、R_type1和I_type均采用的rs作为ALU第一操作数,只有R_type2的第一操作数采用的是0扩展的sa,所以:

ALUSrcA_id= R_type2

⑦ALUSrcB

决定ALU第二操作数来源。当ALUSrcB=0时,ALU第二操作数B。当ALUSrcB=1时,ALU第二操作数来源于符号扩展的16位Imm。

八种指令类型中J_tpye、JR_tpye及Branch类型指令没有使用ALU。其他使用ALU的指令类型中R_type1和R_type2 采用rt作为ALU第二操作数,而LW、SW、I_type的第二操作数采用的是符号扩展的立即数Imm段,所以:

ALUSrcB_id= LW || SW || I_type

⑧PCSource

决定写入PC寄存器的来源。PCSource由JR_tpye 、J_tpye及Z决定:即:PCSource={JR, J, Z}

?PCSource=000时,写入值为下一条指令的地址PC+4;

?PCSource=001时,写入值为Branch指令的分支地址;

?PCSource=010时,写入值为J指令的跳转地址;

?PCSource=100时,写入值为JR指令的跳转地址。

⑨ALUCode

(2)分支检测(Branch Test)电路的设计

Zero检测电路主要用于判断Branch指令的分支条件是否成立,其中BEQ、BNE两个操作数为RsData与RtData,而BGEZ、BGTZ、BLEZ和BLTZ指令则为RsData与常数0比较,所以输出信号Z的表达式为:

RsData[31] || ~ (| RsData[31: 0]) ;ALUCode=alu _blez

RsData[31] ;ALUCode=alu _bltz

~ RsData[31] && (| RsData[31: 0]) ;ALUCode=alu _bgtz

Z= ~ RsData[31];ALUCode=alu _bgez

| ( RsData[31: 0] ^ RtData[31: 0]) ;ALUCode=alu_bne

& ( RsData[31: 0] ~^ RtData[31: 0] );ALUCode=alu_beq

0;ALUCode=OTHER

(3)寄存器堆(Registers)的设计

寄存器堆由32个32位寄存器组成,这些寄存器通过寄存器号进行读写存取。寄存器堆的原理框图如图3.13所示。因为读取寄存器不会更改其内容,故只需提供寄存号即可读出该寄存器内容。读取端口采用数据选择器即可实现读取功能。应注意“0”号寄存器为常数0.

对于往寄存器里写数据,需要目标寄存器号(WriteRegister)、待写入数据(WriteData)、写允许信号(RegWrite)三个变量。图3.13中5位二进制译码器完成地址译码,其输出控制目标寄存器的写使能信号EN,决定将数据WriteData写入哪个寄存器。

在流水线CPU设计中,寄存器堆设计还应解决三阶数据相关的数据转发问题。当满足三阶数据相关条件时,寄存器具有Read after Write的特性。为实现该功能,在寄存器堆的基础上加一转发电路。如图3.14所示。图中转发检测电路的输出表达式为

RsSel=RegWrite_wb&&(~(RegWriteAddr_wb==0))&&(RegWriteAddr_wb==RsAddr_id) RtSel=RegWrite_wb&&(~(RegWriteAddr_wb==0))&&(RegWriteAddr_wb==RtAddr_id)

(4)冒险检测功能(Hazard Deterctor)的设计

由前面分析可知,冒险成立的条件为:

①上一条指令是LW指令,即MemRead_ex=1;

②在EX级的LW指令与在ID级的指令读写的是同一个寄存器,即

RegWriteAddr_ex=RsAddr_id 或RegWriteAddr_ex=RtAddr_id

解决冒险的方法为:

①插入一个流水线气泡Stall清空ID/EX寄存器并且阻塞流水线ID级、IF级流水线,

有:

Stall=((RegWriteAddr_ex==RsAddr_id)||

(RegWriteAddr_ex==RtAddr_id))&&MemRead_ex

②保持PC寄存器和IF/ID流水线寄存器不变,有:

PC_IFWrite=~Stall

(5)其它单元电路的设计

①Branch指令分支地址的计算电路:

BranchAddr=NextPC_id+(sign-extend(Imm_id)<<2)

②JR指令跳转地址的计算电路:

JRAddr=RsData_id

③J指令跳转地址的计算电路:

Ja ddr={NextPC_id[31:28],IR_id[25:0],2’b00}

④符号扩展的方法—针对有符号数

如果最高位(即符号位)是0,则要扩展的高位用0补齐;如果最高位是1,则用1补齐。

例: 8位的+1,表示为二进制为00000001,扩展成16位的话,符号扩展为0000000000000001;8位的-1,表示成二进制为11111111,扩展成16位的话,符号扩展为1111111111111111 。

⑤ 0扩展的方法—针对无符号数

要扩展的高位用0补齐。

例:16位二进制0xFFFF(无符号数65535), 0扩展成32位为0x0000FFFF (无符号数65535) 。

4.执行模块EX的设计

执行模块主要有ALU子模块、转发电路Forwarding以及若干数据选择器组成。这行模

(1)ALU子模块的设计

ALU是提供CPU基本运算能力的重要电路。ALU执行何种运算,由控制单元中的ALU 控制器输出的

为了提高运算速度,可将各种运算同时执行,得到的运算结果由ALUCode信号进行挑选。ALU的基本结构如图3.16所示。

图3.16 ALU的基本结构

a)加、减电路的设计考虑

减法、比较(SLT、SLTI)及部分分支指令(BEQ、BNE)均可用加法器和必要的辅助电路来实现。图3.16中的Binvert信号控制加减运算:

Binvert=~(ALUCode==alu_add)

对ALU来说,它的两个操作数输入时都已经是补码形式,当要完成两个操作数的减法时,即A补-B补,可将减法转换为加法,利用加法器来实现:

?A补-B补= A补+(-B补)= A补+(B补)补= A补+(B补)反+1

加法器完成的功能为:

sum=A+B^{32{Binvert}}+Binvert

当Binvert=0时,sum=A+B^0+0= A+B;

当Binvert=1时,sum=A+B^{32’b1}+1= A-B;(B^{32’b1}即对B按位取反)

即可完成加减运算。

由于32位加法器的运算速度影响着CPU频率的高低,因此设计一个高速加法器尤

为重要,本实验采用lab7中介绍的32位进位选择加法器。

b)比较电路的设计考虑

对于比较运算,如果最高为不同,即A[31]≠B[31],则根据A[31]、B[31]决定比较结果,但应注意有符号数和无符号数比较运算的区别。

①在有符号数比较SLT运算中,判断A

若A为负数、B为0或正数:A[31]&&(~B[31])

若A、B符号相同,A-B为负:(A[31]~^B[31]) && sum[31]

SLTResult=(A[31]&&(~B[31])) ||( (A[31]~^B[31]) && sum[31])

②在无符号数比较SLT运算中,判断A

若A最高位为0、B最高位为1:(~A[31] )&&B[31]

若A、B最高位相同,A-B为负:(A[31]~^B[31]) && sum[31]

SLTResult=((~A[31] )&&B[31]) ||( (A[31]~^B[31]) && sum[31])

c)算术右移运算电路的设计考虑

Verilog HDL的算术右移的运算符为“<<<”。要实现算术右移应注意,被移位的对象必须定义为reg类型,但是在SRA指令,被移位的对象操作数B为输入信号,不能定义为reg类型,因此必须引入reg类型中间变量B_reg,相应的Verilog HDL语句为:reg signed [31:0] B_reg;

always @(B) begin

B_reg = B; end

引入reg类型的中间变量B_reg后,就可对B_reg进行算术右移操作。

d)逻辑运算

与、或、或非、异或、逻辑移位等运算较为简单,只是要注意一点,ANDI、XORI、ORI三条指令的立即数为16位无符号数,应“0扩展”为32位无符号数,在运算的同时完成“0扩展”。如:ADDI指令的运算为A&{16’b0,B[15:0]}。

(2)转发电路Forwarding的设计

操作数A和B由数据选择器决定,数据选择器的地址信号即为ForwardA和ForwardB。

由前面介绍的一、二阶数据相关判断条件,不难得到:

ForwardA[0]=RegWrite_wb&&(RegWriteAddr_wb!=0)

&&(RegWriteAddr_mem!=RsAddr_ex)

&&(RegWriteAddr_wb==RsAddr_ex);

ForwardA[1]=RegWrite_mem&&(RegWriteAddr_mem!=0)

&&(RegWriteAddr_mem==RsAddr_ex);

ForwardB[0]=RegWrite_wb&&(RegWriteAddr_wb!=0)

&&(RegWriteAddr_mem!=RtAddr_ex)

&&(RegWriteAddr_wb==RtAddr_ex);

ForwardB[1]=RegWrite_mem&&(RegWriteAddr_mem!=0)

&&(RegWriteAddr_mem==RtAddr_ex);

5.存储器访问MEM模块的设计

数据存储器利用Xilinx Core Generator实现。考虑到FPGA

的资源,数据存储器可设计为容量各为26×32bit单端口

RAM。

由于MIPS系统的32位字地址由4 个字节组成,根据“对

齐限制”要求字地址必须是4的倍数,也就是说字地址的低两

位必须是0,所以字地址的低两位不接入电路。故我们设计的

数据RAM的地址应该接的信号是ALUResult_mem[7:2]。

由于VIRTEXII PRO只能产生带寄存器的内核RAM,所

以存储器输出绕过MEM/WB流水线寄存器,直接接入WB级

的数据选择器。图3.17与图3.18中的虚线就是表示这种含义.

实验作业3:DLX流水线实验报告

计算机体系结构 实验作业3:DLX流水线实验报告 姓名: 学号: 班级: 班号: 《计算机系统结构》第三次实验作业

一、实验目的 本次实验的主要目的是熟悉DLX流水线以及结构相关、数据相关、控制相关、前送(forwarding)等概念和技术。 二、实验内容 1. 了解各种指令在DLX流水线中的运行过程; 2. 流水线相关实验; 3. 前送(forwarding)技术对流水线性能的影响; 4. 考察改变部件数量和延迟数对性能的影响。 三、实验步骤及结果分析 1. 了解各种指令在DLX流水线中的运行过程 如上次实验那样,读入并运行fact.s和input.s。请从程序中选择有代表性的5条不同类型的指令,并描述每条指令在5段流水线中每步完成的工作。 (1) (2)

(3) (4)

(5) 2. 流水线相关实验 在流水线窗口中观察,分别找出结构相关、数据相关、控制相关各一种,并描述冒险情况以及这些冒险在winDLX是如何解决的。 (1)结构相关

在执行subd f0,f0,f4和j fact.Loop期间由于ALU被占用硬件资源无法满足j fact.Loop进入EX阶段,发生结构相关的冒险。winDLX中通过阻塞EX 1个周期来解决此问题。 (2)数据相关 bnez r5,input.Finish需要使用seqi的计算结果r5,所以产生数据相关的冒险。WindDLX通过阻塞解决问题。 (3)控制相关 语句lw r2,SaveR2(r0)被aborted,这是控制相关的冒险造成的。因为前一条语句j input.Loop是跳转语句,而指定到EX阶段语句被解码后在能知道其 作用,所以已经取指令的lw语句被取消。 3.前送(forwarding)技术对流水线性能的影响 (1)开启forwarding: 没有开启forwarding:

建模与仿真实验报告

重庆大学 学生实验报告 实验课程名称物流系统建模与仿真 开课实验室物流工程实验室 学院自动化年级12 专业班物流工程2班学生姓名段竞男学号20124912 开课时间2014 至2015 学年第二学期 自动化学院制

《物流系统建模与仿真》实验报告

(2)属性窗口(Properties Window) 右键单击对象,在弹出菜单中选择 Properties;用于编辑和查看所有对象都拥有的一般性信息。 (3)模型树视图(Model Tree View) 模型中的所有对象都在层级式树结构中列出;包含对象的底层数据结构;所有的信息都包含在此树结构中。 4)重置运行 (1)重置模型并运行 (2)控制仿真速度(不会影响仿真结果) (3)设置仿真结束时间 5)观察结果 (1)使用“Statistics”(统计)菜单中的Reports and Statistics(报告和统计)生成所需的 各项数据统计报告。 (2)其他报告功能包括:对象属性窗口的统计项;记录器对象;可视化工具对象;通过触发器 记录数据到全局表。

五、实验过程原始记录(数据、图表、计算等) 1、运行结果的平面视图: 2、运行结果的立体视图 3、运行结果的暂存区数据分析结果图:

第一个暂存区 第二个暂存区 由报表分析可知5次实验中,第一个暂存区的平均等待时间为11.46,而第二个暂存区的平均等待时间为13.02,略大于第一个暂存区,由此可见,第二个暂存区的工作效率基本上由第一个暂存区决定。 4、运行结果三个检测台的数据分析结果图,三个检测台的state饼图: (1)处理器一:

3生产线案例

流水生产线规划 [案例1]福特的汽车装配生产线 亨利·福特(1863—1974)于1903年创建福特汽车公司。20世纪初,福特的工厂创造了工业革命以来最先进的生产技术,他的T型汽车创造了每分钟出产6辆的历史最高纪录。福特创立的流水线生产方法称为大规模工业化生产的基本模式,推动了工业革命的进程。 20世纪初,美国汽车行业的做法是面向较为富有的阶层,汽车因为价格昂贵成为了只供富人消费的奢侈品。当时福特汽车公司推出的新型汽车也都是“奢华型”产品:车体笨重,多为定制,价格昂贵,非一般人财力可以企及。 在这种社会环境中,福特萌发了一个愿望。他希望让美国所有的普通家庭都能买得起他的汽车。福特意识到,为了实现他的理想,必须最大限度地降低产品的生产成本和价格。而要降低成本,就要大幅度提高汽车的产量。1906年7月,福特宣布公司的发展战略,他说:“本公司致力于生产标准化、规格同意、价格低廉、质量优越、能为广大公众接受的产品。大家的眼睛不要光盯着富人的口袋,全美国的富人本来就少,况且有多少汽车商都在打富人的主意。我们想要生存,要获得大的发展,只有另辟蹊径,在社会公众中寻找市场,在中等收入阶层找到我们的市场。” 福特强调标准化的意义,他说:“生产一种设计标准化的汽车是我们今后的主要任务。”福特的发展战略赢得了公司董事们的一致赞同。福特公司的这一举措立竿见影。1906年下半年到1907年年底,在美国经济开始滑入低谷的情况下,福特汽车公司却取得了惊人的业绩,盈利达125万美元,其产品在市场上供不应求。公司的销售业绩证明,产品价格越低,利润反而越大。因此,福特公司当时生产统一规格、价格低廉、能为普通大众接受的汽车是明智之举。在这种背景下,1908年3月19日,福特汽车公司的新产品:T型汽车投产。该产品很快就收到了普通大众的广泛欢迎。当时T型车的市场销售价格为每辆3200美元,价格仍然处于很高的水平。但福特不断对其汽车生产过程进行革新,连续化、专业化的生产方式渐渐从部件供应线的应用转移向最后的组装。到1913年初,福特公司已经停止使用旧式的静态组装法,而改为将底盘及车体60个一字排开,每一底盘都安放在一对木马上。这种新布局的分工更加细致,工人们不必像过去那样要等全部装完一辆后再去装另一辆,而是要求他们不间断地从一个工作地移向另一个工作地,重复自己特定的工作。以前的全能组装工成为了“轴工组”、“发动机组”或“接线组”的一员,每一组后面是一些助手和传递工,这些辅助技工的职责是保证组装工的工具和零部件的供应。 从静态组装法改为“运动中组装法”,生产规模扩大了,到场地、部件的冲突问题也随之而来。为了进一步提高生产效率,降低生产成本,福特在1914年在他的高原公园新厂建立了世界上第一条流水装配生产线。要装配的汽车底盘被固定在链式传送带上,装配线两端都安装了移动式的辅助传送带供给零部件。这种辅助传送带的功能,是在生产中保持部件移动,将部件送给装配线上的负责装配的工人。各种零部件定时定量、准确无误地送至总装线,一辆汽车从底盘被放到装配线上开始,以成品T型车完成为止,形成了大规模生产的典型模式。这种汽车组装方式使工人操作时无需移动就可以从旁边和高架的供应线上获取各种零件、部件和工具。采用流水线生产方法以后,劳动生产率大幅度提高。

离散流水线仿真实验报告

管理学院实验报告 学号 姓名 专业班级物流管理1301 指导老师 实验日期2016-10-26 课程名称物流系统建模与仿真 实验名称离散流水线仿真 实验成绩 实验报告具体内容一般应包括:一、实验目的和要求;二、主要仪器设备(软件); 三、实验内容及实验数据记录;四、实验体会

1.实验目的和要求 1)掌握Flexsim的基本操作步骤。 2)掌握Flexsim的基本原理。 3)掌握Flexsim在物流系统仿真中的简单应用。 2.实验原理 1)系统仿真的基本概念; 2)系统式相互联系、相互作用、的对象的组合; 3)通过Flexsim可成功解决:提高设备的利用率; 4)系统模型是反映内部要素的关系,反映系统某昔日方面。 3.主要仪器设备(软件) 1)硬件配置: 计算机 2)软件环境: Windows XP或以上的操作系统,Flexsim仿真软件。 4.实验内容及步骤 根据下列系统描述和系统参数,应用Flexsim仿真软件建立仿真模型并运行,查看仿真结果,分析各种设备的利用情况,发现加工系统中的生产能力不平衡问题,然后改变加工系统的加工能力配置(改变机器数量或者更换不同生产能力的机器),查看结果的变化情况,确定系统设备的最优配置。 系统描述与系统参数如下: 1)一个流水加工生产线。不考虑其流程间的空间运输。 2)两种工件A/B分别以正太(10,2)min和均匀分布(10,20)min的时间间隔进 入系统,首先进入队列Q1。 3)两种工件均由同一个操作工人进行检验,每件检验用时2min。 4)不合格的工件废弃,离开系统;合格的工件送往后续加工工序,合格率为95%。 5)工件A送往机器M1加工,如需等待,则在Q2队列中等待;工件B送往机器M2 加工,如需等待,则在Q3队列中等待。 6)工件A在机器M1上的加工时间为均匀分布(1,5)min;工件B在机器M2上的 加工时间为正太分布(8,1)min。 7)一个工件A和一个工件B在机器M3上装配成产品,需时为正太分布(5,1)min,装配完成后离开系统。 8)如装配机器忙,则工件A在队列Q4中等待,工件B在队列Q5中等待。 9)连续仿真1分钟的系统运行情况。 5.实验数据记录 1)参数设置

(完整版)类MIPS单周期处理器

一、实验目的 1.了解微处理器的基本结构。 2.掌握哈佛结构的计算机工作原理。 3.学会设计简单的微处理器。 4.了解软件控制硬件工作的基本原理。 二、实验任务 利用HDL语言,基于Xilinx FPGA nexys4实验平台,设计一个能够执行以下MIPS指令集的单周期类MIPS处理器,要求完成所有支持指令的功能仿真,验证指令执行的正确性,要求编写汇编程序将本人学号的ASCII码存入RAM的连续内存区域。 (1)支持基本的算术逻辑运算如add,sub,and,or,slt,andi指令 (2)支持基本的内存操作如lw,sw指令 (3)支持基本的程序控制如beq,j指令 三、实验过程 1、建立工程 在ISE 14.7软件中建立名为Lab1 的工程文件。芯片系列选择Artix7,具体芯片型号选择XC7A100T,封装类型选择CSG324,速度信息选择-1。

2、分模块设计 1)指令存储器ROM设计 新建IP core Generator,命名为irom。设定的指令存储器大小为128字,指令存储器模块在顶层模块中被调用。输入为指令指针(PC)与时钟信号(clkin),输出为32位的机器指令,并将输出的机器指令送到后续的寄存器组模块、控制器模块、立即数符号扩展模块进行相应的处理。 然后制作COE文件。先使用UltraEdit编辑代码,代码如下 main: addi $2,$0,85 sw $2,0($3) addi $2,$0,50 sw $2,4($3) addi $2,$0,48 sw $2,8($3) addi $2,$0,49 sw $2,12($3) addi $2,$0,53 # sw $2,16($3) addi $2,$0,49 # sw $2,20($3) addi $2,$0,51 # sw $2,24($3) addi $2,$0,52 # sw $2,28($3) addi $2,$0,54 # sw $2,32($3) addi $2,$0,52 # sw $2,36($3) j main

(生产管理知识)混合流水线生产系统

1. 建立Flexsim模型 双击桌面上的Flexsim图标打开软件,你可以看到Flexsim菜单、工具条、实体库,和正投影模型视窗,如图1所示。 图1 第1步:模型实体设计 模型元素系统元素备注 Flowitem 产品不同实体类型代表不同类型的产品,分别标为1、2、3 Processor 机台,检验台进行不同的参数定义以表征不同机器组中的机器 Queue 机器组暂存区五个暂存区,用于等待机器的处理Conveyor 传送带运输加工和检验后的产品 Source 待加工产品库产品的始发处,连续不断的提供待加工产品

Sink 成品库产品加工并通过检验后的最终去处 第2步:在模型中生成所有实体 依要求,从左边的实体库中依次拖出相关实体放在右边模型视图中,并调整至适当的位置,如图2所示: 图2 第3步:连接所有端口 从Source开始,依次“A”键连接,直到Sink为止,在连接时,注意输入输出方向。所有端口连接如图3:

图3 第4步:修改名称 把每个名字修改成机器相关名称,以便快速查看统计数据。如把第一组的普通车床名字改为puche1、puche2、puche3,第二组的钻床改为zuanche1、zuanche2、zuanche3,等等,依次修改如图4:

第5步:给发生器指定临时实体到达参数 循环产生3种类型的产品,其中类型1产品1000个,每隔3min生产一批10个的;类型2产品500个,每隔3min生产一批5个;类型3产品200个,每隔3min生产一批2个。双击发生器,在弹出的窗口里,将“到达方式”下拉菜单选择“按时间表到达”,把“到达次数”改成4,点击“刷新到达”后,下面会出现四行数据。把arrivaltime、itemtype、quantity的值相应改动,设定换类型生产间隔时间是12min,即一个类型的生产12min后,生产下一种类型。最后在“重复时间表”前方框中打钩。再如图5: 打开“发生触发器”,在“创建触发”中选择”根据实体类型设定颜色”选项,如图6所示。 本试验共1700个产品,故在“离开触发”中选择“关闭和打开端口”选项,然后点击右边的按钮,在弹出的窗口里将true改成getoutput(current)==1699,将closeinput改成closeoutput以结束发生器生产,如图7所示:

WITNESS生产系统仿真实验报告

实验报告 实验名称:witness生产管理系统仿真姓名: 学号: 指导老师:

实验(一) 一、实验名称:witness基本操作 二、实验日期:2013年10月7-10月25日 三、实验地点:微机室s6-c408 四、实验目的: 1、掌握witness软件的基本操作 2、掌握元素的显示设置(display) 3、掌握machine、labor元素的基本设置 4、掌握输送链conveyor元素的详细设置 5、掌握pull、push规则 五、实验环境:winxp/win7 六、实验内容 输送链上运行时间为10分钟 称重工序:时间服从均值为5分钟的负指数分布 清洗工序:4.5分 10件清理一次时间为8分钟 加工工序:4分钟 50分钟检修飞时间服从均值10分钟的负指数分布 检测工序:3分钟 七、实验步骤 1、根据题目选择part、conveyor、machine、labor等各种元素布置生产线 2、修改各种元素名字及各个元素的详细设置。 1)各个工序机器设置以及necexp()函数的应用

2)输送链conveyor的设置 3)机器抛锚方式及时间设置

4)工人labor元素设置 3、元素间pull、push的设置及流程路线试运行效果1)part元素的导入 2)运行效果

实验(二) 一、实验名称:椅子装配工序仿真 二、实验日期:2013年10月7-10月25日 三、实验地点:微机室s6-c408 四、实验目的: 1、掌握pen、percent、match/attribute的使用规则 2、掌握元素的显示设置(display) 3、了解part元素被动模式和主动模式的区别和使用场合 4、掌握buffers元素的基本设置 5、掌握元素可视化效果的制作 6、掌握pull、push对相同元素的分类规则 五、实验环境:winxp/win7 六、实验内容 椅子由椅背、椅面、椅腿组成,物料每2分钟一套进入流水线。 组装工序:6分钟/件 喷漆工序:随机喷为红黄绿三色 10分钟/件 检验工序:10%不合格返回重新喷漆 3分钟/件 包装工序:每4个合格品包装到一起 4分钟/件 七、实验步骤 1、根据题目选择part、buffers、machine等各种元素,因场地问题布置 为U形生产线。 2、修改各种元素名字及各个元素的详细设置。 1)设置part名称及主动形式

基于witness的混合生产线平衡分析及优化

本科生课程论文(设计) 题目: 《基于witness的混合生产线平衡分析及优化》 姓名: 金筱杰 学院: 工学院 专业: 物流工程 班级: 物流04班 学号: 31310424 指导教师: 赵月霞职称: 2013 年6 月16 日 南京农业大学教务处制

基于witness的混合生产线平衡分析及优化 物流工程专业学生金筱杰 指导教师赵月霞 摘要:实现生产线平衡是企业实现产能最大化的重要手段,本文在witness环境下,对某一拥有混合生产线的生产车间进行仿真试验,深入分析了各类数据,找出了生产瓶颈所在。然后,本文对生产瓶颈的存在的原因进行了分析,并在分析中偶然发现了混合生产线本身的奥秘。最后,本文对症下药,提出了一种合理的改进方案,优化了生产,并对其他方案的无用性进行了论证。 关键词:生产线平衡;瓶颈;优化 0引言 与生活中的“木桶理论”相似,生产线也有自己的“生产线”平衡理论,即生产线的最大产能并不取决于其最快工位,而恰恰取决于其最慢工位。因此“生产线平衡”理论要求生产线上的最慢工位尽可能地与最快工位接近,这样才能在投资一定的情况下实现产能最大化,并最终实现经济效益的最大化。 1 实例数据 某一个制造车间有5台不同的机器,加工A、B和C三种产品。每种产品都要完成5 道工序,而每道工序必须在指定的机器上按照事先规定好的工艺顺序进行。 某一客户订单要求提供1000个A、500个B、200个C。领导要求在保持车间逐日连续工作的条件下,通过调整机器数量、改变投产顺序等合理措施使产量、品种、工时和负荷趋于平衡,来减少时间损失。现有的产品投产顺序为10个A,5个B,2个C。如果一项作业在特定时间到达车间,发现该组机器全都忙着,该作业就在该组机器处排入一个FIFO规则的队列,如果有前一天没有完成的任务第二天继续加工。 不同的产品在不同的机器上的加工时间不尽相同,具体的工艺路线如下表: 2.基于witness的模型设计 2.1元素定义 表2.1

体系结构windlx流水线实验报告

实验一基本实验 ----by 王琳 PB07210432 1. 实验目的: 1)熟悉计算机流水线基本概念 2)了解DLX基本流水线的各段的功能 3)了解各种不同指令在流水线中的实际流动情况 4)对流水线做性能分析 5)了解影响流水线效率的因素——数据相关、结构相关、控制相关,了解相关的种类 6)了解解决数据相关的方法 2. 实验平台:WinDLX仿真器 WinDLX简介: 是一个图形化、交互式的DLX流水线仿真器。 可以装入DLX汇编语言程序,然后单步,设断点或是连续执行该程序. CPU的寄存器,流水线,I/O和存储器都可以用图形表示出来 提供了对流水线操作的统计功能. 可以装载文件名为*.s的文件. 要求的硬件平台是IBM-PC兼容机. WinDLX是一个Windows应用程序,运行以上和以上的操作系统. WinDLX软件包中带有说明文件及教程,可以供使用者进一步了解仿真器的使用方法和DLX处理器的原理.大家再进行实验前应该仔细阅读这些文档. 3. 实验内容: 1)在仿真器上分别运行单条指令:Load指令、Store指令、分支指令、寄存器ALU指令、立即数ALU指令,记录它们在流水线中的执行情况 Lw:

观察此流水线时空图,可以发现:转移指令引起的延迟仅为1 clocks,另2 stalls 是trap指令引起的,这个执行结果似与不采用forwarding技术的前提相违,只能理解为对于无条件的转移指令,新的PC值在EX阶段即已被写入。 Sw: Beqz: 由此图可见,对于分支指令,总是用 not-taken的策略来处理,并且也认为新 的PC值也在EX阶段即已被写入,且cond 条件也在EX段被算出(这显然是一个极不合理的假设,究竟为何分支指令的延迟为1 stall有待进一步探究) 寄存器ALU指令

流水线仿真实验报告

实验二流水线仿真实验实验报告 一、实验目的 1、学习、掌握Witness仿真软件的使用与主要功能; 2、熟悉流水生产线的特点; 3、了解影响流水线生产效率的因素和基本的改善方法。 二、实验内容 流水生产是现代工业企业很重要的一种生产组织形式。它是按照产品(零部件)的工艺顺序排列工作地,使产品(零部件)按照一定的速度,连续和有节奏地经过各个工作地依次加工,直到生产出成品。流水生产线能够满足合理组织生产过程的要求,使企业生产的许多技术经济指标得到改善。 本实验运用WITNESS软件系统建立一个流水线的仿真模型,在模型中,零部件(widget )要经过称重(weigh)、冲洗(wash )、加工(produce )和检测(inspect)四个工序的操作。执行完每一步操作后零部件通过充当运输器和缓存器的输送链传送至下一步操作;经过检测以后零部件脱离模型;同时需要一个操作人员控制加工机器的各种加工活动。 模型的建立及其仿真运行分成六个阶段来进行,每一个阶段运行后都记录下相应的统计数据,以便前后对比分析。采用这种循序渐进的建模方法可以在确保本阶段正确无误的基础上继续进行下一阶段的建模,而且能够清楚地看到在做任何改变产生的效果。 三、实验步骤、分析 第一阶段

2 通过display命令进行可视化设置(如下图所示) 3通过detail命令进行细节设计并建立元素间的逻辑规则,将c1的输出规则定为:push to ship 4 模型运行与分析 运行模型100分钟后,通过statistics命令生成各元素统计分析表。

1)widget 2)weigh 3)输送链c1数据如下 结果分析:机器空闲率为0,忙率为100%,已完成零件数为20。输送链空载率为5%,有效运载率为95%,在运零部件数为1,总共运载零部件数为20,平均大小为0.95,平均输送时间为4.75。零部件进入数量为21,送出数量为19,在制品数为2,平均在制品数为1.95,平均通过时间为9.29。 第二阶段 1定义元素 添加机器:清洗(wash)、加工(produce)、检测(inspect),添加输送带:C2、C3,同时添加了一个逻辑元素----变量output,用于动态显示模型中加工完 名称类型数量 widget part1 weigh machine1 wash machine1 producemachine1 inspect machine1 C1conveyor1 C2conveyor1 C3conveyor1 OutputVariable1 通过display命令并依照生产流程进行各元素可视化设置,如下图所示 3细节设置

Flexsim实验报告实验二:流水作业线的仿真讲解

Flexsinm实验报告

实验目的 通过此实验掌握Flexsim 软件的基本用法,了解系统仿真的基本原理,运用Flexsim 进行模型的建立和仿真分析,通过实际建立仿真模型深刻认识仿真的基本概念。在学会运用Flexsim 进行几个模型的建立和仿真的基础之上进行自主分析,完成一定的探究过程,更好地将Flexsim 软件和现实紧密联系起来,以此为基础将更好地在物流中心的设计与运作方面进行统筹计划。其中包括: ? 掌握离散系统仿真的基本原理。 ? 掌握Flexsim 软件的基本操作和常用实体的参数设置等。 ? 掌握分析流程,建立模型的方法。 ? 掌握模型运行的基本统计分析方法。 ? 统计对象的选择和模型运行过程中被选择对象统计数据的输出和分析。 ? 通过实际建立仿真模型认识仿真的基本概念、感受仿真的情境。 ? 通过实际建立仿真模型认识仿真的基本概念、感受仿真的情境。 1、 实验内容 本次实验中,我们利用flexsim4.0软件平台,来仿真一个流水加工生产线系统,不考虑其流程间的工件运输,对其各道工序流程进行建模。 建立一个如下描述的流水加工生产线系统: 两种工件L_a 、L_b ,分别以正态分布(10,2)和均匀分布(20,10)min 的时间间隔进入系统,首先进入队列Q_in 由操作工人进行检验,每件检验用时2min 。不合格的废弃,离开系统,合格的送往后续加工工序,合格率为95%; L_a 送往机器M1加工,如需等待,则在Q_m1队列中等待;L_b 送往机器M2加工,如需等待,则在Q_m2队列中等待; L_a 在机器M1上加工时间为均匀分布(5,1)min ,加工后的工件为L_a2;L_b 在机器M2上的加工时间为正态分布(8,1)min ,加工后的工件叫做L_b2; 一个L_a2和一个L_b2在机器Massm 上装配成L_product ,需时为正态分布(5,1)min ,然后离开系统。 如装配机器忙则L_a2在队列Q_out1中等待;L_b2在队列Q_out2中等待; 并且让该系统运行一个月,直到流水线中的某个生产资料暂存区达到了其最大容量,则系统停滞加工。 该系统的运行效率指标由生产线的最长加工时间和最 M2 M1 Q_out2 Massm

应用于MIPS内核的OCTEON家族处理器介绍

应用于MIPS内核的OCTEON家族处理器介绍 由技术编辑archive1 于星期五, 2014-07-04 11:24 发表 放眼现今的网络、安全、无线及存储应用系统,对于最高性能及最低功耗的优质处理器需求持续升高。Cavium Netowrks公司的OCTEON家族处理器经过高度优化,相当适合control-plane、data-plane应用或两者的混合,以优异性能提供网络、安全、无线及存储等应用最佳的选择。OCTEON和OCTEON Plus处理器已被大多数的网通OEM厂所使用,凭借低成本以及低功耗等优势带来市场最领先的性能。 OCTEON处理器介绍 OCTEON系列产品包括了三代且软件完全兼容、高度集成的多内核处理器:OCTEON? (CN3XXX)、OCTEON? Plus (CN5XXX)及OCTEON II (CN6XXX)。这些处理器在优化之下提供了高性能、高带宽以及低功耗。OCTEON处理器可应用于control-plan、data-plan 或是两者的混合。OCTEON处理器提供了最佳的解决方案,包含智能网络、无线和100Mbps 到40Gbps的存储应用。OCTEON全系列产品都共享相同的架构,使得全系列处理器软件都能兼容。OCTEON处理器的区别基于下列几项: ●cnMIPS?的内核数目 ●内核频率及internal interconnect ●I/O接口的种类和数目

●硬件加速器的种类和数目 ●高速缓存的容量以及结合性 每个OCTEON产品都提供一组功能组(feature set),让应用目标能有最好的功能和性能。编写好的软件可应用在不同的型号,只要它们有相同的功能(feature)。 OCTEON系列处理器特色 OCTEON系列处理器的特色如下所示: ●Custom-designed dual issue MIPS64 release 2cores,伴随着Cavium Netowrks创新的指令以提高性能 ●1到32内核的处理器提供最广泛的性能、功耗以及价格的选择性,同时提供全面的软件兼容性 ●内置的硬件加速器大幅提升应用上的性能、负载平衡以及同步处理 ●有着DMA引擎的高速内部连结,优化了OCTEON处理器的数据流量 ●集成的I/O接口和内存控制器能减少BOM成本及缩小产品的设计 ●简明的软件架构基于标准的C/C++编码,GNU toolchains,业界标准的操作系统,及optimized software stacks因为有了硬件加速器、灵活的软件架构、标准的MIPS64、toolchains、Packet-linked locks、scaling support和操作系统,使得软件开发的复杂性缩至最小 OCTEON处理器的优点 ●内置了硬件加速器 ●每个内核专属的加解密处理器 ●芯片上各单元的内部连结 ●Cavium Networks特有的专属指令集 ●阶梯式的高速缓存 OCTEON系列产品目标应用 OCTEON处理器被使用在各式各样的OEM设备。例如: ●路由器 ●交换器 ●集成式管理器 ●内容感知交换器 ●应用感知网关器 ●三合一宽带网关器

体系结构windlx流水线实验报告

实验一基本实验----by 王琳PB07210432 1. 实验目的: 1)熟悉计算机流水线基本概念 2)了解DLX基本流水线的各段的功能 3)了解各种不同指令在流水线中的实际流动情况 4)对流水线做性能分析 5)了解影响流水线效率的因素——数据相关、结构相关、控制相关,了解相关的种类 6)了解解决数据相关的方法 2. 实验平台:WinDLX仿真器 WinDLX简介: ●是一个图形化、交互式的DLX流水线仿真器。 ●可以装入DLX汇编语言程序,然后单步,设断点或是连续执行该程序. ●CPU的寄存器,流水线,I/O和存储器都可以用图形表示出来 ●提供了对流水线操作的统计功能. ●可以装载文件名为*.s的文件. ●要求的硬件平台是IBM-PC兼容机. ●WinDLX是一个Windows应用程序,运行DOS3.3以上和Windows3.0以上的操作系统. ●WinDLX软件包中带有说明文件及教程,可以供使用者进一步了解仿真器的使用方法和 DLX处理器的原理.大家再进行实验前应该仔细阅读这些文档. 3. 实验内容: 1)在仿真器上分别运行单条指令:Load指令、Store指令、分支指令、寄存器ALU指令、立即数ALU指令,记录它们在流水线中的执行情况 ●Lw: 观察此流水线时空图,可以发现:转移指令引起的延迟仅为1 clocks,另2 stalls 是trap指令引起的,这个执行结果似与不采用forwarding技术的前提相违,只能理解为对于无条件的转移指令,新的PC值在EX阶段即已被写入。 ●Sw:

●Beqz: 由此图可见,对于分支指令,总是用 not-taken的策略来处理,并且也认为新的 PC值也在EX阶段即已被写入,且cond 条件也在EX段被算出(这显然是一个极 不合理的假设,究竟为何分支指令的延迟 为1 stall有待进一步探究) ●寄存器ALU指令 ●立即数ALU指令 2)仿真器运行一段无相关的程序,记录它的执行情况,计算流水线的加速比、吞吐率与效率。下面是一段不相关的程序,一共6条指令 ADDI R5, R5, 1 SUBI R4, R4, 1 AND R3, R3, R3 XOR R7, R7, R7 ADDI R8, R8, 1 ADDI R9, R9, 1 在WinDLX中执行的结果如下:

(完整版)MIPS处理器设计说明说课讲解

(完整版)M I P S处理器 设计说明

西安邮电大学 实践课程报告书 课程名称:计算机组成与实践 院(系)名 :电子工程学院 称 专业班级:** 学号/姓名:** 实习时间:2015年3月6日至2015年6月19日

1 课程主要目的 本课程是在上学期《计算机组成与设计》课程学习的基础上,通过实践课的方式,依照集成电路设计流程,完成一个简单独立硬件功能电路模块的设计,从而到达对《计算机组成与设计》课程的深入理解和提高电路设计的实践能力,从理论和实验的结合中巩固计算机基本知识,熟练掌握电路设计的基本流程和原理,同时,加深对MIPS系统的组成部件及其电路结构,原理和功能的理解,掌握利用硬件描述语言和EDA工具进行MIPS设计的一般方法。 2 课程的主要内容和任务 MIPS是典型的32位定长指令字RISC处理器,要求深入理解MIPS处理器的内部结构及工作原理。采用verilogHDL设计一个兼容MIPS指令格式,具有10条以上指令功能的单周期CPU硬件电路,该32位MIPS设计内容主要包括系统中的基本组成部件(存储器,指令寄存器,寄存器堆,算术逻辑运算器,程序计数器,多路选择器,符号扩展等)的设计,仿真及硬件下载的方法和过程。设计过程中使用ISE仿真工具完成设计电路的仿真验证。 3总体设计方案 3.1指令及其功能表: (1)R型指令:

(2)I型指令: (3)J型指令: 3.2总体结构设计: 该MIPS主要由8个模块组成,各个子模块分别设计其特定的功能,最终利用一个总的模块进行子模块间连接,使得整个CPU能连贯执行指令,在仿真结果中观察设计结果,最终进行硬件下载,验证设计。其中各个模块简单功能如下: (1)存储器模块:具备基本的读写功能,用于存放数据和指令。 (2)寄存器堆模块:由32个32位的寄存器组成,提供较大的存储空间,用于存放暂存数据和指令。

系统建模与仿真实验报告

实验1 Witness仿真软件认识 一、实验目的 熟悉Witness 的启动;熟悉Witness2006用户界面;熟悉Witness 建模元素;熟悉Witness 建模与仿真过程。 二、实验内容 1、运行witness软件,了解软件界面及组成; 2、以一个简单流水线实例进行操作。小部件(widget)要经过称重、冲洗、加工和检测等操作。执行完每一步操作后小部件通过充当运输工具和缓存器的传送带(conveyer)传送至下一个操作单元。小部件在经过最后一道工序“检测”以后,脱离本模型系统。 三、实验步骤 仿真实例操作: 模型元素说明:widget 为加工的小部件名称;weigh、wash、produce、inspect 为四种加工机器,每种机器只有一台;C1、C2、C3 为三条输送链;ship 是系统提供的特殊区域,表示本仿真系统之外的某个地方; 操作步骤: 1:将所需元素布置在界面:

2:更改各元素名称: 如; 3:编辑各个元素的输入输出规则:

4:运行一周(5 天*8 小时*60 分钟=2400 分钟),得到统计结果。5:仿真结果及分析: Widget: 各机器工作状态统计表:

分析:第一台机器效率最高位100%,第二台机器效率次之为79%,第三台和第四台机器效率低下,且空闲时间较多,可考虑加快传送带C2、C3的传送速度以及提高第二台机器的工作效率,以此来提高第三台和第四台机器的工作效率。 6:实验小结: 通过本次实验,我对Witness的操作界面及基本操作有了一个初步的掌握,同学会了对于一个简单的流水线生产线进行建模仿真,总体而言,实验非常成功。

MIPS单周期CPU实验报告

《计算机组成原理实验》 实验报告 (实验二) 学院名称: 专业(班级): 学生姓名: 学号: 时间:2017年11月25日

成绩: 实验二:单周期CPU设计与实现 一.实验目的 (1) 掌握单周期CPU数据通路图的构成、原理及其设计方法; (2) 掌握单周期CPU的实现方法,代码实现方法; (3) 认识和掌握指令与CPU的关系; (4) 掌握测试单周期CPU的方法; (5) 掌握单周期CPU的实现方法。 二.实验内容 设计一个单周期的MIPSCPU,使其能实现下列指令: ==> 算术运算指令 功能:rd←rs + rt。reserved为预留部分,即未用,一般填“0”。 功能:rt←rs + (sign-extend)immediate;immediate符号扩展再参加“加”运算。 (3)sub rd , rs , rt 功能:rd←rs - rt ==> 逻辑运算指令 功能:rt←rs | (zero-extend)immediate;immediate做“0”扩展再参加“或”运算。 (5)and rd , rs , rt

功能:rd←rs & rt;逻辑与运算。 (6)or rd , rs , rt 功能:rd←rs | rt;逻辑或运算。 ==>移位指令 功能:rd<-rt<<(zero-extend)sa,左移sa位,(zero-extend)sa ==>比较指令 功能:if (rs 存储器读/写指令 功能:memory[rs+ (sign-extend)immediate]←rt;immediate符号扩展再相加。即将rt寄存器的内容保存到rs寄存器内容和立即数符号扩展后的数相加作为地址的内存单元中。 (10) lw rt , immediate(rs) 读存储器 功能:rt ← memory[rs + (sign-extend)immediate];immediate符号扩展再相加。 即读取rs寄存器内容和立即数符号扩展后的数相加作为地址的内存单元中的数,然后保存到rt寄存器中。 ==> 分支指令 (11)beq rs,rt,immediate 功能:if(rs=rt) pc←pc + 4 + (sign-extend)immediate <<2 else pc ←pc + 4

生产线流程建模与仿真

流水线生产系统WITNESS建模与仿真 (一) 1. 模型描述 某企业在一条流水线上加工一种产品,该产品所需的零部件(Widget)经过称重(Weigh)、冲洗(Wash)、加工(Produce)和检测(Inspect)四个工序的操作后,形成产品离开系统,生产线布置如下图所示。 生产线上每道工序只有一台设备,零部件在每台设备上加工完毕后,由同其连接的输送链运输至下一设备,最后经过检测后被送出系统。已知该流水线中各个工序的加工时间分别为:称重(weigh)5分钟、冲洗(wash)4分钟、加工(produce)3分钟、检测(inspect)3分钟。每条输送链上有20个零件位,输送链上零件移动节拍为。零部件的供应是源源不断的,不存在缺货现象。使用WITNESS建立该系统的仿真模型界面如下图所示。 流水线生产系统WITNESS仿真模型界面 2. 系统分析 元素说明

该流水线系统的组成元素主要为被加工的零部件、四台设备和三条输送线,因此该系统仿真模型的元素如下表所示:被加工的零部件由widget表示,4道工序分别由四台机器表示,C1、C2、C3表示输送链,而最后的实际产量由变量output统计和可视化显示。 表1 模型元素介绍 系统运行时间 仿真运行终止时间为:一天8小时=8*60=480min。 3. 模型建立 使用WINTESS建立仿真模型的过程一般分为如下三步: Step1:定义元素 Step2:元素细节设计 Step3:仿真实验和数据分析 下面描述如何通过这三步建立流水线生产系统的仿真模型。 定义元素 WITNESS中可以通过四种方式定义元素: (1)通过系统布局区(layout window)定义元素:在系统布局区点击鼠标右键,在弹出菜单中选择Define菜单项,将弹出新建元素对话框,然后进行元素定义。

PLC四组抢答器和装配流水线实验报告

装配流水线的模拟控制 一、实验目的 1、用 PLC构成装配流水线的控制系统。 2、了解移位寄存器指令在控制系统中的应用及编程方法。 二、实验内容 实验箱上框中的 A~H 表示动作输出(用 LED 发光二极管模拟),下框中的A、B、C、D、E、F、G、H 插孔分别接主机的输出点。传送带共有十六个工位,工件从 1 号位装入,分别在 A(操作 1)、B(操作 2)、C(操作 3)三个工位完成三种装配操作,经最后一个工位后送入仓库;其它工位均用于传送工件。 四、实验控制要求 1、启动按钮SB1、复位按钮 SB 2、移位按钮 SB3 均为常OFF。 2、启动后,再按“移位”后,按以下规律显示:D→E→F→G→A→D→E→F→G →B→D→E→F→G→C→D→E→F→G→H→D→E→F→G→A……循环,D、E、F、G 分别用来传送的,A 是操作 1,B 是操作 2,C 是操作3,H 是仓库。 3、时间间隔为 1S。 五、实验步骤 方法一: 1、连线 ①按照以上的I/O分配表连接好主机上的输入输出点。 ②输出端 1L、2L、3L插孔均连到外接电源的 COM插孔。 ③输入端 1M 插孔连到外接电源的COM插孔。 ④实验区的+24V插孔连到外接电源的+24V插孔。 2、程序中用到的主要指令 定时器TON,移位寄存器SHRB。 3、输入程序代码并对其解释说明(梯形图) 注:说明中【】内数字代表网络号,如【1】代表网络1。

说明:按下启动按钮SB1→线圈【1】得电闭合→【2】置位→【3】得电并保持。此时,按下移位按钮SB3,使【3】得电闭合→【3】置位。 复位说明:按下复位按钮SB2,【2】→【2】复位,即保持为失电。 说明:移位按钮SB3按下后,【4】得电闭合→【4】置位→【4】得电并保持→启动定时器T37【5】,开始定时,1秒时T37【6】闭合→【6】得电→【5】失电,定时器T37【5】复位→【6】失电→【5】得电,再次启动定时器T37【5】,1秒时T37【6】闭合→【6】得电→【5】失电……一直循环,也就是【5】和【6】构成了一个1秒钟自复位定时器,每1秒输出一个持续时间位1个扫描周期的时钟脉冲,即T37【5】每1秒闭合1个扫描周期→【6】每1秒闭合1个扫描周期。

混合流水线

第16章混合流水线系统仿真设计 一、实验目的 1. 熟悉系统元素ROUTE的用法; 2. 了解工艺视图process views的用法; 3. 了解多原料多阶段加工仿真系统的设计; 4. 找出影响系统的瓶颈因素,并力图对模型加以改善。 二、实验内容及原理 多对象流水线生产有两种基本形式。一种是可变流水线,其特点是:在 计划期内,按照一定的间隔期,成批轮翻生产多种产品;在间隔期内,只生 产一种产品;在完成规定的批量后,转生产另一种产品。另一种是混合流水线,其特点是:在同一时间内,流水线上混合生产多种产品。按固定的混合 产品组织生产,即将不同的产品按固定的比例和生产顺序编成产品组。一个 组一个组地在流水线上进行生产。 某一个制造车间有5台不同的机器,加工A、B和C三种产品。每种产品都要完成5 道工序,而每道工序必须在指定的机器上按照事先规定好的工艺顺序进行。 假定在保持车间逐日连续工作的条件下,仿真在多对象平准化中生产中采用不同投产顺序生产1000个A、500个B、200个C的工作情况。通过改变投产顺序使产量、品种、工时和负荷趋于平衡,来减少时间损失。产品投产顺序为10个A,5个B,2个C。如果一项作业在特定时间到达车间,发现该组机器全都忙着,该作业就在该组机器处排入一个FIFO规则的队列,如果有前一天没有完成的任务第二天继续加工。 三种产品的工艺路线如下表: 产品类型机器组别相继工序平均服务时间 /min A 1,2,3,4,5 5,5,4,4,6 B 1,2,3,4,5 4,4,3,4,3 C 1,2,3,4,5 4,5,3,4,1 三、实验步骤 1、元素定义(Define) 元素定义表 元素名称类型数量说明 A Part 1 产品A B Part 1 产品B C Part 1 产品C Machine001 Machine 1 机器组1 Machine002 Machine 1 机器组2 Machine003 Machine 1 机器组3 Machine004 Machine 1 机器组4 Machine005 Machine 1 机器组5 Buffers001 Buffer 1 机器组1的输入缓冲区 Buffers002 Buffer 1 机器组2的输入缓冲区 Buffers003 Buffer 1 机器组3的输入缓冲区

相关文档
相关文档 最新文档