文档库 最新最全的文档下载
当前位置:文档库 › MIPS单周期CPU实验报告

MIPS单周期CPU实验报告

MIPS单周期CPU实验报告
MIPS单周期CPU实验报告

《计算机组成原理实验》

实验报告

(实验二)

学院名称:

专业(班级):

学生姓名:

学号:

时间:2017 年11 月25 日

成绩 :

实验二:单周期CPU设计与实现

一.实验目的

(1) 掌握单周期CPU数据通路图的构成、原理及其设计方法;

(2) 掌握单周期CPU的实现方法,代码实现方法;

(3) 认识和掌握指令与CPU的关系;

(4) 掌握测试单周期CPU的方法;

(5) 掌握单周期CPU的实现方法。

二.实验内容

设计一个单周期的MIPSCPU,使其能实现下列指令:

==> 算术运算指令

说明:以助记符表示,是汇编指令;以代码表示,是机器指令

功能:rd←rs + rt。reserved为预留部分,即未用,一般填“0”。

符号扩展再参加“加”运算。

(3)sub rd , rs , rt

功能:rd←rs - rt

==> 逻辑运算指令

(4)ori rt , rs ,immediate

功能:rt←rs | (zero-extend)immediate;immediate做“0”扩展再参加“或”运算。

(5)and rd , rs , rt

功能:rd←rs & rt;逻辑与运算。

功能:rd←rs | rt;逻辑或运算。

==>移位指令

==>比较指令

功能:if (rs 存储器读/写指令

(9)sw rt ,immediate(rs) 写存储器

功能:memory[rs+ (sign-extend)immediate]←rt;immediate符号扩展再相加。即将rt寄存器的内容保存到rs寄存器内容和立即数符号扩展后的数相加作为地址的内存单元中。

(10) lw rt , immediate(rs) 读存储器

功能:rt ← memory[rs + (sign-extend)immediate];immediate符号扩展再相加。

即读取rs寄存器内容和立即数符号扩展后的数相加作为地址的内存单元中的数,然后保存到rt寄存器中。

==> 分支指令

特别说明:immediate是从PC+4地址开始和转移到的指令之间指令条数。immediate 符号扩展之后左移2位再相加。为什么要左移2位?由于跳转到的指令地址肯定是4的倍数(每条指令占4个字节),最低两位是“00”,因此将immediate放进指令码中的时候,是右移了2位的,也就是以上说的“指令之间指令条数”。

12)bne rs,rt,immediate

功能:if(rs!=rt) pc←pc + 4 + (sign-extend)immediate <<2 else pc ←pc + 4 特别说明:与beq不同点是,不等时转移,相等时顺序执行。

功能:if(rs>0) pc←pc + 4 + (sign-extend)immediate <<2 else pc ←pc + 4 ==>跳转指令

==> 停机指令

功能:停机;不改变PC的值,PC保持不变。

三.实验原理

1.时间周期:

单周期CPU指的是一条指令的执行在一个时钟周期内完成,然后开始下一条指令的执行,即一条指令用一个时钟周期完成。电平从低到高变化的瞬间称为时钟上升沿,两个相邻时钟上升沿之间的时间间隔称为一个时钟周期。时钟周期一般也称振荡周期(如果晶振的输

出没有经过分频就直接作为CPU的工作时钟,则时钟周期就等于振荡周期。若振荡周期经二分频后形成时钟脉冲信号作为CPU的工作时钟,这样,时钟周期就是振荡周期的两倍。)

CPU在处理指令时,一般需要经过以下几个步骤:

(1) 取指令(IF):根据程序计数器PC中的指令地址,从存储器中取出一条指令,同时,PC根据指令字长度自动递增产生下一条指令所需要的指令地址,但遇到“地址转移”指令时,则控制器把“转移地址”送入PC,当然得到的“地址”需要做些变换才送入PC。

(2) 指令译码(ID):对取指令操作中得到的指令进行分析并译码,确定这条指令需要完成的操作,从而产生相应的操作控制信号,用于驱动执行状态中的各种操作。

(3) 指令执行(EXE):根据指令译码得到的操作控制信号,具体地执行指令动作,然后转移到结果写回状态。

(4) 存储器访问(MEM):所有需要访问存储器的操作都将在这个步骤中执行,该步骤给出存储器的数据地址,把数据写入到存储器中数据地址所指定的存储单元或者从存储器中得到数据地址单元中的数据。

(5) 结果写回(WB):指令执行的结果或者访问存储器中得到的数据写回相应的目的寄存器中。

单周期CPU,是在一个时钟周期内完成这五个阶段的处理。

对于不同的指令,需要执行的步骤是不同的,其中取字指令(lw)需要执行全部五个步骤。因此,CPU的时间周期由取字指令决定。

2.指令类型:

MIPS的三种指令类型:

其中,

op:为操作码;

rs:只读。为第1个源操作数寄存器,寄存器地址(编号)是00000~11111,00~1F;

rt:可读可写。为第2个源操作数寄存器,或目的操作数寄存器,寄存器地址(同上);

rd:只写。为目的操作数寄存器,寄存器地址(同上);

sa:为位移量(shift amt),移位指令用于指定移多少位;

funct:为功能码,在寄存器类型指令中(R类型)用来指定指令的功能与操作码配合使用;

immediate:为16位立即数,用作无符号的逻辑操作数、有符号的算术操作数、数据加载(Load)/数据保存(Store)指令的数据地址字节偏移量和分支指令中相对程序计数器(PC)的有符号偏移量;

address:为地址。

在本CPU设计中,由于指令的类型较少,所以所有指令均由操作码(op)确定。在R型指令中,功能码(funct)为000000。

3.控制线路图与数据通路:

上图为CPU的数据通路和必要的控制线路图,其中Ins.Mem为指令存储器,Data.Mem为数

据存储器。访问存储器时,先给出内存地址,然后由读或写信号控制操作。对于寄存器组,先给出寄存器地址,读操作时,输出端就直接输出相应数据;而在写操作时,在 WE使能信号为1,在时钟边沿触发将数据写入寄存器。

4.控制信号:

控制信号的作用

ALU功能表

附:本CPU的指令集并未用到ALU的全部功能。

5.主要模块接口说明:

Instruction Memory:指令存储器,

address,指令存储器地址输入端口

DataIn,指令存储器数据输入端口(指令代码输入端口)

DataOut,指令存储器数据输出端口(指令代码输出端口)

InsMemRW,指令存储器读写控制信号,为0写,为1读

Data Memory:数据存储器,

address,数据存储器地址输入端口

DataOut,数据存储器数据输出端口

