当前位置: 首页 > news >正文

【机组】基于FPGA的32位算术逻辑运算单元的设计(EP2C5扩充选配类)

🌈个人主页:Sarapines Programmer
🔥 系列专栏:《机组 | 模块单元实验》
⏰诗赋清音:云生高巅梦远游, 星光点缀碧海愁。 山川深邃情难晤, 剑气凌云志自修。

目录

一、实验目的

二、实验要求

三、实验说明

四、实验步骤

实验一 不带进位位逻辑或运算实验

实验二 不带进位位加法运算实验

实验三  带进位的加法运算实验

实验四  数据输入通用寄存器

实验五  寄存器内容无进位位左移实验

实验六  寄存器内容无进位位右移实验

实验七  32位ALU实验

实验八  32位寄存器实验

实验九   32位寄存器组实验

实验十  32位程序计数器 PC实验 

实验十一   中断控制实验

📝总结


一、实验目的

1、掌握运算器的数据传输方式。

2、掌握74LS181的功能和应用。

3、学习并掌握利用FPGA器件通过原理图进行算术逻辑单元的设计。

二、实验要求

1、完成32位不带进位位算术、逻辑运算实验。按照实验步骤完成实验项目,了解算术逻辑运算单元的运行过程。

2、通过原理图配置EP2C5的内部电路结构,使其替代分离的算术逻辑运算单元的设计。

三、实验说明

1ALU单元实验构成

(1)运算器由8片74LS181构成32位字长的ALU单元。

(2)8片74LS374作为数据锁存器,8片74LS244作为数据驱动器,8个8芯插座作为数据输入端,可通过长8芯扁平电缆,把数据输入端连接到二进制开关上。

运算器的数据输出由4片74LS244(输出缓冲器)来控制,4个8芯插座作为数据输出端,由开关控制显示32位输出结果。可通过8芯扁平电缆线把数据输出端连接到微指令LED灯上。

2、ALU单元的工作原理

CLK有上升沿时,把来自数据总线的两路32位数据打入输入锁存器。

算术逻辑运算单元的核心是由8片74LS181组成,它可以进行2个32位二进制数的算术逻辑运算,74LS181的各种工作方式可通过设置其控制信号来实现(S0、S1、S2、S3、M、CN)。当实验者正确设置了74LS181的各个控制信号,74LS181会运算数据锁存器DR1(对应通道1数据)、DR2(对应通道2的数据)内的数据。由于DR1、DR2已经把数据锁存,只要74LS181的控制信号不变,那么74LS181的输出数据也不会发生改变。

输出缓冲器采用4片74LS244,当控制信号ALU-O为低电平时,两片74LS244导通,把74LS181的运算低位结果输出到数据总线,并在微指令单元LED上显示。

3、控制信号说明

信号名称

作 

有效电平

CLK

寄存器工作脉冲

上升沿有效

S0~S3

74LS181工作方式选择

见附表

M

选择逻辑或算术运算

高电平为逻辑运算,低电平为算术运算

CN

有无进位输入

高电平有效

CLK

进位寄存器的工作脉冲

上升沿有效

ALU-OUT

74LS181计算结果16位输出至总线

低电平有效

四、实验步骤

实验一 不带进位位逻辑或运算实验

将右板中间的计算机组成原理连线板拔下,换成8位/16位/32位计算机组成原理与系统结构 扩展板。