/RD,数据存储器读控制信号,为0读

/WR,数据存储器写控制信号,为0写

Register File:寄存器组

Read Reg1,rs寄存器地址输入端口

Read Reg2,rt寄存器地址输入端口

Write Reg,将数据写入的寄存器端口,其地址来源rt或rd字段

Write Data,写入寄存器的数据输入端口

Read Data1,rs寄存器数据输出端口

Read Data2,rt寄存器数据输出端口

WE,写使能信号,为1时,在时钟边沿触发写入

RST,寄存器清零信号,为0时寄存器清零

ALU:算术逻辑单元

result,ALU运算结果

zero,运算结果标志,结果为0,则zero=1;否则zero=0

sign,运算结果标志,结果最高位为0,则sign=0,正数;否则,sign=1,负数

四.实验器材

电脑一台,Xilinx Vivado 软件一套,Basys3板一块。

五.实验过程与结果

1.各个指令对应的控制信号

除异或运算(111)外,ALU所有功能均被使用。

2.主要模块代码及仿真

(1)控制单元(control unit)

Verilog代码:

1.module controlUnit(

2.input [5:0] opcode,

3.input zero,

4.input sign,

5.output reg PCWre,

6.output reg ALUSrcA,

7.output reg ALUSrcB,

8.output reg DBDataSrc,

9.output reg RegWre,

10.output reg InsMemRW,

11.output reg RD,

12.output reg WR,

13.output reg RegDst,

14.output reg ExtSel,

15.output reg [1:0] PCSrc,

16.output reg [2:0] ALUOp

17.);

18.initial begin

19.RD = 1;

20.WR = 1;

21.RegWre = 0;

22.InsMemRW = 0;

23.end

24.always@ (opcode) begin

25.case(opcode)

26.6'b000000:begin // add

27.PCWre = 1;

28.ALUSrcA = 0;

29.ALUSrcB = 0;

30.DBDataSrc = 0;

31.RegWre = 1;

32.InsMemRW = 1;

33.RD = 1;

34.WR = 1;

35.RegDst = 1;

36.ALUOp = 3'b000;

37.end

38.6'b000001:begin //addi

39.PCWre = 1;

40.ALUSrcA = 0;

41.ALUSrcB = 1;

42.DBDataSrc = 0;

43.RegWre = 1;

44.InsMemRW = 1;

45.RD = 1;

46.WR = 1;

47.RegDst = 0;

48.ExtSel = 1;

49.ALUOp = 3'b000;

50.end

51.6'b000010:begin //sub

52.PCWre = 1;

53.ALUSrcA = 0;

54.ALUSrcB = 0;

55.DBDataSrc = 0;

56.RegWre = 1;

57.InsMemRW = 1;

58.RD = 1;

59.WR = 1;

60.RegDst = 1;

61.ALUOp = 3'b001;

62.end

63.6'b010000:begin // ori

64.PCWre = 1;

65.ALUSrcA = 0;

66.ALUSrcB = 1;

67.DBDataSrc = 0;

68.RegWre = 1;

69.InsMemRW = 1;

70.RD = 1;

71.WR = 1;

72.RegDst = 0;

73.ExtSel = 0;

74.ALUOp = 3'b011;

75.end

76.6'b010001:begin //and

77.PCWre = 1;

78.ALUSrcA = 0;

79.ALUSrcB = 0;

80.DBDataSrc = 0;

81.RegWre = 1;

82.InsMemRW = 1;

83.RD = 1;

84.WR = 1;

85.RegDst = 1;

86.ALUOp = 3'b100;

87.end

88.6'b010010:begin // or

89.PCWre = 1;

90.ALUSrcA = 0;

91.ALUSrcB = 0;

92.DBDataSrc = 0;

93.RegWre = 1;

94.InsMemRW = 1;

95.RD = 1;

96.WR = 1;

97.RegDst = 1;

98.ALUOp = 3'b011;

99.end

100. 6'b011000:begin //sll 101. PCWre = 1; 102. ALUSrcA = 1; 103. ALUSrcB = 0; 104. DBDataSrc = 0; 105. RegWre = 1; 106. InsMemRW = 1; 107. RD = 1;

108. WR = 1;

109. RegDst = 1; 110. ALUOp = 3'b010; 111. end

112. 6'b011100:begin //slt 113. PCWre = 1; 114. ALUSrcA = 0; 115. ALUSrcB = 0; 116. DBDataSrc = 0; 117. RegWre = 1; 118. InsMemRW = 1; 119. RD = 1;

120. WR = 1;

121. RegDst = 1; 122. ALUOp = 3'b110; 123. end

124. 6'b100110:begin //sw 125. PCWre = 1; 126. ALUSrcA = 0; 127. ALUSrcB = 1; 128. RegWre = 0; 129. InsMemRW = 1; 130. RD = 1;

131. WR = 0;

132. ExtSel =1;

133. ALUOp = 3'b000; 134. end

135. 6'b100111:begin //lw 136. PCWre = 1; 137. ALUSrcA = 0; 138. ALUSrcB = 1; 139. DBDataSrc = 1; 140. RegWre = 1; 141. InsMemRW = 1; 142. RD = 0;

143. WR = 1;

144. RegDst = 0; 145. ExtSel = 1; 146. ALUOp = 3'b000; 147. end

148. 6'b110000:begin //beq 149. PCWre = 1; 150. ALUSrcA = 0; 151. ALUSrcB = 0; 152. RegWre = 0; 153. InsMemRW = 1; 154. RD = 1;

155. WR = 1;

156. ExtSel = 1; 157. ALUOp = 3'b001; 158. end

159. 6'b110001:begin //bne 160. PCWre = 1; 161. ALUSrcA = 0; 162. ALUSrcB = 0; 163. RegWre = 0; 164. InsMemRW = 1; 165. RD = 1;

166. WR = 1;

167. ExtSel = 1; 168. ALUOp = 3'b001; 169. end

170. 6'b110010:begin

171. PCWre = 1; 172. ALUSrcA = 0; 173. ALUSrcB = 0; 174. RegWre = 0; 175. InsMemRW = 1; 176. RD = 1;

177. WR = 1;

178. ExtSel = 1; 179. ALUOp = 3'b001; 180. end

181. 6'b111000:begin //j 182. PCWre = 1; 183. RegWre = 0; 184. InsMemRW = 1; 185. RD = 1;

186. WR = 1;

187. ALUOp = 3'b010; 188. end

189. 6'b111111:begin //halt 190. PCWre = 1; 191. RegWre = 0; 192. InsMemRW = 1; 193. RD = 1;

194. WR = 1;

195. end

196. default:begin