把IO1(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J2插座相连(对应二进制开关S9~S16);把IO2(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J4插座相连(对应二进制开关S17~S24);把IO9(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J5插座相连(对应二进制开关S25~S32);把IO10(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J10插座相连(对应二进制开关S40~S47)。(S9~S16,S17~S24,S25~S32,S40~S47为32位数据输入通道1)。

把IO5(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J3插座相连(对应二进制开关S1~S8);把IO6(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J13插座相连(对应二进制开关S33~S48);把IO13(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J14插座相连(对应二进制开关S49~S56);把IO14(8芯的盒型插座,FPGA扩展实验区)与母板上的二进制开关单元中J01插座相连(对应二进制开关H16~H23)。(S1~S8,S33~S48,S49~S56,H16~H23为32位数据输入通道2)。

把IO7(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的J3插座相连(对应LED灯,L17-L24);把IO8(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上J11插座相连(对应LED灯L42-L57);把IO15(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的J12插座相连(对应LED灯,L58-L65),把IO16(8芯的盒型插座,FPGA扩展实验区)与母板上微指令单元M04插座相连(对应微指令LED灯L1-L8),扩展板上L17-L24,L42-L57,L58-L65及母板上L1-L16,为32位数据输出。

把IO188(CLK)用连线连到脉冲单元的PLS1上作为输入寄存器控制时钟信号。

把IO191(ALU-O)用连线连到二进制单元的H6上作为输出允许控制信号。

把IO193(S3), IO197(S2), IO168(S1), IO164(S0)用连线分别连到二进制单元的H5,H4,H3,H2上用于控制74LS181的工作方式。

把IO162(M)用连线连到二进制单元的H1上用于控制74LS181的算术运算还是逻辑运算。

把IO160(CN)用连线连到二进制单元的H0上用于控制74LS181的带进位还是不带进位。

FPGA扩展板接口

左侧板接口

I01(输入A[31:24]位)

J2(扩展板二进制开关S9-S16

I02(输入A[23:16]位)

 J4(扩展板二进制开关S17-S24

IO9(输入A[15:8]位)

J5(扩展板二进制开关S25-S32

IO10(输入A[7:0]位)

J10(扩展板二进制开关S40-S47

I05(输入B[31:24]位)

J1(扩展板二进制开关S1-S8

I06(输入B[23:16]位)

 J13(扩展板二进制开关S33-S48

IO13(输入B[15:8]位)

J14(扩展板二进制开关S49-S56

IO14(输入B[7:0]位)

J01(母板二进制开关H16-H23

I07(输出[31:24]位)

J3(扩展板L17-L24

I08(输出[23:16]位)

J11(扩展板L42-L57

IO15(输出[15:8]位)

J12(扩展板L58-L65

IO16(输出[7:0]位)

M04(母板L1-L8

IO188(输入寄存器时钟CLK

时序单元PLS1

IO191(输出使能ALU-O

母板二进制开关H6

IO193(S3), IO197(S2), IO168(S1), IO164(S0

母板二进制开关H5,H4,H3,H2

IO162(工作模式选择M

母板二进制开关H1

IO160(进位模式选择CN

母板二进制开关H0

把ALTERA下载器一端连到微机的并口,一端连接到FPGA扩展区的JTAG口,打开实验系统电源,把计算机组成原理32位\实验1 不带进位位逻辑或运算\alu32文件夹中的alu32.sof程序下载到FPGA。

二进制开关作为数据输入通道1,置33333333H(对应开关如下表)。

S9

S10

S11

S12

S13

S14

S15

S16

数据总线值

A31

A30

A29

A28

A27

A26

A25

A24

A[31:24]位数据

0

0

1

1

0

0

1

1

33H

S17

S18

S19

S20

S21

S22

S23

S24

数据总线值

A23

A22

A21

A20

A19

A18

A17

A16

A[23:16]位数据

0

0

1

1

0

0

1

1

33H

S25

S26

S27

S28

S29

S30

S31

S32

数据总线值

A15

A14

A13

A12

A11

A10

A9

A8

A[15:8]位数据

0

0

1

1

0

0

1

1

33H

S40

S41

S42

S43

S44

S45

S46

S47

数据总线值

A7

A6

A5

A4

A3

A2

A1

A0

A[7:0]位数据

0

0

1

1

0

0

1

1

33H

二进制开关作为数据输入通道2,置55555555H(对应开关如下表)。

S1

S2

S3

S4

S5

S6

S7

S8

数据总线值

B31

B30

B29

B28

B27

B26

B25

B24

B[31:24]位数据

0

1

0

1

0

1

0

1

55H

S33

S34

S35

S36

S37

S38

S39

S48

数据总线值

B23

B22

B21

B20

B19

B18

B17

B16

B[23:16]位数据

0

1

0

1

0

1

0

1

55H

S49

S50

S51

S52

S53

S54

S55

S56

数据总线值

B15

B14

B13

B12

B11

B10

B9

B8

B[15:8]位数据

0

1

0

1

0

1

0

1

55H

H23

H22

H21

H20

H19

H18

H17

H16

数据总线值

B7

B6

B5

B4

B3

B2

B1

B0

B[7:0]位数据

0

1

0

1

0

1

0

1

55H

置各控制信号如下:

H6

H5

H4

H3

H2

H1

H0

ALU-0

S3

S2

S1

S0

M

CN

0

1

1

1

0

1

0

按脉冲单元中的PLS1脉冲按键,在CLK上产生一个上升沿,把33333333H以及55555555H打入输入数据锁存器。

经过74LS181的计算,把运算结果(F=A或B)输出到数据总线上,数据总线上的LED灯显示灯显示77777777H。

实验二 不带进位位加法运算实验

将右板中间的计算机组成原理连线板拔下,换成8位/16位/32位计算机组成原理与系统结构 扩展板。

把IO1(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J2插座相连(对应二进制开关S9~S16);把IO2(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J4插座相连(对应二进制开关S17~S24);把IO9(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J5插座相连(对应二进制开关S25~S32);把IO10(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J10插座相连(对应二进制开关S40~S47)。(S9~S16,S17~S24,S25~S32,S40~S47为32位数据输入通道1)。

把IO5(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J1插座相连(对应二进制开关S1~S8);把IO6(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J13插座相连(对应二进制开关S33~S48);把IO13(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J14插座相连(对应二进制开关S49~S56);把IO14(8芯的盒型插座,FPGA扩展实验区)与母板上的二进制开关单元中J01插座相连(对应二进制开关H16~H23)。(S1~S8,S33~S48,S49~S56,H16~H23为32位数据输入通道2)。

把IO7(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的J3插座相连(对应LED灯,L17-L24);把IO8(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上J11插座相连(对应LED灯L42-L57);把IO15(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的J12插座相连(对应LED灯,L58-L65),把IO16(8芯的盒型插座,FPGA扩展实验区)与母板上微指令单元M04插座相连(对应微指令LED灯L1-L8),扩展板上L17-L24,L42-L57,L58-L65及母板上L1-L16,为32位数据输出。

把IO188(CLK)用连线连到脉冲单元的PLS1上作为输入寄存器控制时钟信号。

把IO191(ALU-O)用连线连到二进制单元的H6上作为输出允许控制信号。

把IO193(S3), IO197(S2), IO168(S1), IO164(S0)用连线分别连到二进制单元的H5,H4,H3,H2上用于控制74LS181的工作方式。

把IO162(M)用连线连到二进制单元的H1上用于控制74LS181的算术运算还是逻辑运算。

把IO160(CN)用连线连到二进制单元的H0上用于控制74LS181的带进位还是不带进位。

把ALTERA下载器一端连到微机的并口,一端连接到FPGA扩展区的JTAG口,打开实验系统电源,把计算机组成原理32位\实验2 不带进位加法运算\alu32文件夹中的alu32.sof程序下载到FPGA。

二进制开关作为数据输入通道1,置33333333H(对应开关如下表)。

S9

S10

S11

S12

S13

S14

S15

S16

数据总线值

A31

A30

A29

A28

A27

A26

A25

A24

A[31:24]位数据

0

0

1

1

0

0

1

1

33H

S17

S18

S19

S20

S21

S22

S23

S24

数据总线值

A23

A22

A21

A20

A19

A18

A17

A16

A[23:16]位数据

0

0

1

1

0

0

1

1

33H

S25

S26

S27

S28

S29

S30

S31

S32

数据总线值

A15

A14

A13

A12

A11

A10

A9

A8

A[15:8]位数据

0

0

1

1

0

0

1

1

33H

S40

S41

S42

S43

S44

S45

S46

S47

数据总线值

A7

A6

A5

A4

A3

A2

A1

A0

A[7:0]位数据

0

0

1

1

0

0

1

1

33H

二进制开关作为数据输入通道2,置55555555H(对应开关如下表)。

S1

S2

S3

S4

S5

S6

S7

S8

数据总线值

B31

B30

B29

B28

B27

B26

B25

B24

B[31:24]位数据

0

1

0

1

0

1

0

1

55H

S33

S34

S35

S36

S37

S38

S39

S48

数据总线值

B23

B22

B21

B20

B19

B18

B17

B16

B[23:16]位数据

0

1

0

1

0

1

0

1

55H

S49

S50

S51

S52

S53

S54

S55

S56

数据总线值

B15

B14

B13

B12

B11

B10

B9

B8

B[15:8]位数据

0

1

0

1

0

1

0

1

55H

H23

H22

H21

H20

H19

H18

H17

H16

数据总线值

B7

B6

B5

B4

B3

B2

B1

B0

B[7:0]位数据

0

1

0

1

0

1

0

1

55H

置各控制信号如下:

H6

H5

H4

H3

H2

H1

H0

ALU-0

S3

S2

S1

S0

M

CN

0

1

0

0

1

0

1

按脉冲单元中的PLS1脉冲按键,在CLK上产生一个上升沿,把33333333H及55555555H打入输入数据锁存器。

经过74LS181的计算,把运算结果(F=A+B)输出到数据总线上,数据总线上的LED显示灯应该显示88888888H。

附74LS181的逻辑(改变程序可设置不同的工作方式)

方式

M=1逻辑运算

M=0算术运算

S3 S2 S1 S0

逻辑运算

CN=1(无进位)

CN=0(有进位)

0000

F=/A

F=A

F=A加1

0001

F=/(A+B)

F=A+B

F=(A+B)加1

0010

F=/A B

F=A+/B

F=(A+/B)加1

0011

F=0

F=减1(2的补)

F=0

0100

F=/(AB)

F=A加A/B

F=A加A/B加1

0101

F=/B

F=(A+B)加A/B

F=(A+B)加A/B加1

0110

F=A⊕B

F=A减B减1

F=A减B

0111

F=A /B

F=A/B减1

F=A/B

1000

F=/A+B

F=A 加AB

F=A 加AB加 1

1001

F= /(A⊕B )

F=A加B

F=A加B加1

1010

F=B

F=(A+/B)加AB

F=(A+/B)加AB加1

1011

F=AB

F=AB减1

F=AB

1100

F=1

F=A加 A

F=A加 A 加1

1101

F=A+/B

F=(A+B) 加 A

F=(A+B) 加 A 加1

1110

F=A+B

F=(A+/B)加A

F=(A+/B)加A加1

1111

F=A

F=A减1

F=A

实验三  带进位的加法运算实验

进位电路与通用寄存器、ALU有着非常紧密的关系,算术逻辑单元的进位输出和通用寄存器带进位移动都会影响进位寄存器中的结果。

若实验者在做算术逻辑实验时,选择了算术运算方式,当ALU的计算结果输出至总线时,在CCK上来一个上升沿,将把74LS181的进位输出位(Cn+4)上的值(为了统一进位标识,1表示有进位,0表示无进位),打入进位寄存器中,并且有进位时LED(CY)发光。

FPGA扩展板接口

左侧板接口

I01(输入A[31:24]位)

J2(扩展板二进制开关S9-S16

I02(输入A[23:16]位)

 J4(扩展板二进制开关S17-S24

IO9(输入A[15:8]位)

J5(扩展板二进制开关S25-S32

IO10(输入A[7:0]位)

J10(扩展板二进制开关S40-S47

I05(输入B[31:24]位)

J1(扩展板二进制开关S1-S8

I06(输入B[23:16]位)

 J13(扩展板二进制开关S33-S48

IO13(输入B[15:8]位)

J14(扩展板二进制开关S49-S56

IO14(输入B[7:0]位)

J01(母板二进制开关H16-H23

I07(输出[31:24]位)

J3(扩展板L17-L24

I08(输出[23:16]位)

J11(扩展板L42-L57

IO15(输出[15:8]位)

J12(扩展板L58-L65

IO16(输出[7:0]位)

M04(母板L1-L8

IO188(输入寄存器时钟CLK

时序单元PLS1

IO191(输出使能ALU-O

母板二进制开关H6

IO193(S3), IO197(S2), IO168(S1), IO164(S0

母板二进制开关H5,H4,H3,H2

IO162(工作模式选择M

母板二进制开关H1

IO160(进位模式选择CN

母板二进制开关H0

3.1 控制信号说明

信号名称

作 

有效电平

CLK

输入寄存器工作脉冲

上升沿有效

S0~S3

74LS181工作方式选择

见附表

M

选择逻辑或算术运算

低电平为逻辑运算,高电平为算术运算

CN

有无进位输入

高电平有效

ALU-OUT

74LS181计算结果16位输出至总线

低电平有效

3.2实验步骤

将右板中间的计算机组成原理连线板拔下,换成8位/16位/32位计算机组成原理与系统结构 扩展板。

把IO1(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J2插座相连(对应二进制开关S9~S16);把IO2(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J4插座相连(对应二进制开关S17~S24);把IO9(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J5插座相连(对应二进制开关S25~S32);把IO10(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J10插座相连(对应二进制开关S40~S47)。(S9~S16,S17~S24,S25~S32,S40~S47为32位数据输入通道1)。

把IO5(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J1插座相连(对应二进制开关S1~S8);把IO6(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J13插座相连(对应二进制开关S33~S48);把IO13(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J14插座相连(对应二进制开关S49~S56);把IO14(8芯的盒型插座,FPGA扩展实验区)与母板上的二进制开关单元中J01插座相连(对应二进制开关H16~H23)。(S1~S8,S33~S48,S49~S56,H16~H23为32位数据输入通道2)。

把IO7(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的J3插座相连(对应LED灯,L17-L24);把IO8(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上J11插座相连(对应LED灯L42-L57);把IO15(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的J12插座相连(对应LED灯,L58-L65),把IO16(8芯的盒型插座,FPGA扩展实验区)与母板上微指令单元M04插座相连(对应微指令LED灯L1-L8),扩展板上L17-L24,L42-L57,L58-L65及母板上L1-L16,为32位数据输出。

把IO188(CLK)用连线连到脉冲单元的PLS1上作为输入寄存器控制时钟信号。

把IO191(ALU-O)用连线连到二进制单元的H6上作为输出允许控制信号。

把IO193(S3), IO197(S2), IO168(S1), IO164(S0)用连线分别连到二进制单元的H5,H4,H3,H2上用于控制74LS181的工作方式。

把IO163(M)用连线连到二进制单元的H1上用于控制74LS181的算术运算还是逻辑运算。

把IO162(CN)用连线连到二进制单元的H0上用于控制74LS181的带进位还是不带进位。

把IO161(CCK)用连线连到连到脉冲单元的PLS4上。

把IO160(CY)用连线连到母板微指令单元M15上,作为进位输出指示。

FPGA扩展板接口

左侧板接口

I01(输入A[31:24]位)

J2(扩展板二进制开关S9-S16

I02(输入A[23:16]位)

 J4(扩展板二进制开关S17-S24

IO9(输入A[15:8]位)

J5(扩展板二进制开关S25-S32

IO10(输入A[7:0]位)

J10(扩展板二进制开关S40-S47

I05(输入B[31:24]位)

J1(扩展板二进制开关S1-S8

I06(输入B[23:16]位)

 J13(扩展板二进制开关S33-S48

IO13(输入B[15:8]位)

J14(扩展板二进制开关S49-S56

IO14(输入B[7:0]位)

J01(母板二进制开关H16-H23

I07(输出[31:24]位)

J3(扩展板L17-L24

I08(输出[23:16]位)

J11(扩展板L42-L57

IO15(输出[15:8]位)

J12(扩展板L58-L65

IO16(输出[7:0]位)

M04(母板L1-L8

IO188(输入寄存器时钟CLK

时序单元PLS1

IO191(输出使能ALU-O

母板二进制开关H6

IO193(S3), IO197(S2), IO168(S1), IO164(S0

母板二进制开关H5,H4,H3,H2

IO163(工作模式选择M

母板二进制开关H1

IO162(进位模式选择CN

母板二进制开关H0

IO161(CCK

时序单元PLS4

IO160(进拉输出CY

微指令单元M15

将右板中间的计算机组成原理连线板拔下,把ALTERA下载器一端连到微机的并口,一端连接到FPGA扩展区的JTAG口,打开实验系统电源,把计算机组成原理32位\实验3 带进位位的加法运算\alu32文件夹中的alu32.sof程序下载到FPGA。

二进制开关作为数据输入通道1,置65656565H(对应开关如下表)。

S9

S10

S11

S12

S13

S14

S15

S16

数据总线值

A31

A30

A29

A28

A27

A26

A25

A24

A[31:24]位数据

0

1

1

0

0

1

0

1

65H

S17

S18

S19

S20

S21

S22

S23

S24

数据总线值

A23

A22

A21

A20

A19

A18

A17

A16

A[23:16]位数据

0

1

1

0

0

1

0

1

65H

S25

S26

S27

S28

S29

S30

S31

S32

数据总线值

A15

A14

A13

A12

A11

A10

A9

A8

A[15:8]位数据

0

1

1

0

0

1

0

1

65H

S40

S41

S42

S43

S44

S45

S46

S47

数据总线值

A7

A6

A5

A4

A3

A2

A1

A0

A[7:0]位数据

0

1

1

0

0

1

0

1

65H

二进制开关作为数据输入通道2,置A7A7A7A7H(对应开关如下表)。

S1

S2

S3

S4

S5

S6

S7

S8

数据总线值

B31

B30

B29

B28

B27

B26

B25

B24

B[31:24]位数据

1

0

1

0

0

1

1

1

A7H

S33

S34

S35

S36

S37

S38

S39

S48

数据总线值

B23

B22

B21

B20

B19

B18

B17

B16

B[23:16]位数据

1

0

1

0

0

1

1

1

A7H

S49

S50

S51

S52

S53

S54

S55

S56

数据总线值

B15

B14

B13

B12

B11

B10

B9

B8

B[15:8]位数据

1

0

1

0

0

1

1

1

A7H

H23

H22

H21

H20

H19

H18

H17

H16

数据总线值

B7

B6

B5

B4

B3

B2

B1

B0

B[7:0]位数据

1

0

1

0

0

1

1

1

A7H

置各控制信号如下:

H6

H5

H4

H3

H2

H1

H0 

ALU-0

S3

S2

S1

S0

M

CN

0

1

0

0

1

0

1

按脉冲单元中的PLS1脉冲按键,在CLK上产生一个上升沿的脉冲,把65656565H及A7A7A7A7H打入输入数据锁存器。

按脉冲单元中的PLS4脉冲按键,在CCK上产生一个上升沿,把74LS181的进位打入进位寄存器中,在有进位的情况下,CY指示灯M15亮,并且数据总线上的LED显示灯应该显示0D0D0D0CH。


实验四  数据输入通用寄存器

一、实验目的

了解通用32位寄存器的组成和硬件电路,利用通用寄存器实现数据的置数、左移、右移等功能。

二、实验要求

按照实验步骤完成实验项目, 实现通用寄存器移位操作。了解通用寄存器单元的工作原理运用。

三、实验说明

1、寄存器实验构成:

通用寄存器由4片74LS198构成32位字长的寄存器单元。四个8芯插座作为数据输入端,可通过8芯数据电缆,把数据输入端连接到二进制开关总线上。

数据输出由4片74LS244(输出缓冲器)来控制。用32个FPGA IO作为数据输出端,通过32根数据线连接到微指令的LED灯上。

2、通用寄存器单元的工作原理

通用寄存器单元的核心部件为4片74LS198,它具有锁存、左移、右移、保存等功能。各个功能都由X1、X2信号和工作脉冲CLK来决定。X0=1、X1=1,CLK有上升沿时,把总线上的数据打入通用寄存器。可通过设置X0、X1来指定通用寄存器工作方式。

输出缓冲器采用74LS244,把通用寄存器内容输出到总线。

3、控制信号说明

信号名称

作     

有效电平

CLK

通用寄存器工作脉冲

上升沿有效

四、实验步骤

将右板中间的计算机组成原理连线板拔下,换成8位/16位/32位计算机组成原理与系统结构 扩展板。

把IO1(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J2插座相连(对应二进制开关S9~S16);把IO2(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J4插座相连(对应二进制开关S17~S24);把IO9(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J5插座相连(对应二进制开关S25~S32);把IO10(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J10插座相连(对应二进制开关S40~S47)。(S9~S16,S17~S24,S25~S32,S40~S47为32位数据输入)。

把IO7(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的J3插座相连(对应LED灯,L17-L24);把IO8(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上J11插座相连(对应LED灯L42-L57);把IO13(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的J12插座相连(对应LED灯,L58-L65),把IO16(8芯的盒型插座,FPGA扩展实验区)与母板上微指令单元M04插座相连(对应微指令LED灯L1-L8),扩展板上L17-L24,L42-L57,L58-L65及母板上L1-L16,为32位数据输出。

将FPGA扩展板接口IO188,用数据线与左板二进制开关单元PLS1连接,对应74LS198CLK时钟控制信号。

将FPGA扩展板接口IO193,用数据线与扩展板H57连接。

本实验增加了数码管显示输入输出寄存器功能,若要数码管与二进制LED灯同时显示,请进行如下连接:

将将FPGA扩展板接口IO5与扩展板J9相连,IO6与J6相连,IO13与J7相连,IO14与J8相连。

实验连线表如下:

FPGA扩展板接口

左侧板接口

I01(输入A[31:24]位)

J2(扩展板二进制开关S9-S16

I02(输入A[23:16]位)

 J4(扩展板二进制开关S17-S24

IO9(输入A[15:8]位)

J5(扩展板二进制开关S25-S32

IO10(输入A[7:0]位)

J10(扩展板二进制开关S40-S47

I07(输出[31:24]位)

J3(扩展板L17-L24

I08(输出[23:16]位)

J11(扩展板L42-L57

IO15(输出[15:8]位)

J12(扩展板L58-L65

IO16(输出[7:0]位)

M04(母板L1-L8

IO5(输入数码管数据)

J9

IO6(输出数码管扫描选通)

J6

IO13(输出数码管数据)

J7

IO14(输入数码管扫描选通)

J8

IO188(输入寄存器时钟CLK

时序单元PLS1

IO193(数码管复位)

H57

把ALTERA下载器一端连到微机的并口,一端连接到FPGA扩展区的JTAG口,打开实验系统电源,把计算机组成原理32位\实验4 数据输入通用寄存器文件夹中的regist32.sof程序下载到CPLD。

二进制开关作为数据输入通道,置42424242H(对应开关如下表)。

S9

S10

S11

S12

S13

S14

S15

S16

数据总线值

A31

A30

A29

A28

A27

A26

A25

A24

A[31:24]位数据

0

1

0

0

0

0

1

0

42H

S17

S18

S19

S20

S21

S22

S23

S24

数据总线值

A23

A22

A21

A20

A19

A18

A17

A16

A[23:16]位数据

0

1

0

0

0

0

1

0

42H

S25

S26

S27

S28

S29

S30

S31

S32

数据总线值

A15

A14

A13

A12

A11

A10

A9

A8

A[15:8]位数据

0

1

0

0

0

0

1

0

42H

S40

S41

S42

S43

S44

S45

S46

S47

数据总线值

A7

A6

A5

A4

A3

A2

A1

A0

A[7:0]位数据

0

1

0

0

0

0

1

0

42H

按脉冲单元中的PLS1脉冲按键,在CLK上产生一个上升沿,把42424242H打入通用寄存器,此时微指令总线上的指示灯应该显示为42424242H。

实验五  寄存器内容无进位位左移实验

一、通用寄存器单元的工作原理:

通用寄存器单元的核心部件为4片74LS198,它具有锁存、左移、右移、保存等功能。各个功能都由X1、X2信号和工作脉冲CLK来决定。X0=1、X1=1,CLK有上升沿时,把总线上的数据打入通用寄存器。可通过设置X0、X1来指定通用寄存器工作方式。

输出缓冲器采用74LS244,,把通用寄存器内容输出到总线。

把IO7(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的J3插座相连(对应LED灯,L17-L24);把IO8(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上J11插座相连(对应LED灯L42-L57);把IO15(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的J12插座相连(对应LED灯,L58-L65),把IO16(8芯的盒型插座,FPGA扩展实验区)与母板上微指令单元M04插座相连(对应微指令LED灯L1-L8),扩展板上L17-L24,L42-L57,L58-L65及母板上L1-L16,为32位数据输出。

将FPGA扩展板接口IO188,用数据线与右板二进制开关单元PLS1连接,对应74LS198CLK时钟控制信号。

将FPGA扩展板接口IO191,用数据线与右板二进制开关单元H3连接,对应74LS198输出控制信号。

将FPGA扩展板接口IO193,用数据线与右板二进制开关单元H2连接,对应74LS198X1控制信号。

将FPGA扩展板接口IO197,用数据线与右板二进制开关单元H1连接,对应74LS198X0控制信号。

将FPGA扩展板接口IO160,用数据线与左板二进制开关单元H0连接,对应74LS198CLR清0控制信号。

将FPGA扩展板接口IO162,用数据线与H57连接,对应74LS198CLK时钟控制信号。

实验连线表如下:

FPGA扩展板接口

左侧板接口

I01(输入[31:24]位)

J2(扩展板二进制开关S9-S16

I02(输入[23:16]位)

 J4(扩展板二进制开关S17-S24

IO9(输入[15:8]位)

J5(扩展板二进制开关S25-S32

IO10(输入[7:0]位)

J10(扩展板二进制开关S40-S47

I07(输出[31:24]位)

J3(扩展板L17-L24

I08(输出[23:16]位)

J11(扩展板L42-L57

IO15(输出[15:8]位)

J12(扩展板L58-L65

IO16(输出[7:0]位)

M04(母板L1-L8

I0188(寄存器工作脉冲)

时序单元PLS1

I0191(OUT

H3(二进制开关)

I0193(X1

H2(二进制开关)

I0197(X0

H1(二进制开关)

I0160(CLR

H0(二进制开关)

IO162(nRST

H57

把ALTERA下载器一端连到微机的并口,一端连接到FPGA扩展区的JTAG口,打开实验系统电源,把计算机组成原理32位\实验5 寄存器内容无进位位左移文件夹中的regist32.sof程序下载到FPGA。

二进制开关作为数据输入通道,置42424242H(对应开关如下表)。

S9

S10

S11

S12

S13

S14

S15

S16

数据总线值

A31

A30

A29

A28

A27

A26

A25

A24

A[31:24]位数据

0

1

0

0

0

0

1

0

42H

S17

S18

S19

S20

S21

S22

S23

S24

数据总线值

A23

A22

A21

A20

A19

A18

A17

A16

A[23:16]位数据

0

1

0

0

0

0

1

0

42H

S25

S26

S27

S28

S29

S30

S31

S32

数据总线值

A15

A14

A13

A12

A11

A10

A9

A8

A[15:8]位数据

0

1

0

0

0

0

1

0

42H

S40

S41

S42

S43

S44

S45

S46

S47

数据总线值

A7

A6

A5

A4

A3

A2

A1

A0

A[7:0]位数据

0

1

0

0

0

0

1

0

42H

置各控制信号如下:

H3

H2

H1

H0

OUT

X1

X0

CLREN

0

1

1

1

按脉冲单元中的PLS1脉冲按键,在CLK上产生一个上升沿,把42424242H打入通用寄存器,此时微指令总线上的指示灯应该显示为42424242H,

再改变各控制信号如下:

H3

H2

H1

H0

OUT

X1

X0

CLREN

0

0

1

1

按脉冲单元中的PLS1脉冲按键,此时总线上的LED指示灯应该显示84848484H。

再按脉冲单元中的PLS1脉冲按键,使通用寄存器中的值左移,此时总线上的LED指示灯应该显示为09090909H。若一直按PLS1,在总线上将看见数据循环左移的现象。

实验六  寄存器内容无进位位右移实验

一、通用寄存器单元的工作原理:

通用寄存器单元的核心部件为4片74LS198,它具有锁存、左移、右移、保存等功能。各个功能都由X1、X2信号和工作脉冲CLK来决定。X0=1、X1=1,CLK有上升沿时,把总线上的数据打入通用寄存器。可通过设置X0、X1来指定通用寄存器工作方式。

输出缓冲器采用74LS244,,把通用寄存器内容输出到总线。

控制信号说明

信号名称

作     

有效电平

X0、X1

通用寄存器的工作模式

见附表

OUT

16位输出控制信号

低电平

CLK

通用寄存器工作脉冲

上升延有效

二、实验步骤

将右板中间的计算机组成原理连线板拔下,换成8位/16位/32位计算机组成原理与系统结构 扩展板。

把IO1(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J2插座相连(对应二进制开关S9~S16);把IO2(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J4插座相连(对应二进制开关S17~S24);把IO9(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J5插座相连(对应二进制开关S25~S32);把IO10(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J10插座相连(对应二进制开关S40~S47)。(S9~S16,S17~S24,S25~S32,S40~S47为32位数据输入)。

把IO7(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的J3插座相连(对应LED灯,L17-L24);把IO8(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上J11插座相连(对应LED灯L42-L57);把IO15(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的J12插座相连(对应LED灯,L58-L65),把IO16(8芯的盒型插座,FPGA扩展实验区)与母板上微指令单元M04插座相连(对应微指令LED灯L1-L8),扩展板上L17-L24,L42-L57,L58-L65及母板上L1-L16,为32位数据输出。

将FPGA扩展板接口IO188,用数据线与右板二进制开关单元PLS1连接,对应74LS198CLK时钟控制信号。

将FPGA扩展板接口IO191,用数据线与右板二进制开关单元H3连接,对应74LS198输出控制信号。

将FPGA扩展板接口IO193,用数据线与右板二进制开关单元H2连接,对应74LS198X1控制信号。

将FPGA扩展板接口IO197,用数据线与右板二进制开关单元H1连接,对应74LS198X0控制信号。

将FPGA扩展板接口IO160,用数据线与左板二进制开关单元H0连接,对应74LS198CLR清0控制信号。

将FPGA扩展板接口IO162,用数据线与H57连接,对应74LS198CLK时钟控制信号。实验连线表如下:

FPGA扩展板接口

左侧板接口

I01(输入[31:24]位)

J2(扩展板二进制开关S9-S16

I02(输入[23:16]位)

 J4(扩展板二进制开关S17-S24

IO9(输入[15:8]位)

J5(扩展板二进制开关S25-S32

IO10(输入[7:0]位)

J10(扩展板二进制开关S40-S47

I07(输出[31:24]位)

J3(扩展板L17-L24

I08(输出[23:16]位)

J11(扩展板L42-L57

IO15(输出[15:8]位)

J12(扩展板L58-L65

IO16(输出[7:0]位)

M04(母板L1-L8

I0188(寄存器工作脉冲)

时序单元PLS1

I0191(OUT

H3(二进制开关)

I0193(X1

H2(二进制开关)

I0197(X0

H1(二进制开关)

I0160(CLR

H0(二进制开关)

IO162(nRST

H57

把ALTERA下载器一端连到微机的并口,一端连接到FPGA扩展区的JTAG口,打开实验系统电源,把计算机组成原理32位\实验6 寄存器内容无进位位右移文件夹中的regist32.sof程序下载到FPGA。

二进制开关作为数据输入,置42424242H(对应开关如下表)。

S9

S10

S11

S12

S13

S14

S15

S16

数据总线值

A31

A30

A29

A28

A27

A26

A25

A24

A[31:24]位数据

0

1

0

0

0

0

1

0

42H

S17

S18

S19

S20

S21

S22

S23

S24

数据总线值

A23

A22

A21

A20

A19

A18

A17

A16

A[23:16]位数据

0

1

0

0

0

0

1

0

42H

S25

S26

S27

S28

S29

S30

S31

S32

数据总线值

A15

A14

A13

A12

A11

A10

A9

A8

A[15:8]位数据

0

1

0

0

0

0

1

0

42H

S40

S41

S42

S43

S44

S45

S46

S47

数据总线值

A7

A6

A5

A4

A3

A2

A1

A0

A[7:0]位数据

0

1

0

0

0

0

1

0

42H

置各控制信号如下:

H3

H2

H1

H0

OUT

X1

X0

CLREN

0

1

1

1

按脉冲单元中的PLS1脉冲按键,在CLK上产生一个上升沿,把42424242H打入通用寄存器,此时微指令总线上的指示灯应该显示为42424242H,

再改变各控制信号如下:

H3

H2

H1

H0

OUT

X1

X0

CLREN

0

1

0

1

按脉冲单元中的PLS1脉冲按键,此时总线上的LED指示灯应该显示为21212121H。

按脉冲单元中的PLS1脉冲按键,使通用寄存器中的值右移,此时总线上的LED指示灯应该显示为90909090H。若一直按PLS1,在总线上将看见数据循环右移的现象。

附:通用寄存器的逻辑

通用寄存器(8位并入并出移位寄存器)

CLR

X1   X0

CLK

SL  SR

QA~AH

0

X    X

X

X   X

全 0

1

X    X

0

X   X

保持不变

1

1     1

上升沿

X   X

并行接数A~H

1

0     1

上升沿

X   0

右移 移入0

1

0     1

上升沿

X   1

右移 移入1

1

1     0

上升沿

0   X

左移 移入0

1

1     0

上升沿

1   X

左移 移入1

实验七  32位ALU实验

一、实验要求

用扩展实验板上的开关做为输入,二进制开关及八段数码管做为输出。用VHDL语言编写程序下载到EP2C5Q08中实现32位模型机的ALU功能。

了解32位模型机中算术逻辑运算单元ALU的工作原理和实现方法。学习用VHDL语言描述硬件逻辑,学习使用EDA开发环境。

二、实验目的

32位ALU的VHDL:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY alu32 IS

PORT (

  A         : IN    STD_LOGIC_VECTOR(32 DOWNTO 1); 

  W         : IN    STD_LOGIC_VECTOR(32 DOWNTO 1);  

  S0        : IN    STD_LOGIC;                     

  S1        : IN    STD_LOGIC;                     

  S2        : IN    STD_LOGIC;                    

  D         : OUT   STD_LOGIC_VECTOR(32 DOWNTO 1); 

  CIn       : IN    STD_LOGIC;                    

  COut      : OUT   STD_LOGIC                      

);

END alu32;

ARCHITECTURE behv OF alu32 IS

SIGNAL T: STD_LOGIC_VECTOR(33 DOWNTO 1);    

BEGIN

    T <= ('0' & A) + ('0' & W)          WHEN S2 = '0' AND S1 = '0' AND S0 = '0' ELSE

         ('0' & A) - ('0' & W)          WHEN S2 = '0' AND S1 = '0' AND S0 = '1' ELSE

         ('0' & A) OR ('0' & W)         WHEN S2 = '0' AND S1 = '1' AND S0 = '0' ELSE

         ('0' & A) AND ('0' & W)        WHEN S2 = '0' AND S1 = '1' AND S0 = '1' ELSE

         ('0' & A) + ('0' & W) + CIn WHEN S2 = '1' AND S1 = '0' AND S0 = '0' ELSE

         ('0' & A) - ('0' & W) - CIn   WHEN S2 = '1' AND S1 = '0' AND S0 = '1' ELSE

               NOT ('0' & A)                  WHEN S2 = '1' AND S1 = '1' AND S0 = '0' ELSE

               ('0' & A);

       D    <= T(32 DOWNTO 1);

       COut <= T(33);

END behv;

在上面程序中A为累加器,W为工作寄存器,均为32位寄存器。W的值由扩展板上J1,J13,J14及母板上J01对应的四组开关共32位输入,显示在对应的二进制LED灯上。A的值由扩展板J2,J4,J5,J10对应的四组二进制开关输入。S0 S1 S2为运算控制位,根据S0 S1 S2 的不同,ALU实现的功能参见下表。D为运算结果输出显示在扩展板J3,J11,J12及母板M04开关组对应的32位二进制LED上, CIn为进位输入, COut为进位输出。

S2

S1

S0

ALU实现的功能

0

0

0

运算结果为A加W

0

0

1

运算结果为A减W

0

1

0

运算结果为A逻辑或W

0

1

1

运算结果为A逻辑与W

1

0

0

运算结果为A加W加进位

1

0

1

运算结果为A减W减进位

1

1

0

运算结果为A取反

1

1

1

运算结果为A(A直接输出)

四、实验步骤

1 连线

把IO1(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J2插座相连(对应二进制开关S9~S16);把IO2(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J4插座相连(对应二进制开关S17~S24);把IO9(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J5插座相连(对应二进制开关S25~S32);把IO10(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J10插座相连(对应二进制开关S40~S47)。(S9~S16,S17~S24,S25~S32,S40~S47为32位数据输入通道1)。

把IO5(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J1插座相连(对应二进制开关S1~S8);把IO6(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J13插座相连(对应二进制开关S33~S48);把IO13(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J14插座相连(对应二进制开关S49~S56);把IO14(8芯的盒型插座,FPGA扩展实验区)与母板上的二进制开关单元中J01插座相连(对应二进制开关H16~H23)。(S1~S8,S33~S48,S49~S56,H16~H23为32位数据输入通道2)。

把IO7(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的J3插座相连(对应LED灯,L17-L24);把IO8(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上J11插座相连(对应LED灯L42-L57);把IO15(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的J12插座相连(对应LED灯,L58-L65),把IO16(8芯的盒型插座,FPGA扩展实验区)与母板上微指令单元M04插座相连(对应微指令LED灯L1-L8),扩展板上L17-L24,L42-L57,L58-L65及母板上L1-L16,为32位数据输出。

把IO191(S2)用连线连到二进制单元的H7上。把IO193(S1)用连线连到二进制单元的H6上。把IO197(S0)用连线连到二进制单元的H5上。

把IO168(CIn)用连线连到母板二进制单元的H4上。

把IO164(Cout)用连线连到母板微指令单元的M7上。

实验连线表如下:

FPGA扩展板接口

左侧板接口

I01(输入A[31:24]位)

J2(扩展板二进制开关S9-S16

I02(输入A[23:16]位)

 J4(扩展板二进制开关S17-S24

IO9(输入A[15:8]位)

J5(扩展板二进制开关S25-S32

IO10(输入A[7:0]位)

J10(扩展板二进制开关S40-S47

I05(输入W[31:24]位)

J1(扩展板二进制开关S1-S8

I06(输入W[23:16]位)

 J13(扩展板二进制开关S33-S48

IO13(输入W[15:8]位)

J14(扩展板二进制开关S49-S56

IO14(输入W[7:0]位)

J01(母板二进制开关H16-H23

I07(输出D[31:24]位)

J3(扩展板L17-L24

I08(输出D[23:16]位)

J11(扩展板L42-L57

IO15(输出D[15:8]位)

J12(扩展板L58-L65

IO16(输出D[7:0]位)

M04(母板L1-L8

IO191(S2), IO193(S1), IO197(S0

母板二进制开关H7,H6,H5

IO168(进位输入CIn

母板二进制开关H4

IO164(进位输出COut

母板母板微指令单元M7

2.充分理解alu32.VHD。了解模型机中ALU的实现原理。

3.把ALTERA下载器一端连到微机的并口,一端连接到FPGA扩展区的JTAG口,打开实验系统电源,把计算机组成原理32位\实验7 32位ALU实验文件夹中的alu32.sof程序下载到FPGA。

4.拨动W对应开关量(扩展板S1-S8,S33-S48,S49-S56,母板H16-H23),输入W值。拨动A对应开关量(扩展板S9-S32, S40-S47),输入A值。拨动H7,H6,H5对应开关,设置运算方式。拨动开关H4,设置进位。观察输入A及W值,观察微指令单元二进制LED指示结果(运算结果)。观察发光二极管L17是否有进位输出。

实验八  32位寄存器实验

一、实验要求 

用计算机组成原理与系统结构扩展实验板上的开关做为输入,发光二极光及八段数码管做为输出。用VHDL语言编写程序下载到EP2C5Q208中实现32位模型机的寄存器输入输出功能。

二、实验目的

了解32位模型机中寄存器的工作原理和实现方法。学习用VHDL语言描述硬件逻辑。学习使用EDA开发环境。

三、实验说明

32位寄存器的VHDL:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY reg32_1 IS

PORT (

  D  : IN  STD_LOGIC_VECTOR(32 DOWNTO 1); 

  R  : OUT STD_LOGIC_VECTOR(32 DOWNTO 1);

  EN : IN  STD_LOGIC;                         

  nRST: IN  STD_LOGIC;                         

  CLK: IN  STD_LOGIC                         

);

END  reg32_1;

ARCHITECTURE behv OF reg32_1 IS

BEGIN

  PROCESS(CLK, nRST, EN)

  BEGIN

        IF nRST = '0' THEN

      R <= (OTHERS=>'0');

        ELSIF CLK'EVENT AND CLK = '1' THEN

      IF (EN = '0') THEN

        R <= D;

      END IF;

    END IF;

  END PROCESS;

END behv;

在上面程序中D为输入数据,R为寄存器,均为32位。D的值由扩展板上J2,J4,J5,J10对应的四组开关共32位提供输入,同时显示在DIS9-DIS16八个数码管上。R为内部寄存器,显示在J3,J11,J12,M04对应的二进制LED灯上,同时显示在DIS1-DIS8八个数码管上。EN为寄存器选通信号,RST为复位信号上,CLK为时钟脉冲。

四、实验步骤

1 连线

把IO1(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J2插座相连(对应二进制开关S9~S16);把IO2(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J4插座相连(对应二进制开关S17~S24);把IO9(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J5插座相连(对应二进制开关S25~S32);把IO10(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J10插座相连(对应二进制开关S40~S47)。(S9~S16,S17~S24,S25~S32,S40~S47为32位数据输入数据)。

把IO7(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的J3插座相连(对应LED灯,L17-L24);把IO8(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上J11插座相连(对应LED灯L42-L57);把IO15(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的J12插座相连(对应LED灯,L58-L65),把IO16(8芯的盒型插座,FPGA扩展实验区)与母板上微指令单元M04插座相连(对应微指令LED灯L1-L8),扩展板上L17-L24,L42-L57,L58-L65及母板上L1-L16,为32位数据输出。

将FPGA扩展板接口IO188(CLK),用数据线与母板二进制开关单元PLS1连接。

将FPGA扩展板接口IO191(EN),用数据线与母板二进制开关单元H7连接。

将FPGA扩展板接口IO193(nRST),用数据线与H57连接。

本实验增加了数码管显示输入输出寄存器功能,若要数码管与二进制LED灯同时显示,请进行如下连接:

将FPGA扩展板接口IO5与扩展板J9相连,IO6与J6相连,IO13与J7相连,IO14与J8相连。

实验连线表如下:

FPGA扩展板接口

左侧板接口

I01(输入D[31:24]位)

J2(扩展板二进制开关S9-S16

I02(输入D[23:16]位)

 J4(扩展板二进制开关S17-S24

IO9(输入D[15:8]位)

J5(扩展板二进制开关S25-S32

IO10(输入D[7:0]位)

J10(扩展板二进制开关S40-S47

I07(输出R[31:24]位)

J3(扩展板L17-L24

I08(输出R[23:16]位)

J11(扩展板L42-L57

IO15(输出R[15:8]位)

J12(扩展板L58-L65

IO16(输出R[7:0]位)

M04(母板L1-L8

IO188(输入寄存器时钟CLK

时序单元PLS1

IO191(EN

H7

IO193(nRST

H57

IO5(输入D数码管数据)

J9

IO6(输出R数码管扫描选通)

J6

IO13(输出R数码管数据)

J7

IO14(输入D数码管扫描选通)

J8

2.充分理解reg3_1.VHD。了解模型机中REG的实现原理。

3.把ALTERA下载器一端连到微机的并口,一端连接到FPGA扩展区的JTAG口,打开实验系统电源,把计算机组成原理32位\实验8 32位寄存器实验 文件夹中的reg32_1.sof程序下载到FPGA。

4.按下SB1键,输出“复位”信号,观察八位八段管 (R寄存器的输出显示)是否清零;松开SB1。拨动S9-S32,S40-S47(输入数据 D的值),观察八位八段管DIS9-DIS16 (显示D值)的变化。拨动H7正下方对应开关,设置寄存器选通信号“EN”为有效状态(“0”有效),按PLS1键,产生一个时钟信号,观察J3,J11,J12,M04对应的二进制LED灯及DIS1-DIS8八个数码管,看看是否将D的值存入寄存器R中并显示出来。拨动开关组J2,J4,J5,J10改变D的值,再将“EN”置于无效状态(“1”位置),按PLS1键,产生一个时钟信号,观察J3,J11,J12,M04对应的二进制LED灯及DIS1-DIS8八个数码管是否会随着改变。

实验九   32位寄存器组实验

一、实验要求 

用计算机组成原理与系统结构扩展实验板上的开关做为输入,发光二极光及八段数码管做为输出。用VHDL语言编写程序下载到EP2C5Q208中实现32位模型机的多个寄存器输入输出功能。

二、实验目的

了解32位模型机中寄存器组的工作原理和实现方法。学习用VHDL语言描述硬件逻辑。学习使用EDA开发环境。

三、实验说明

32位寄存器组的VHDL:

LIBRARY IEEE; 
USE IEEE.STD_LOGIC_1164.ALL; 
ENTITY regs32 IS 
PORT ( D  : IN  STD_LOGIC_VECTOR(32 DOWNTO 1);  R  : OUT STD_LOGIC_VECTOR(32 DOWNTO 1);  SA : IN  STD_LOGIC;                            SB : IN  STD_LOGIC;                          RD : IN  STD_LOGIC;                          WR : IN  STD_LOGIC;                          nRST: IN  STD_LOGIC;                         CLK: IN  STD_LOGIC                          
); 
END regs32; 
ARCHITECTURE behv OF regs32 IS 
SIGNAL R0, R1, R2, R3: STD_LOGIC_VECTOR(32 DOWNTO 1); 
BEGIN 
--WIRTE R0、R1、R2、R3 -- R0 PROCESS(CLK,nRST,WR,SA,SB) BEGIN IF nRST = '0' THEN R0 <= (OTHERS=>'0'); ELSIF CLK'EVENT AND CLK = '1' THEN IF (WR = '0') AND (SB = '0') AND (SA = '0') THEN R0 <= D; END IF; END IF; END PROCESS; -- R1 PROCESS(CLK,nRST,WR,SA,SB) BEGIN IF nRST = '0' THEN R1 <= (OTHERS=>'0'); ELSIF CLK'EVENT AND CLK = '1' THEN IF (WR = '0') AND (SB = '0') AND (SA = '1') THEN R1 <= D; END IF; END IF; END PROCESS; -- R2 PROCESS(CLK,nRST,WR,SA,SB) BEGIN IF nRST = '0' THEN R2 <= (OTHERS=>'0'); ELSIF CLK'EVENT AND CLK = '1' THEN IF (WR = '0') AND (SB = '1') AND (SA = '0') THEN R2 <= D; END IF; END IF; END PROCESS; -- R3 PROCESS(CLK,nRST,WR,SA,SB) BEGIN IF nRST = '0' THEN R3 <= (OTHERS=>'0'); ELSIF CLK'EVENT AND CLK = '1' THEN IF (WR = '0') AND (SB = '1') AND (SA = '1') THEN R3 <= D; END IF; END IF; END PROCESS; --READ R0、R1、R2、R3 R <= R0 WHEN (SB = '0') AND (SA = '0') AND (RD = '0') ELSE R1 WHEN (SB = '0') AND (SA = '1') AND (RD = '0') ELSE R2 WHEN (SB = '1') AND (SA = '0') AND (RD = '0') ELSE R3 WHEN (SB = '1') AND (SA = '1') AND (RD = '0') ELSE (OTHERS=>'0'); 
END behv;

在上面程序中,D为输入32位数据寄存器。D的值由扩展板上J2,J4,J5,J10对应的四组开关共32位提供输入,同时显示在DIS9-DIS16八个数码管上。R0..R3为内部寄存器,R用做内部寄存器显示输出,显示在J3,J11,J12,M04对应的二进制LED灯上,同时显示在DIS1-DIS8八个数码管上。SA、SB为寄存器选择控制信号,RD为寄存器读信号,WR为寄存器写信号,nRST为复位信号,CLK为时钟脉冲。

四、实验步骤

1.连线

把IO1(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J2插座相连(对应二进制开关S9~S16);把IO2(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J4插座相连(对应二进制开关S17~S24);把IO9(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J5插座相连(对应二进制开关S25~S32);把IO10(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J10插座相连(对应二进制开关S40~S47)。(S9~S16,S17~S24,S25~S32,S40~S47为32位数据输入)。

把IO5(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的J9插座相连(对应LED灯,L17-L24);把IO6(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上J6插座相连(对应LED灯L42-L57);把IO13(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的J7插座相连(对应LED灯,L58-L65),把IO14(8芯的盒型插座,FPGA扩展实验区)与母板上微指令单元J8插座相连(对应微指令LED灯L1-L8),扩展板上L17-L24,L42-L57,L58-L65及母板上L1-L16,为32位数据输出。

将FPGA扩展板接口IO188(CLK),用数据线与右板二进制开关单元PLS1连接,对应CLK。

将FPGA扩展板接口IO193(nRST),用数据线与扩展板按键开关H57连接。

将FPGA扩展板接口IO197(SA),用数据线与母板二进制开关单元H7连接。

将FPGA扩展板接口IO168(SB),用数据线与母板二进制开关单元H6连接。

将FPGA扩展板接口IO164(RD),用数据线与母板二进制开关单元H5连接。

将FPGA扩展板接口IO162(WR),用数据线与母板二进制开关单元H4连接。

将将FPGA扩展板接口IO7与扩展板J3相连,IO8与J11相连,IO15与J12相连,IO16与M04相连。

实验连线表如下:

FPGA扩展板接口

左侧板接口

I01(输入D[31:24]位)

J2(扩展板二进制开关S9-S16

I02(输入D[23:16]位)

 J4(扩展板二进制开关S17-S24

IO9(输入D[15:8]位)

J5(扩展板二进制开关S25-S32

IO10(输入D[7:0]位)

J10(扩展板二进制开关S40-S47

I07(输出R[31:24]位)

J3(扩展板L17-L24

I08(输出R[23:16]位)

J11(扩展板L42-L57

IO15(输出R[15:8]位)

J12(扩展板L58-L65

IO16(输出R[7:0]位)

M04(母板L1-L8

IO188(输入寄存器时钟CLK

时序单元PLS1

IO193(nRST

H57

IO197(SA

H7

IO168(SB

H6

IO164(RD

H5

IO162(WR

H4

IO5(输入数码管数据)

J9

IO6(输出数码管扫描选通)

J6

IO13(输出数码管数据)

J7

IO14(输入数码管扫描选通)

J8

2.充分理解regs32.VHD。了解模型机中REGS的实现原理。

3.把ALTERA下载器一端连到微机的并口,一端连接到FPGA扩展区的JTAG口,打开实验系统电源,把计算机组成原理32位\实验9 32位寄存器组实验 文件夹中的regs32.sof程序下载到FPGA。

4.按下SB1键,输出复位信号,观察32位LED显示及八位八段管 (R寄存器的输出显示)是否清零;松开SB1。然后将H5(RD信号)、H4(WR信号)位置成“1”状态,使读写信号都处于无效状态。

5.寄存器组写实验:拨动S9-S32,S40-S47,输入D的值,拨动H7,H6,设成“00”,选择寄存器R0。拨动H4,设置寄存器写信号“WR”为有效状态(0有效),按PLS1键,产生一个时钟信号,将D写入寄存器R0中。拨动S9-S32,S40-S47开关,改变D值,再改变H7,H6,设成01,选择寄存器R1,按PLS1键,产生一个时钟信号,将D存入寄存器R1中。如此将不同的32位数据分别存R0..R3寄存器中;

6.寄存器组读实验:将H4“WR”信号设成“1”,使其无效。将H7,H6拨成“00”,选择寄存器R0。再将H5(“RD”信号)设成“0”,读出R0中的数据并输出到J3,J11,J12,M04对应的发光二极管和八段管DIS1-DIS8上显示。改变H7,H6,选择寄存器R1,读出R1的值并显示出来。如此读出寄存器R2、R3的值,并观察与写入的数据是否相同。

实验十  32位程序计数器 PC实验 

一、实验要求  

用计算机组成原理与系统结构扩展实验板上的开关做为输入,发光二极光及八段数码管做为输出。用VHDL语言编写程序下载到EP2C5Q208中实现32位模型机的程序计数器功能。

二、实验目的

了解32位模型机中程序计数器PC的工作原理和实现方法。学习用VHDL语言描述硬件逻辑。学习使用EDA开发环境。

三、实验说明

32位程序计数器PC的VHDL:

LIBRARY IEEE; 
USE IEEE.STD_LOGIC_1164.ALL; 
USE IEEE.STD_LOGIC_UNSIGNED.ALL; 
ENTITY pccnt IS 
PORT ( D   : IN  STD_LOGIC_VECTOR(32 DOWNTO 1);  PC  : OUT STD_LOGIC_VECTOR(32 DOWNTO 1);    C   : IN  STD_LOGIC;                          Z   : IN  STD_LOGIC;                          ELP : IN  STD_LOGIC;                          PC_1: IN  STD_LOGIC;                           IR2 : IN  STD_LOGIC;                           IR3 : IN  STD_LOGIC;                           nRST : IN  STD_LOGIC;                          CLK : IN  STD_LOGIC                          
); 
END pccnt; 
ARCHITECTURE behv OF pccnt IS 
SIGNAL RPC: STD_LOGIC_VECTOR(32 DOWNTO 1); 
BEGIN PC <= RPC; PROCESS(CLK, nRST, IR3, IR2, C, Z, ELP) VARIABLE LDPC: STD_LOGIC; --  转移控制 BEGIN IF nRST = '1' THEN RPC <= (OTHERS=>'0'); ELSIF CLK'EVENT AND CLK = '1' THEN IF (ELP = '0') AND ( ( (IR3 = '0') AND (IR2 = '0') AND (C = '1') ) OR ( (IR3 = '0') AND (IR2 = '1') AND (Z    = '1') ) OR (IR3 = '1') ) THEN LDPC := '0'; ELSE LDPC := '1'; END IF; IF LDPC = '0' THEN RPC <= D; ELSIF (PC_1 = '1') THEN   RPC <= RPC + 1; END IF; END IF; END PROCESS; 
END behv;

在上面程序中,D为32位输入数据,用于表示跳转条件满足时跳转的目标地址。D的值由扩展板上J2,J4,J5,J10对应的四组开关共32位提供输入,同时显示在DIS9-DIS16八个数码管上。PC为程序计数器,PC显示在J3,J11,J12,M04对应的二进制LED灯上,同时显示在DIS1-DIS8八个数码管上。 C、Z用于模拟模型机中的进位标志和零标志信号。ELP为程序跳转控制信号,为“1”时不允许预置PC;为“0”时根据指令码的第3、2位和C、Z状态来控制程序是否跳转,见下表说明。PC_1表示PC加1控制信号。IR2、IR3表示程序指令的第2位和第3位,在本模型机实验中这两个用于控制程序的跳转。nRST为复位信号,CLK为时钟脉冲。

ELP()

IR3()

IR2()

C()

Z()

LDPC

1

x

x

x

x

1

0

0

0

1

x

0

0

0

0

0

1

1

0

0

1

x

0

0

0

0

1

x

x

1

0

1

x

x

x

0

上表中LDPC为内部信号,用于控制PC是否能被预置:

当ELP=1时,LDPC=1,不允许PC被预置;

当ELP=0时,LDPC由IR3、IR2、C、Z确定;

当IR3、IR2=1X时,LDPC=0,D的值在CLK上升沿锁存PC,实现程序的JMP直接跳转功能; 

当IR3、IR2=00时,LDPC=C取反,当C=1时,D的值在CLK上升沿锁存PC,实现程序的JC有进位跳转功能;

当IR3、IR2=01时,LDPC=Z取反,当Z=1时,D的值在CLK上升沿锁存PC,实现程序的JZ累加器为零跳转功能;

本实验中nRST=0时,程序计数器PC被清0,当LDPC=0时,在CLK上升沿,D的值锁存PC。当PC_1=1  时,在CLK上升沿PC加1。

四、实验步骤

1.连线

把IO1(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J2插座相连(对应二进制开关S9~S16);把IO2(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J4插座相连(对应二进制开关S17~S24);把IO9(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J5插座相连(对应二进制开关S25~S32);把IO10(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的二进制开关单元中J10插座相连(对应二进制开关S40~S47)。(S9~S16,S17~S24,S25~S32,S40~S47为32位数据输入)。

把IO7(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的J3插座相连(对应LED灯,L17-L24);把IO8(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上J11插座相连(对应LED灯L42-L57);把IO15(8芯的盒型插座,FPGA扩展实验区)与计算机组成原理与系统结构扩展板上的J12插座相连(对应LED灯,L58-L65),把IO16(8芯的盒型插座,FPGA扩展实验区)与母板上微指令单元M04插座相连(对应微指令LED灯L1-L8),扩展板上L17-L24,L42-L57,L58-L65及母板上L1-L16,为32位数据输出。

将FPGA扩展板接口IO188(CLK),用数据线与右板二进制开关单元PLS1连接,对应CLK。

将FPGA扩展板接口IO191(nRST),用数据线与扩展板H57连接。

将FPGA扩展板接口IO193(ELP),用数据线与母板二进制开关单元H7连接。

将FPGA扩展板接口IO197(PC_1),用数据线与母板二进制开关单元H6连接。

将FPGA扩展板接口IO168(IR2),用数据线与母板二进制开关单元H5连接。

将FPGA扩展板接口IO164(IR3),用数据线与母板二进制开关单元H4连接。

将FPGA扩展板接口IO162(C),用数据线与母板二进制开关单元H3连接。

将FPGA扩展板接口IO160(Z),用数据线与母板二进制开关单元H2连接。

将将FPGA扩展板接口IO5与扩展板J9相连,IO6与J6相连,IO13与J7相连,IO14与J8相连。

实验连线表如下:

FPGA扩展板接口

左侧板接口

I01(输入D[31:24]位)

J2(扩展板二进制开关S9-S16

I02(输入D[23:16]位)

 J4(扩展板二进制开关S17-S24

IO9(输入D[15:8]位)

J5(扩展板二进制开关S25-S32

IO10(输入D[7:0]位)

J10(扩展板二进制开关S40-S47

I07(输出PC[31:24]位)

J3(扩展板L17-L24

I08(输出PC [23:16]位)

J11(扩展板L42-L57

IO15(输出PC [15:8]位)

J12(扩展板L58-L65

IO16(输出PC [7:0]位)

M04(母板L1-L8

IO188(输入寄存器时钟CLK

时序单元PLS1

IO191(nRST

H57

IO193(ELP

H7

IO197(PC_1

H6

IO168(IR2

H5

IO164(IR3

H4

IO162(C

H3

IO160(Z

H2

IO5(输入数码管数据)

J9

IO6(输出数码管扫描选通)

J6

IO13(输出数码管数据)

J7

IO14(输入数码管扫描选通)

J8

2.充分理解pccnt.VHD。了解模型机中中断的实现原理。

3.把ALTERA下载器一端连到微机的并口,一端连接到FPGA扩展区的JTAG口,打开实验系统电源,把计算机组成原理32位\实验10 32位指令计数器PC实验 文件夹中的pccnt.sof程序下载到FPGA。

4.按下SB1键,输出复位信号,观察32位LED显示及八位八段管 (PC计数器的输出显示)是否清零;松开SB1。

5.PC+1实验:将H7(ELP信号)、H6(PC_1信号)置成“1”状态,使跳转控制信号处于PC+1状态,控制信号如下表:

H7

H6

H5

H4

H3

H2

ELP

PC_1

IR2

IR3

C

Z

1

1

0

0

0

0

按PLS1键,产生一个时钟信号,观察J1,J13,J14,J01输出的32位LED及八段管DIS1-DIS8的显示,看看PC是否加1。再按PLS1键,观察PC是否再次加1。

6.直接跳转实验: 拨动S9-S32,S40-S47,输入D的值,设置跳转的目标地址为02020202H。拨动H7位设成“0”,  使ELP信号为低。拨动H4将其设成“1”,使IR3为高,将跳转控制设成直接跳转方式。控制信号如下表:

H7

H6

H5

H4

H3

H2

ELP

PC_1

IR2

IR3

C

Z

0

1

0

1

0

0

按PLS1键,产生一个时钟信号,观察输出显示的PC值(LED灯扩展板JL17-L24, L42-L65,母板L1-L8及数码管DIS1-DIS8),是否转到目标地址02020202H。

7.条件跳转实验1:拨动S9-S32,S40-S47,输入D的值,设置跳转的目标地址为81818181H。拨动H5,H4使IR2、IR3置成“00”,将跳转控制设置成判进位跳转方式。将H3(C)设置成“1”,表示有进位,控制信号如下表:

H7

H6

H5

H4

H3

H2

ELP

PC_1

IR2

IR3

C

Z

0

1

0

0

1

0

按PLS1键,产生一个时钟信号,观察输出显示,看看PC是否转到D所指定的目标地址81818181H。再将H3(C)拨成“0”,表示无进位。控制信号如下表:

H7

H6

H5

H4

H3

H2

ELP

PC_1

IR2

IR3

C

Z

0

1

0

0

0

0

按PLS1键,观察八段管输出显示,看看PC是否加1。

8.条件跳转实验2:拨动H5,H4使IR3、IR2置成“01”,将跳转控制设置成判零跳转方式。将H2(Z)设置成“1”,表示累加器为零,控制信号如下表:

H7

H6

H5

H4

H3

H2

ELP

PC_1

IR2

IR3

C

Z

0

1

1

0

0

1

按PLS1键,产生一个时钟信号,观察输出LED及数码管的显示,看看输出显示的PC值(数码管DIS1-DIS8)是否转到D所指定的目标地址(即数码管DIS1-DIS8显示值与DIS9-DIS16显示值相同)。再将H2(Z)拨成“0”,表示累加器不为零,控制信号如下表:

H7

H6

H5

H4

H3

H2

ELP

PC_1

IR2

IR3

C

Z

0

1

1

0

0

0

按PLS1键,产生一个时钟信号,观察输出LED及数码管的显示,看看PC是否加1。

实验十一   中断控制实验

一、实验要求

用计算机组成原理与系统结构扩展实验板上的开关做为输入,发光二极光及八段数码管做为输出。用VHDL语言编写程序下载到EP2C5Q208中实现32位模型机中断控制功能。

二、实验目的

了解32位模型机中中断控制的工作原理和实现方法。学习用VHDL语言描述硬件逻辑。学习使用EDA开发环境。

三、实验说明

32位模型机中断控制的VHDL:

LIBRARY IEEE; 
USE IEEE.STD_LOGIC_1164.ALL; 
ENTITY int32 IS 
PORT ( IREN : IN  STD_LOGIC;   EINT : IN  STD_LOGIC;   ICEN : OUT STD_LOGIC;   ACK  : OUT STD_LOGIC;  REQ  : OUT STD_LOGIC;  nRST  : IN  STD_LOGIC;   I_REQ: IN  STD_LOGIC;   CLK  : IN  STD_LOGIC   
); 
END int32; 
ARCHITECTURE behv OF int32 IS 
SIGNAL R_REQ, R_ACK: STD_LOGIC; 
SIGNAL FATCH_INT: STD_LOGIC; 
BEGIN REQ  <= R_REQ; ACK  <= R_ACK; ICEN <= FATCH_INT; PROCESS(I_REQ, nRST, EINT) BEGIN IF (EINT = '0') OR (nRST = '0') THEN R_REQ <= '0'; ELSIF I_REQ'EVENT AND I_REQ = '1' THEN R_REQ <= '1'; END IF; END PROCESS; PROCESS(CLK, nRST, EINT, IREN, R_REQ, R_ACK, FATCH_INT) BEGIN IF (IREN = '0') AND (R_REQ = '1') AND (R_ACK = '0') THEN FATCH_INT <= '0'; ELSE FATCH_INT <= '1'; END IF; IF (EINT = '0') OR (nRST = '0') THEN R_ACK <= '0'; ELSIF CLK'EVENT AND CLK = '1' THEN IF FATCH_INT = '0' THEN R_ACK <= R_REQ; END IF; END IF; END PROCESS; 
END behv;

在上面程序中,IREN表示程序执行过程中的取指令操作。中断请求信号只有在此信号有效时(取指令时)才会被响应。IENT用于在中断返回时,清除中断请求寄存器和中断响应寄存器。ICEN为输出信号,此信号用于控制读中断指令。ACK为中断响应信号,REQ为中断请求信号。nRST为复位信号。I_REQ为中断申请输入信号。CLK为时钟脉冲。

四、实验步骤

1.连线

将FPGA扩展板接口IO188(CLK),用数据线与母板时序单元PLS1连接,对应CLK。

将FPGA扩展板接口IO191(nRST),用数据线与扩展板H57连接。

将FPGA扩展板接口IO193(IREN),用数据线与母板二进制开关单元H7连接。

将FPGA扩展板接口IO197(EINT),用数据线与母板二进制开关单元H6连接。

将FPGA扩展板接口IO168(ICEN),用数据线与母板微指令单元M7连接。

将FPGA扩展板接口IO164(ACK),用数据线与母板微指令单元M6连接。

将FPGA扩展板接口IO162(REQ),用数据线与母板微指令单元M5连接。

将FPGA扩展板接口IO160(I_REQ),用数据线与母板时序单元PLS4连接。

实验连线表如下:

FPGA扩展板接口

左侧板接口

IO188(输入寄存器时钟CLK

时序单元PLS1

IO191(nRST

H57

IO193(IREN

H7

IO197(EINT

H6

IO168(ICEN

M7

IO164(ACK

M6

IO162(REQ

M5

IO160(I_REQ

时序单元PLS4

2.充分理解int32.VHD。了解模型机中中断的实现原理。

3.把ALTERA下载器一端连到微机的并口,一端连接到FPGA扩展区的JTAG口,打开实验系统电源,把计算机组成原理32位\实验11 32位指令计数器PC实验 文件夹中的int32.sof程序下载到FPGA。

4.按下SB1键,输出复位信号。将H7,H6拨到“1”的位置,使IREN和EINT都处于无效状态(低电平有效),将内部的中断请求寄存器、中断响应寄存器都清零使其能响应中断, 控制信号如下表:

H7

H6

IREN

EINT

1

1

5.中断申请:按PLS4键产生中断请求信号申请中断,扩展板上M5对应的发光二极管变亮,表示有中断申请。

6.中断响应:将H7拨成“0”,也就使IREN有效表示取指令操作,控制信号如下表:

H7

H6

IREN

EINT

0

1

扩展板上的M7对应的发光二极管灭(ICEN低电平有效,将中断地址送给PC),表示已经响应中断。

7.中断处理:按PLS1键产生一个时钟信号,扩展板上M7,M6对应的发光二极管亮,表示取指操作取出中断处理指令来执行。

8.中断退出:将H7拨成“1”,IREN置无效。将H6拨成“0”,将EINT置成有效。控制信号如下表:

H7

H6

IREN

EINT

1

0

M7对应的发光二极管亮,M6,M5对应发光管灭,中断请求寄存器和中断响应寄存器清零,表示可以接受下一次中断申请。


📝总结

计算机组成原理领域就像一片广袤而未被完全探索的技术海洋,邀请你勇敢踏足数字世界和计算机组成原理的神秘领域。这是一场结合创造力和技术挑战的学习之旅,从基础概念到硬件实现,逐步揭示更深层次的计算机结构、指令集架构和系统设计的奥秘。渴望挑战计算机组成原理的学习路径和掌握计算机硬件的技能?不妨点击下方链接,一同探讨更多数字技术的奇迹吧。我们推出了引领趋势的💻 计算机组成原理专栏:《机组 | 模块单元实验》,旨在深度探索计算机系统技术的实际应用和创新。🌐💡

相关文章:

【机组】基于FPGA的32位算术逻辑运算单元的设计(EP2C5扩充选配类)

​&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《机组 | 模块单元实验》⏰诗赋清音&#xff1a;云生高巅梦远游&#xff0c; 星光点缀碧海愁。 山川深邃情难晤&#xff0c; 剑气凌云志自修。 目录 一、实验目的 二、实验要求 …...

Asp .Net Core 系列:Asp .Net Core 集成 NLog

简介 NLog是一个基于.NET平台编写的日志记录类库&#xff0c;它可以在应用程序中添加跟踪调试代码&#xff0c;以便在开发、测试和生产环境中对程序进行监控和故障排除。NLog具有简单、灵活和易于配置的特点&#xff0c;支持在任何一种.NET语言中输出带有上下文的调试诊断信息…...

一个基于 .NET 7 + Vue.js 的前后端分离的通用后台管理系统框架 - DncZeus

前言 今天给大家推荐一个基于.NET 7 Vue.js(iview-admin) 的前后端分离的通用后台权限(页面访问、操作按钮控制)管理系统框架&#xff1a;DncZeus。 官方项目简介 DncZeus是一个基于 .NET 7 Vue.js 的前后端分离的通用后台管理系统框架。后端使用.NET 7 Entity Framework…...

更换商品图片日期JSON格式报错 - 序列化与反序列化日期格式设置

报错信息 msg: “服务端异常&#xff0c;请联系管理员JSON parse error: Cannot deserialize value of type java.util.Date from String “2023-11-13 13:13:35”: not a valid representation (error: Failed to parse Date value ‘2023-11-13 13:13:35’: Cannot parse da…...

FastJson、Jackson使用AOP切面进行日志打印异常

FastJson、Jackson使用AOP切面进行日志打印异常 一、概述 1、问题详情 使用FastJson、Jackson进行日志打印时分别包如下错误&#xff1a; 源码&#xff1a; //fastjon log.info("\nRequest Info :{} \n"&#xff0c; JSON.toJSONString(requestInfo)); //jackson …...

嵌入式大厂面试题(2)—— 富士康

从本篇开始将会更新历年来各个公司的面试题与面经&#xff0c;题目来自于网上各个平台以及博主自己遇到的&#xff0c;如果大家有所帮助&#xff0c;帮忙点点赞和关注吧&#xff01; 岗位&#xff1a;嵌入式软件工程师。 面试时间&#xff1a;30分钟。 岗位职责&#xff1a;官网…...

力扣_字符串4—编辑距离

题目 给你两个单词 w o r d 1 word1 word1 和 w o r d 2 word2 word2&#xff0c; 请返回将 w o r d 1 word1 word1 转换成 w o r d 2 word2 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作&#xff1a; 插入一个字符删除一个字符替换一个字符 方法—动…...

MySQL篇----第二十篇

系列文章目录 文章目录 系列文章目录前言一、NULL 是什么意思二、主键、外键和索引的区别?三、你可以用什么来确保表格里的字段只接受特定范围里的值?四、说说对 SQL 语句优化有哪些方法?(选择几条)前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍…...

Promise 基础

Promise 基础 理解 抽象表达&#xff1a; Promise 是一门新的技术&#xff08;ES6 规范&#xff09;Promise 是 Js 中进行异步编程的新的解决方案&#xff08;旧方案是使用回调函数&#xff09; 具体表达 从语法上来说&#xff0c;Promise 是一个构造函数从功能上来说&#x…...

RPA财务机器人之UiPath实战 - 自动化操作Excel进行财务数据汇总与分析之流程建立与数据读取、处理、汇总、分析

一、案例介绍&#xff1a; A公司共有13个开在不同银行的帐户&#xff0c;分别用于不同的业务分部或地区分部收付款。公司总部为了核算每月的收支情况&#xff0c;查看银行在哪个月交易量频繁&#xff0c;需要每月汇总各个银行的帐户借方和贷方金额&#xff0c;并将其净收支&am…...

华为机试真题实战应用【赛题代码篇】-输入整型数组和排序标识/根据排序标识flag给数组排序(附Java、C++和python代码)

目录 问题描述 输出描述: 示例: 代码实现 Java 代码2 代码3 python...

【算法随想录01】环形链表

题目&#xff1a;141. 环形链表 难度&#xff1a;EASY 代码 哈希表遍历求解&#xff0c;表中存储的是元素地址。 时间复杂度 O ( N ) O(N) O(N)&#xff0c;空间复杂度 O ( N ) O(N) O(N) /*** Definition for singly-linked list.* struct ListNode {* int val;* …...

macOS Sonoma 14.3.1(23D60)发布

系统介绍 黑果魏叔2 月 9 日消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 14.3.1 更新&#xff08;内部版本号&#xff1a;23D60&#xff09;&#xff0c;本次更新距离上次发布隔了 17 天。 魏叔 查询苹果官方更新日志&#xff0c;macOS Sonoma 14.3.1 修复内容和 …...

2024-02-11 叮当鸭-平台系统-第三次重构-目标确定

摘要: 对平台系统的第三个版本&#xff0c;做总体规划&#xff0c;明确要达到的目标&#xff0c;功能需求&#xff0c;性能需求。 根据这些所要达到的目标&#xff0c;确定选择何种的方案。方案的成本评估单独进行&#xff0c;本文重点分析要达到的各种目标。 功能需求: 能和…...

Android7.0-Fiddler证书问题

一、将Fiddler的证书导出到电脑&#xff0c;点击Tools -> Options -> HTTPS -> Actions -> Export Root Certificate to Desktop 二、下载Window版openssl&#xff0c; 点击这里打开页面&#xff0c;下拉到下面&#xff0c;选择最上面的64位EXE点击下载安装即可 安…...

Kotlin:单例模式(项目使用实例)

摘要 单例模式主要的五种如下&#xff1a; 饿汉式懒汉式线程安全的懒汉式双重校验锁式&#xff08;Double Check)静态内部类式 一、项目使用单例模式实例场景 app在运行时缓存部分数据&#xff0c;作为全局缓存数据&#xff0c;以便其他页面及时更新页面对应状态的数据&…...

vue百度地图的和element输入框/v-region的联动

vue百度地图的使用 第一步&#xff1a;安装插件第二步&#xff1a;main.js中引用第三步&#xff1a;页面中使用 第一步&#xff1a;安装插件 npm install vue-baidu-map --save第二步&#xff1a;main.js中引用 // 百度地图 import BaiduMap from vue-baidu-map Vue.use(Baid…...

搜索+哈希/平衡树,LeetCode 987. 二叉树的垂序遍历

目录 一、题目 1、题目描述 2、接口描述 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 给你二叉树的根结点 root &#xff0c;请你设计算法计算二叉树的 垂序遍历 序列。 对位于 (row, col) 的每个结点而言&#xff0c;其左右子结…...

蓝桥杯每日一题之内存问题

蓝桥杯真题---内存问题 题目描述&#xff1a; 小蓝最近总喜欢计算自己的代码中定义的变量占用了多少内存空间。 为了简化问题&#xff0c;变量的类型只有以下三种&#xff1a; int&#xff1a;整型变量&#xff0c;一个 int 型变量占用 4 Byte 的内存空间。 long&#xff…...

Django前后端分离之后端实践2

小实践&#xff1a;实现用户登录、注销及ORM管理功能、事务开启小实践 models.py class Books(models.Model):id models.CharField(primary_keyTrue,max_length20,verbose_name"图书ID")name models.CharField(max_length20,verbose_name图书名称)status models…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下&#xff0c;限制某个 IP 的访问频率是非常重要的&#xff0c;可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案&#xff0c;使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...