197. RD = 1;

198. WR = 1;

199. RegWre = 0;

200. InsMemRW = 0;

201. end

202. endcase

203. end

204. always@(opcode or zero or sign) begin

205. if(opcode == 6'b111000) // j

206. PCSrc = 2'b10;

207. else if(opcode[5:3] == 3'b110) begin

208. if(opcode[2:0] == 3'b000) begin

209. if(zero == 1)

210. PCSrc = 2'b01;

211. else

212. PCSrc = 2'b00;

213. end

214. else if(opcode[2:0] == 3'b001) begin 215. if(zero == 0)

216. PCSrc = 2'b01;

217. else

218. PCSrc = 2'b00;

219. end

220. else begin

221. if(zero == 0 && sign == 0) 222. PCSrc = 2'b01;

223. else

224. PCSrc = 2'b00;

225. end

226. end

227. else begin

228. PCSrc = 2'b00;

229. end

230. end

231.endmodule

仿真截图:

(2)程序计数器(PC)

Verilog代码:

1.module PC(

2.input clk,

3.input [31:0] PCin,

4.input PCWre,

5.input Reset,

6.output reg [31:0] PCout

7.);

8.initial begin

9.PCout <= 0;

10.end

11.always@(posedge clk) begin

12.if(Reset == 0) begin

13.PCout <= 0;

14.end

15.else if(PCWre == 0) begin

16.PCout <= PCout;

17.end

18.else begin

19.PCout <= PCin;

20.end

21.end

22.endmodule

仿真截图:

(3)程序存储器(instruction memory)

Verilog代码:

1.module IMemory(

2.input InsMemRW,

3.input [31:0] address,

4.output reg [31:0] DataOut

5.);

6.reg [7:0] mem [0:127];

7.initial begin

8.DataOut = 32'b111111_0000000_0000000_0000000_00000;

9.$readmemb("C:/Users/ACER/Desktop/-p/project_1/rom_data.coe", mem);

10.end

11.always@(address or InsMemRW) begin

12.if(InsMemRW == 1) begin

13.DataOut[31:24] <= mem[address];

14.DataOut[23:16] <= mem[address+1];

15.DataOut[15:8] <= mem[address+2];

16.DataOut[7:0] <= mem[address+3];

17.end

18.end

19.endmodule

仿真截图:

(4)ALU

Verilog代码:

1.module ALU(

2.input [2:0] ALUopcode,

3.input [31:0] rega,

4.input [31:0] regb,

5.output reg [31:0] result,

6.output zero,

7.output sign

8.);

9.assign zero = (result==0)?1:0;

10.assign sign = result[31];

11.always @( ALUopcode or rega or regb ) begin

12.case(ALUopcode)

13.3'b000 : result = rega + regb;

14.3'b001 : result = rega - regb;

15.3'b010 : result = regb << rega;

16.3'b011 : result = rega | regb;

17.3'b100 : result = rega & regb;

18.3'b101 : result = (rega < regb)?1:0; // 不带符号比较

19.3'b110 : begin // 带符号比较

20.if(rega

21.(rega[31] == 1 && regb[31]==1))) result = 1;

22.else if(rega[31] == 0 && regb[31]==1) result = 0;

23.else if( rega[31] == 1 && regb[31]==0) result = 1

;

24.else result = 0;

25.end

26.3'b111 : result = rega ^ regb;

27.endcase

28.end

29.endmodule

仿真截图:

(5)寄存器堆

Verilog代码:

1.module RegFile(

2.input CLK,

3.input RST,

4.input RegWre,

5.input [4:0] ReadReg1,

6.input [4:0] ReadReg2,

7.input [4:0] WriteReg,

8.input [31:0] WriteData,

9.output [31:0] ReadData1,

10.output [31:0] ReadData2

11.);

12.reg [31:0] regFile[1:31]; // 寄存器定义必须用reg 类型

13.integer i;

14.assign ReadData1 = (ReadReg1 == 0) ? 0 : regFile[ReadReg1]; // 读

寄存器数据

15.assign ReadData2 = (ReadReg2 == 0) ? 0 : regFile[ReadReg2];

16.always @ (negedge CLK) begin // 必须用时钟边沿触发

17.if(RST==0) begin

18.for(i=1;i<32;i=i+1)

19.regFile[i] <= 0;

20.end

21.else if(RegWre == 1 && WriteReg != 0) begin

22.regFile[WriteReg] <= WriteData;

23.end

24.end

25.

26.endmodule

仿真截图:

(6)数据存储单元(Data Memory)

Verilog代码:

1.module DataMemory(

2.input clk,

3.input [31:0] address,

4.input RD,

5.input WR,

6.input [31:0] DataIn,

7.output [31:0] DataOut

8.);

9.

10.reg [7:0] ram[0:127];

11.integer i;

12.initial begin;

13.for(i=0;i<128;i=i+1)

14.ram[i]<=0;

15.end

16.// output

17.assign DataOut[7:0] = (RD == 0)? ram[address+3]:8'bz;

18.assign DataOut[15:8] = (RD == 0)? ram[address+2]:8'bz;

19.assign DataOut[23:16] = (RD == 0)? ram[address+1]:8'bz;

20.assign DataOut[31:24] = (RD == 0)? ram[address]:8'bz;

21.// input

22.always@(negedge clk) begin

23.if(WR == 0) begin

24.if(address>=0 && address<128) begin

25.ram[address] <= DataIn[31:24];

26.ram[address+1] <= DataIn[23:16];

27.ram[address+2] <= DataIn[15:8];

28.ram[address+3] <= DataIn[7:0];

29.end

30.end

31.end

32.endmodule

仿真截图:

3.测试程序:

测试程序如下:

机器代码(.roe):

仿真截图:

(1)addi $1, $0, 8 至 bne $1, $8, -2

(2)slt $6, $2, $1 至 lw $9, 4($1)

(3)bgtz $9, $2 至 halt

精简8位cpu设计报告

精简8位cpu实验设计报告 实验介绍: 实验分为两个部分,第一部分为16*8 ROM 设计与仿真 第二部分为SAP-1 设计与仿真 实验流程: ①16*8 ROM 的设计与仿真 Rom16_8.VHDL LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY ROM16_8 is PORT( DATAOUT :OUT STD_LOGIC_VECTOR(7 DOWNTO 0); --Data Output ADDR :IN STD_LOGIC_VECTOR(3 DOWNTO 0); --ADDRESS CE :IN STD_LOGIC --Chip Enable ); END ROM16_8; ARCHITECTURE a OF ROM 16_8 IS BEGIN DATA<=“00001001”WHEN ADDR=“0000”AND CE=‘0’--LDA 9H “00011010”WHEN ADDR=“0001”AND CE=‘0’ELSE --ADD AH “00011011”WHEN ADDR=“0010”AND CE=‘0’ELSE --ADD BH “00101100”WHEN ADDR=“0011”AND CE=‘0’ELSE --SUB CH “11100000”WHEN ADDR=“0100”AND CE=‘0’ELSE --OUT “11110000”WHEN ADDR=“0101”AND CE=‘0’ELSE --HLT “00010000”WHEN ADDR=“1001”AND CE=‘0’ELSE “00010100”WHEN ADDR=“1010”AND CE=‘0’ELSE “00011000”WHEN ADDR=“1011”AND CE=‘0’ELSE

数据通路实验报告

非常简单CPU数据通路设计实验报告非常简单CPU数据通路设计【实验目的】 1. 掌握CPU的设计步骤 2. 学会芯片的运用及其功能 【实验环境】 Maxplus2环境下实现非常简单CPU数据通路的设计 【实验内容】 非常简单CPU的寄存器:一个8位累加器AC,一个6位的地址寄存器绘制 AR,一个6位的程序计数器PC,一个8位的数据寄存器DR,一个2位的指令寄存器IR。其数据通路详见教材P。 1、零件制作 6位寄存器 (自行设计) 6位计数器 (自行设计) 8位寄存器 (可选择74系列宏函数74273) 8位计数器 (由两个74161构成) 2位寄存器 (由D触发器构成,自行设计) 6三态缓冲器 (自行设计,可由74244内部逻辑修改而成) 8三态缓冲器 (选择74系列宏函数74244,或作修改) alu模块 (自行设计,限于时间,其内部逻辑不作要求) 2、选择器件,加入数据通路顶层图 8位累加器AC:选择8位计数器 6位地址寄存器AR:reg6 6位的程序计数器PC:cou6

8位的数据寄存器DR:选择8位寄存器 2位的指令寄存器IR:选择2位寄存器 3、为PC、DR加入三态缓冲器。 4、调整版面大小,器件位置。 5、设计地址引脚、数据引脚、8位内部总线,加入数据引脚到内部总线的 缓冲器。 6、连接各器件之间以及到内部总线的线路,设计并标注各控制信号。 7、(选做)编译之后,给出微操作 AR<-PC 的测试方法及仿真结果。 8、实验报告中应给出各元部件的实现方法、内部逻辑贴图、打包符号说 明及顶层的“非常简单CPU”数据通路图。 实验报告 一、实验步骤 基于前面非常简单CPU的讲解,我掌握了非常简单CPU的指令集结构及非常简单CPU的指令读取过程和执行过程,本次实验是在上次实验的基础之上完成非常简单CPU数据通路的设计,其步骤如下: (1)、AC累加器原理图如下:

MIPS单周期CPU设计2018版体会

11条MIPS指令单周期CPU设计 2018元月份,我按照袁春风老师的第三版教材,又重新设计了11条MIPS 指令的单周期CPU。这次的设计与我2017年7月份的单周期CPU还是有些区别。2017年7月份设计的CPU主要是参考《计算机组成与设计-硬件/软件接口David A.Patterson》。 设计中的几点体会如下: 一.基本流程 1.首先要分析清楚这11条指令的格式和特点。按照MIPS指令的格式和特 点,完全掌握它们的功能和执行的过程。 2.这些指令执行过程中需要哪些硬件部件和控制信号,这些部件如何连接 构成数据通路。 3.对所有需要的控制信号进行归纳分析,列出真值表,设计相应的控制电 路。 二.具体设计过程 1.ALU的设计。ALU的设计重点在于先设计出32位的加法器,减法运算是利用 加法的“变反加一”。同时要产生各种运算结果的信号:溢出(OF)、进位(CF)、符号位(SF)、零符号位(Zero)。OF=C n⊕C n-1;CF=C out⊕C in。至于需要其它的运算指令,如逻辑运算、移位运算、乘除法运算,都可以直接调用logisim库中的器件,添加到ALU中,这些运算的结果可以同时产生,只是最后用多路选择器来选择那种指令的结果输出,用的控制信号是OPctr。在ALU中需要设计一个控制信号生成部件,用于产生ALU内部需要的各种控制信号。见袁春风老师教材P155。(第一次实验:ALU部件的设计)(ALU设计中,现在的加法器只是串行的,可以让好的学生用先行进位加法器)

图1:ALU电路图 2.设计寄存器部件。设计一个32个*32位的寄存器部件。两路输入和两路输出, 可读写。(第二次实验:寄存器部件的设计) 图2:寄存器电路图 3.数据通路的设计。通路的设计不能急于求成,要一条指令一条指令来分析和 设计。首先设计R-type中的add、sub、subu、slt、sltu等的通路。要注意是否要判断溢出。在此基础上,再分析I-type带立即数运算指令的数据通路,分析出需要添加哪些部件。再分析sw、lw指令的数据通路,分支指

计算机硬件课程设计报告(cpu设计)

计算机硬件课程设计 设计报告 学号: 姓名:成绩: 学号: 姓名:成绩: 东南大学计算机科学与工程系 二0 10 年11 月

一、设计名称: My CPU的设计 二、本设计的主要特色: 1、熟悉挂总线的逻辑器件的特性和总线传送的逻辑实现方法。 2、掌握半导体静态存储器的存取方法。 三、设计方案: 1. 数据格式——8位二进制定点表示 2. 指令系统——CPU的指令格式尽量简单规整,这样在硬件上更加容易实现。 7条基本指令:输入/输出,数据传送,运算,程序控制。 指令格式:Array 7 6 5 4 3 2 1 0 两种寻址方式: 寄存器寻址Array 7 6 5 4 3 2 1 0 直接地址寻址,由于地址要占用一个字节,所以为双字节指令。 7条机器指令:

IN R目:从开关输入数据到指定的寄存器R目。 OUT R源:从指定的寄存器R源中读取数据送入到输出缓冲寄存器,显示灯亮。 ADD R目,R源:将两个寄存器的数据相加,结果送到R目。 JMP address : 无条件转移指令。 HALT : 停机指令。 LD R目,address : 从内存指定单元中取出数据,送到指定寄存器R 目。 ST address , R 源: 从指定的寄存器R源中取出数据,存入内存指定单元。

Address(内存地址) 3. CPU内部结构 4.数据通路设计 根据指令系统,分析出数据通路中应包括寄存器组、存储器、运算器、多路转换器等,采用单总线结构。 通用寄存器组:

运算器: 存储器: 多路转换器:

输出缓冲器: 5.控制器设计 控制通路负责整个CPU的运行控制,主要由控制单元和多路选择器MUX 完成。在每一个时钟周期的上升沿指令寄存器IR 从内存中读取指令字后,控制单元必须能够根据操作码,为每个功能单元产生相应主控制信号,以及对ALU 提供控制信号。对于不同的指令,同一个功能单元的输入不同,需要多路选择器MUX 来对数据通路中功能单元的输入进行选择。

计算机组成原理实验报告单周期cpu的设计与实现

1个时钟周期 Clock 电子科技大学计算机科学与工程学院 标 准 实 验 报 告 (实验)课程名称: 计算机组成原理实验 电子科技大学教务处制表 电 子 科 技 大 学 实 验 报 告 学生姓名: 郫县尼克杨 学 号: 2014 指导教师:陈虹 实验地点: 主楼A2-411 实验时间:12周-15周 一、 实验室名称: 主楼A2-411 二、 实验项目名称: 单周期CPU 的设计与实现。 三、 实验学时: 8学时 四、 实验原理: (一) 概述 单周期(Single Cycle )CPU 是指CPU 从取出1条指令到执行完该指令只需1个时钟

周期。 一条指令的执行过程包括:取指令→分析指令→取操作数→执行指令→保存结果。对于单周期CPU 来说,这些执行步骤均在一个时钟周期内完成。 (二) 单周期cpu 总体电路 本实验所设计的单周期CPU 的总体电路结构如下。 (三) MIPS 指令格式化 MIPS 指令系统结构有MIPS-32和MIPS-64两种。本实验的MIPS 指令选用MIPS-32。以下所说的MIPS 指令均指MIPS-32。 MIPS 的指令格式为32位。下图给出MIPS 指令的3种格式。 本实验只选取了9条典型的MIPS 指令来描述CPU 逻辑电路的设计方法。下图列出了本实验的所涉及到的9条MIPS 指令。 五、 实验目的 1、掌握单周期CPU 的工作原理、实现方法及其组成部件的原理和设计方法,如控制器、26 31 221 216 15 11 1 6 5 0 op rs rt rd sa func R 型指令 26 31 221 216 15 0 op rs rt immediate I 型指令 26 31 20 op address J 型指令

CPU课程设计报告

课程设计报告 课程片上计算机系统 题目 CPU模型机设计 班级 专业 学生 学号 指导教师 2014年7 月 3 日 目录: 1.课程设计的目的及要求 (3) 2.处理器的设计思想和设计内容 (3)

3.设计处理器的结构和实现方法 (3) 4.模型机的指令系统 (4) 5.处理器的状态跳转操作过程 (4) 6. CPU的Verilog代码 (7) 7. 模型机在Quartus II环境下的应用 (19) 8. 仿真波形 (19) 9. 课程设计的总结 (21) 一.课程设计的目的及要求: (一)目的: 1.掌握RISC CPU与内存数据交换的方法。 2.学会指令格式的设计与用汇编语言编写简易程序。 3.能够使用VHDL硬件描述语言在QuartusⅡ软件环境下完成CPU模型机的 设计。

(二)要求: 1.以《计算机组成与设计》书中123页的简化模型为基础更改其指令系 统,形成设计者的CPU, 2.在Quartus II环境下与主存连接,调试程序,观察指令的执行是否达 到设计构想。 二.处理器的设计思想和设计内容: 处理器的字长为16b;包括四种指令格式,格式1、格式2、格式3的指令字长度为8b,格式4的指令字长度为16b;处理器内部的状态机包括七个状态。(一)关于修改后的CPU: 一共设计25条指令,主要包括空操作指令、中断指令、加法指令、减法指令、加法指令、四种逻辑运算指令、比较、算术移位操作指令、逻辑移位操作指令、加减1指令、加减2指令、数据传输指令、转移类指令、读写指令、特权指令等等。 (二)关于RAM: 地址线设置成8bits,主存空间为4096words。 三.设计处理器的结构和实现方法: (指令格式) 格式1:寄存器寻址方式 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OP Rx Ry 空白 格式2:寄存器变址寻址方式 OP Ry 空白 格式3:立即数寻址方式 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OP I 空白 格式4:无操作数寻址方式 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OP 空白空白 格式5:直接寻址方式 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OP Addr 内存(2的12次方) 四.模型机的指令系统 CPU的指令集: 操作码OP IR(15..1 2) 指令 格式 指令的助记指令的内容

cpu实验报告

简易计算机系统综合设计设计报告 班级姓名学号 一、设计目的 连贯运用《数字逻辑》所学到的知识,熟练掌握EDA工具的使用方法,为学习好后续《计算机原理》课程做铺垫。 二、设计内容 ①按给定的数据格式和指令系统,使用EDA工具设计一台用硬连线逻辑控制的简易计算机系统; ②要求灵活运用各方面知识,使得所设计的计算机系统具有较佳的性能; ③对所做设计的性能指标进行分析,整理出设计报告。 三、详细设计 3.1设计的整体架构 控制信号

3.2各模块的具体实现 1.指令计数器(zhiling_PC) 元件: 输入端口:CLK,RESET,EN; 输出端口:PC[3..0]; CLK:时钟信号; RESET:复位信号; EN:计数器控制信号,为1的时候加一; PC[3..0]:地址输出信号; 代码:

波形图: 总共有九条指令,指令计数器从0000到1000;功能: 实现指令地址的输出; 2.存储器(RAM) 元件: 输入端口:PC[3..0],CLK; 输出端口:zhiling[7..0]; CLK:时钟信号; PC[3..0]:指令地址信号; zhiling[7..0]:指令输出信号; 代码:

波形图: 功能: 根据输入的地址输出相应的指令; 3.指令译码器(zlymq) 元件: 输入端口:zhiling[7..0]; 输出端口:R1[1..0],R2[1..0],M[3..0];zhiling[7..0]:指令信号; R1:目标寄存器地址; R2:源寄存器地址; M[3..0]:指令所代表的操作编号; 代码:

波形图:

功能: 实现指令的操作译码,同时提取出目标寄存器和源寄存器的地址; 4.算术逻辑运算器(ALU) 元件: 输入端口:EN_ALU,a[7..0],b[7..0],M[3..0]; 输出端口:c[7..0],z; EN_ALU:运算器的使能端; a[7..0]:目标寄存器R1的值; b[7..0]:源寄存器R2的值; M[3..0]:指令所代表的操作编号; c[7..0]:运算结果; z:运算完成的信号; 代码:

单周期CPU设计

信息科学与工程学院 课程设计报告 课程名称:计算机组成原理与结构题目:单周期CPU逻辑设计年级/专业:XXXXXXXXXXXXXXX X 学生姓名:王侠侠、李怀民 学号:XXXXXXXXXXXXXXXXXXX 指导老师:XXXX 开始时间:2016年9月15日 结束时间:2016年11月15日

摘要 一、设计目的与目标 1.1 设计目的 1.2 设计目标 二、课程设计器材 2.1 硬件平台 2.2 软件平台 三、CPU逻辑设计总体方案 3.1 指令模块 3.2 部件模块 四、模块详细设计 4.1 指令设计模块 4.2 部件设计模块 五、实验数据 5.1 初始数据 5.2 指令数据 六、结论和体会 七、参考文献

本CPU设计实验以Quartus II 9.0为软件设计平台,以Cyclone 采III型号EP3C16F484C6为FPGA实测板。此CPU设计采用模块化设计方案,首先设计指令格式模块,此模块决定CPU各个部件的接口数据容量及数量,再对CPU各个部件独立设计实现,主要涉及的部件有:寄存器组、控制器、存储器、PC计数器、数据选择器、ALU单元以及扩展单元。分部件的设计通过软件平台模拟仿真各部件的功能,在确保各部件功能正确的情况下,将所有部件模块整合在一起实现16位指令的CPU功能。再按照指令格式设计的要求,设计出一套能完整运行的指令,加载到指令存储器中,最终通过在FPGA实测板上实现了加2减1的循环运算效果,若要实现其他效果,也可更改指令存储器或数据存储器的数据而不需要对内部部件进行更改元件。 关键词:CPU设计、16位指令格式、模块化设计、Quartus软件、CPU各部件

CPU设计实验报告文档(英文版)

Southeast University Microprogra m med CPU Design -- COA experiment School of Information Science and Engineering 04009XXX 2012-4-25

Purpose The purpose of this project is to design a simple CPU (Central Processing Unit). This CPU has basic instruction set, and we will utilize its instruction set to generate a very simple program to verify its performance. For simplicity, we will only consider the relationship among the CPU, registers, memory and instruction set. That is to say we only need consider the following items: Read/Write Registers, Read/Write Memory and Execute the instructions. At least four parts constitute a simple CPU: the control unit, the internal registers, the ALU and instruction set, which are the main aspects of our project design and will be studied. Instruction Set Single-address instruction format is used in our simple CPU design. The instruction word contains two sections: the operation code (opcode), which defines the function of instructions (addition, subtraction, logic operations, etc.); the address part, in most instructions, the address part contains the memory location of the datum to be operated, we called it direct addressing. In some instructions, the address part is the operand, which is called immediate addressing. For simplicity, the size of memory is 256×16 in the computer. The instruction word has 16 bits. The opcode part has 8 bits and address part has 8 bits. The instruction word format can be expressed in Figure 1 Figure 1 the instruction format The opcode of the relevant instructions are listed in Table 1. In Table 1, the notation [x] represents the contents of the location x in the memory. For example, the instruction word 00000011101110012 (03B916) means that the CPU adds word at location B916 in memory into the accumulator (ACC); the instruction word 00000101000001112 (050716) means if the sign bit of the ACC (ACC [15]) is 0, the CPU will use the address part of the instruction as the address of next instruction, if the sign bit is 1, the CPU will increase the program counter (PC) and use its content 7 as the address of the next instruction. Table 1 List of instructions and relevant opcodes

CPU设计实验报告

实验中央处理器的设计与实现 一、实验目的 1、理解中央处理器的原理图设计方法。 2、能够设计实现典型MIPS的11条指令。 二、实验要求 1、使用Logisim完成数据通路、控制器的设计与实现。 2、完成整个处理器的集成与验证。 3、撰写实验报告,并提交电路源文件。 三、实验环境 VMware Workstations Pro + Windows XP + Logisim-win-2.7.1 四、操作方法与实验步骤 1、数据通路的设计与实现 数据通路主要由NPC、指令存储器、32位寄存器文件、立即数扩展部件、ALU、数据存储器构成。其中指令存储器和数据存储器可直接调用软件库中的ROM和RAM元件直接完成,其余部件的设计如图所示: 图1.1 NPC

图1.2 32位寄存器

图1.3 立即数扩展部件 图1.4 ALU 2、控制器的设计与实现 控制器的主要设计思想如图所示 图2.1 控制器设计思想 输入 1 1 0

输出R-type ORI LW SW BEQ JUMP RegDst 1 0 0 x x x ALUSrc 0 1 1 1 0 x MemtoReg0 0 1 x x x RegWrite 1 1 1 0 0 0 MemWrite0 0 0 1 0 0 Branch 0 0 0 0 1 0 Jump 0 0 0 0 0 1 Extop x 0 1 1 1 x ALUop2 1 0 0 0 0 x ALUop1 x 1 0 0 x x ALUop0 x 0 0 0 1 x ALUop[2:0] Funct[3:0] 指令ALUctr[2:0] 111 0000 add 010 111 0010 sub 110 111 0100 and 000 111 0101 or 001 111 1010 slt 111 010 xxxx ori 001 000 xxxx Lw/sw 010 011 xxxx beq 110 表2.1 控制器设计真值表

《单周期CPU设计》实验报告

《计算机组成原理与接口技术实验》 实验报告 学院名称: 学生姓名: 学号: 专业(班级): 合作者: 时间:2016 年4 月25 日 成绩: ________ 实验二: 一. 实验目的 1.掌握单周期CPU数据通路图的构成、原理及其设计方法; 2.掌握单周期CPI的实现方法,代码实现方法; 3.认识和掌握指令与CPU勺关系; 4.掌握测试单周期CPI的方法。 二. 实验内容 设计一个单周期CPU,该CPU至少能实现以下指令功能操作。需设计的指令

与格式如下:

==>算术运算指令 功能:rd Jrs + rt 。 reserved为预留部分,即未用,一般填“0 (2)addi rt , rs , immediate 功能:rt J rs + (sign-extend) immediate ;immediate 符号扩展再参加“加”运算(3) sub rd , rs , rt 完成功能:rd J rs - rt ==>逻辑运算指令 (4)ori rt , rs , immediate 功能:rt Jrs | (zero-extend) immediate ; immediate 做“ o ”扩展再参加“或”运算(5) and rd , rs , rt 功能:rd Jrs & rt ;逻辑与运算 (6)or rd , rs , rt 功能:rd Jrs | rt ;逻辑或运算。 ==>传送指令 功能:rd Jrs + $0 ; $0=$zero=0。 ==>存储器读/写指令 (8)sw rt , immediate( rs)写存储器 功能:memory[rs+ (sign-extend) immediate ] J rt ; immediate 符号扩展再 相加。

CPU与简单模型机设计 实验报告汇总

计算机科学与技术系 实验报告 专业名称计算机科学与技术 课程名称计算机组成与结构 项目名称 CPU与简单模型机设计实验 班级 学号 姓名 同组人员无 实验日期 2015-11-15

一、实验目的 1.掌握一个简单CPU的组成原理; 2.在掌握部件单元电路的基础上,进一步将其构造一台基本模型计算机; 3.为其定义五条机器指令,编写相应的微程序,并上机调试掌握整机概念。 二、实验逻辑原理图与分析 2.1 实验逻辑原理图及分析 本实验要实现一个简单的CPU,并且在此CPU的基础上,继续构建一个简单的模型计算机。CPU由运算器(ALU)、微程序控制器(MC)、通用寄存器(RO)、指令寄存器(IR)、程序计数器(PC)和地址寄存器(AR)组成,如图下图所示。这个CPU在写入相应的微指令后,就具备了执行机器指令的功能,但是机器指令一般存放在主存当中,CPU必须和贮存挂接后,才有实际的意义,所以还需要在该CPU的基础上增加一个主存和基本的输入输出部件,以构成一个简单的模型计算机。 基本CPU构成原理图 系统的程序计数器(PC)和地址寄存器(AR)集成在一片CPLD芯片中。CLR连接至CON单元的纵情断CLR,按下CLR按钮,将是PC清零,LDPC和T3相与后作为计数器的计数时钟,当LOAD为低时,计数时钟到来后将CPU内总线的数据打入PC。 程序计数器(PC)原理图

2.2 逻辑原理图分析 本模型机;和前面微程序控制器实验相比,新增加一条跳转指令JMP,供有五条指令:IN(输入)、ADD(二进制加法)、OUT(输出)、JMP(无条件转移)、HLT(停机)、其指令格式瑞霞(高4为为操作码): 其中JMP为双字节指令,其余均为单字节指令,********为addr对应的二进制地址码。微程序控制器实验的指令是通过手动给出的,现在要求CPU自动从存储器读取指令并执行。 系统涉及到的微程序流程如下图所示,当拟定“取指”微指令时,该微指令的判别测试字段为P<1>测试。由于“取指”微指令是所有微程序都使用的公用微指令,因此P<1>的测试结果出现多分支。本机用指令寄存器的高6位(IR7—IR2)作为测试条件,出现5路分支,占用5个固定为地址单元,剩下的其他地方就可以一条微指令占用控制一个微地址单元随意填写,微程序流程图上的但愿地址为16进制。 当全部为程序设计完毕后,应将每条微指令代码化,下表即为将下图的微程序流程图按微指令格式转化而成的“二进制微代码表”。 简单模型机微程序流程图

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

单片机实验报告

本科生实验报告 实验课程单片机原理及应用 学院名称核技术与自动化工程学院 专业名称电气工程及其自动化 学生姓名 学生学号 指导教师任家富 实验地点6C902 实验成绩 二〇一五年三月二〇一五年六月 单片机最小系统设计及应用 摘要 目前,单片机以其高可靠性,在工业控制系统、数据采集系统、智能化仪器仪表等领域得到极其广泛的应用。因此对于在校的大学生熟练的掌握和使用单片机是具有深远的意义。通过本次课程设计掌握单片机硬件和软件方面的知识,更深入的了解单片机的实际应用,本次设计课程采用STC89C52单片机和ADC0804,LED显示,键盘,RS232等设计一个单片机开发板系统。进行了LED显示程序设计,键盘程序设计,RS232通信程序设计等。实现了单片机的各个程序的各个功能。对仿真软件keil的应用提升了一个新的高度。单片机体积小、成本低、使用方便,所以被广

泛地应用于仪器仪表、现场数据的采集和控制。通过本实验的学习,可以让学生掌握单片机原理、接口技术及自动控制技术,并能设计一些小型的、综合性的控制系统,以达到真正对单片机应用的理解。 关键词:单片机;智能;最小系统;ADC;RS232;显示;STC89C52 第1章概述 单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。单片机采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。 它最早是被用在工业控制领域,由于单片机在工业控制领域的广泛应用,单片机由芯片内仅有CPU的专用处理器发展而来。最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。 现代人类生活中所用的几乎每件电子和机械产品中都会集成有单片机。手机、电话、计算器、家用电器、电子玩具、掌上电脑以及鼠标等电脑配件中都配有1-2部单片机。汽车上一般配备40多部单片机,复杂的工业控制系统上甚至可能有数百台单片机在同时工作!单片机的数量不仅远超过PC机和其他计算的总和,甚至比人类的数量还要多。单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等。 第2章实验内容 2.1单片机集成开发环境应用

华中科技大学HUST类MIPS单周期微处理器设计实验报告

类MIPS单周期微处理器设计 实验报告 专业: 班级: 学号: 姓名:

一、微处理器各模块设计 各模块的框图结构如上图所示。由图可知,该处理器包含指令存储器、数据存储器、寄存器组、ALU单元、符号数扩张、控制器、ALU控制译码以及多路复用器等。图中还忽略了一个单元:时钟信号产生器,而且以上各个部件必须在时钟信号的控制下协调工作。 1.指令存储器的设计 指令寄存器为ROM类型的存储器,为单一输出指令的存储器。因此其对外的接口为clk、存储器地址输入信号(指令指针)以及数据输出信号(指令)。 (1)在IP wizard 中配置ROM,分配128个字的存储空间,字长为32位宽。 (2)选择输入具有地址寄存功能,只有当时钟上升沿有效时,才进行数据的输出。 (3)配置ROM内存空间的初始化COE文件。最后单击Generate按钮生成IROM模块。

2.数据存储器的设计 数据存储器为RAM类型的存储器,并且需要独立的读写控制信号。因此其对外的接口输入信号为clk、we、datain、addr;输出信号为dataout。 数据存储器基本建立过程同ROM的建立。 3.寄存器组设计 寄存器组是指令操作的主要对象,MIPS中一共有32个32位寄存器。在指令的操作过程中需要区分Rs、Rt、Rd的地址和数据,并且Rd的数据只有在寄存器写信号有效时才能写入,因此该模块的输入为clk、RegWriteAddr、RegWriteData、RegWriteEn、RsAddr、RtAddr、reset;输出信号为RsData、RtData。 由于$0一直输出0,因此当RsAddr、RtAddr为0时,RsData以及RtData 必须输出0,否则输出相应地址寄存器的值。另外,当RegWriteEn有效时,数据应该写入RegWriteAddr寄存器。并且每次复位时所有寄存器都清零。 代码如下: module regFile( input clk, input reset, input [31:0] regWriteData, input [4:0] regWriteAddr, input regWriteEn, output [31:0] RsData, output [31:0] RtData, input [4:0] RsAddr, input [4:0] RtAddr

CPU设计实验报告

实验中央处理器的设计与实现 一、实验目的 1、 理解中央处理器的原理图设计方法。 2、 能够设计实现典型MIPS 的11条指令。 二、 实验要求 1、 使用Logisim 完成数据通路、控制器的设计与实现。 2、 完成整个处理器的集成与验证。 3、 撰写实验报告,并提交电路源文件。 三、 实验环境 VMware Workstatio ns Pro + Win dows XP + Logisim-wi n-2.7.1 四、 操作方法与实验步骤 1、数据通路的设计与实现 数据通路主要由NPC 、指令存储器、32位寄存器文件、立即数扩展部件、 ALU 、数据存储器构成。其中指令存储器和数据存储器可直接调用软件库中的 ROM 和RAM 元件直接完成,其余部件的设计如图所示: Cue ------- 吊孙 ----------- n -ar ch Zan [p]~ 图 1.1 NPC G —-- DO jlf* 04 4 D 04 nero & res?l ■&

幣> >曰CXI e Q

图1.3立即数扩展部件 图 1.4 ALU 2、控制器的设计与实现 控制器的主要设计思想如图所示 图2.1控制器设计思想 通过列真值表得到控制器的两部分电路,真值表如下 : 输入 000000 001101 100011 101011 000100 000010 immIC £it£ DOO -DO ooo n Q □□□non UOnflO OOC ?>:>0 DQ 000 指令 lnst :ruction[31:O] OP[5:OJ fu net [5:0] Jump ExBp Branch Mem Write ALUctr * RegWrite MemtoReg * ALUSrc 控制器 控制信号 LLLLLLLLLmM f ZERO A ()-- irnmmmiiiimiiiiifeiiim IIII93 1-] * 11114444 ".'O

类MIPS单周期处理器.doc

一、实验目的 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

哈工大CPU设计报告

计算机设计与实践CPU设计报告

指令格式设计: 注:Ri代表3位该寄存器号的二进制表示,X,sign为8位立即数,add为8为地址

一整体框图

二各模块详细说明(数据流关系、接口说明) 1 时钟管理模块 1.1结构框图: 1.2功能描述:时钟模块为一节拍发生器,以输入时钟信号作为触发,四个节拍循环往复,当“rst”为1时节拍复位。 1.3数据流关系: 1.4接口说明: port( rst: in std_logic; --复位信号 clk: in std_logic; --输入时钟信号 k: out std_logic_vector(3 downto 0) --节拍输出 ); 2 取址模块 2.1 visit_mem_flag pc_out ir_out 2.2功能描述:取指模块主要负责取指操作,当复位信号为1时,pc置零;若pc更新标志(pc_in_flag)为1,则更新当前的pc值;在第一个节拍,将当前pc给到访存控制模块,同时送访存请求信号(visit_mem_flag),取得指令;同时将取得的指令送往运算模块、回写模块,pc送往回写模块。

2.3数据流关系: Port (rst: in std_logic; --复位 k0,k1: in std_logic; --节拍控制 pc_in_flag: in std_logic; --PC回写允许 ir_in : in std_logic_vector(15 downto 0); --IR进入 pc_in : in std_logic_vector(15 downto 0); --PC回写 visit_mem_flag: out std_logic; --访存信号 pc_out : out std_logic_vector(15 downto 0); --PC输出 ir_out : out std_logic_vector(15 downto 0) --IR输出 ); 3 运算模块 3.1结构框图: 3.2功能描述:复位信号为1时,alutou、addr、Cy、Z清零;当回写信号为1时,将回写的数据回写入寄存器中;在第二节拍完成指令的译码工作,并根据译码结果置if_reg(是否更新寄存器),if_pc(是否更新PC),m_r(是否读请求),m_w(是否写请求)四个标志位,并对相关的指令置好addr、aluout和ToHX,以及对一些改变运算标志位的指令置好Cy和Z这两个标志位。

计算机组成CPU数据通路verilog实验报告.doc

计算机组成与系统结构实验报告 院(系):计算机科学与技术学院 专业班级: 学号: 姓名: 同组者: 指导教师: 实验时间: 2012 年 5 月 23 日 实验目的:

完成处理器的单周期cpu的设计。 实验仪器: PC机(安装Altebra 公司的开发软件 QuartusII)一台 实验原理: 控制器分为主控制器和局部ALU控制器两部分。主控制器的输入为指令操作码op,输出各种控制信号,并根据指令所涉及的ALU运算类型产生ALUop,同时,生成一个R-型指令的控制信号R-type,用它来控制选择将ALUop输出作为ALUctr信号,还是根据R-型指令中的func字段来产生ALUctr信号。 实验过程及实验记录: 1.设计过程: 第一步:分析每条指令的功能,并用RTL来表示。 第二步:根据指令的功能给出所需的元件,并考虑如何将它们互连。 第三步:确定每个元件所需控制信号的取值。 第四步:汇总各指令涉及的控制信号,生成所反映指令与控制信号之间的关系图。 第五步:根据关系表,得到每个控制信号的逻辑表达式,据此设计控制电路。

2.完成代码的编写,并调试运行。 1)control module Control(op,func,Branch,Jump,RegDst,ALUSrc,ALUctr,MemtoReg, RegWr,MemWr,ExtOp); input [5:0] op,func; output reg Branch,Jump,RegDst,ALUSrc,MemtoReg,RegWr,MemWr,ExtOp; output reg [2:0] ALUctr; always @(op) case(op) 6'b000000: begin Branch=0;Jump=0;RegDst=1;ALUSrc=0;MemtoReg=0;RegWr=1;MemWr =0; case(func) 6'b100000:ALUctr=3'b001; 6'b100010:ALUctr=3'b101; 6'b100011:ALUctr=3'b100; 6'b101010:ALUctr=3'b111; 6'b101011:ALUctr=3'b110; endcase end 6'b001101: begin Branch=0;Jump=0;RegDst=0;ALUSrc=1;MemtoReg=0;RegWr=1;MemWr =0;ExtOp=0;ALUctr=3'b010; end 6'b001001: begin Branch=0;Jump=0;RegDst=0;ALUSrc=1;MemtoReg=0;RegWr=1;MemWr =0;ExtOp=1;ALUctr=3'b000; end

相关文档