当前位置:文档之家› 简单微处理器的设计与实现

简单微处理器的设计与实现

简单微处理器的设计与实现
简单微处理器的设计与实现

简单微处理器的设计与实现

刘言(湖北师范学院)

摘要:

本次设计完全用verilog硬件描述语言编写微处理器的各个部件,在顶层文件里将各个部件连接起来形成一个简单的微处理器,加上一些外围模块来实现一些功能。

一、设计任务和技术指标

运用在“数字电路与逻辑设计”课程中学过的基本理论知识,设计并用可编程逻辑器件实现一个简单的八位操作数的微处理器。完成微处理器硬件系统设计和指令系统设计两方面的任务,使微处理器能够实现两个不带符号位的八位二进制数原码相乘等功能。

二、简单介绍

本次设计完全用verilog硬件描述语言编写微处理器的各个部件,在顶层文件里将各个部件连接起来形成一个简单的微处理器,加上一些外围模块来实现一些功能。本次设计在合理性与实用性上没有考虑,只是为了达到技术指标,从原理上完成了一个简单的RISC_CPU设计。

1.微处理器硬件系统及原理

A、内部组成

微处理器硬件由一下八个基本部件组成:

运算器、控制器、指令寄存分离器、时钟发生器、程序计数器、累加器、地址选择器、数据选择器。

时钟发生器CLK_GEN:利用输入时钟信号生成三个时钟信号送往对应的部件。

程序计数器PC:存放将要执行指令的地址。

指令寄存器IR:存放被执行指令的操作码和操作数的地址,直接供运算器与控制器。

控制器CON:根据操作码产生一系列时序逻辑信号,控制微处理器各个部件协调一致地完成每条指令相应的操作。

运算器ALU:当时钟上升沿来时对累加器与数据总线上的数进行加减乘除或逻辑运算。

累加器ACC:暂时存放运算结果。

地址选择器:选择输出到地址总线上的地址,是PC还是操作数地址。

数据选择器:选通ALU的运算结果输出到数据总线上去。

下面是内部连接图:(见最后一页)

B、外围模块

程序存储器ROM:存放程序指令。

数据存储器RAM:读取存放运算中间变量等临时数据。

输入输出特殊寄存器:数据的输入输出。

外部部分连接图:

外围设备通过总线连接CPU

2.处理器指令系统及功能

处理器的基本指令字长为W位,指令的每一位从高到低用DW、DW-1、…D1、D0表示,有些微处理器的一条指令包括多个指令字长,即每条指令的长度不一样,例如Intel的80386等。本实验为了简化设计,规定所有的指令都是单指令字的指令,且所有指令的长度都是8,即一个字节。因此可以有8种操作,5根地址线寻址空间为32B。

指令的前3位为操作码,后5位为操作数的地址,寻址方式只设计了直接寻址。详细如下表:指令助记符操作说明

000_D DIV除A=A/(D)

001_D JMP无条件跳转PC=D

010_D ADD加A=A+(D)

011_D SUB减A=A-(D)

100_D MUL乘TA=A*(D)

101_D LDA读A=(D)

110_D STO写D=A

111_D JNA条件跳转如果A=0,PC=D.

三、各模块详细介绍

1、时钟发生器:

时钟发生器clkgen的波形见下图:

2、程序计数器:

程序计数器用于提供指令地址,以便读取指令,指令按地址顺序存放在存储器中。有两种途径可形成指令地址:其一是顺序执行的情况,其二是遇到要改变顺序执行程序的情况,例如执行JMP 指令后,需要形成新的指令地址。

复位后,指令指针为零,即每次CPU重新启动将从ROM的零地址开始读取指令并执行。每条指令执行完需1个时钟,这时pc_addr已被增1,指向下一条指令。如果正执行的指令是跳转语句,这时CPU状态控制器将会输出load_pc信号,通过load口进入程序计数器。程序计数器(pc_addr)将装入目标地址(ir_addr),而不是增1。

Verilog代码:

1.module counter(pc_addr,ir_addr,load,clock,rst);

2.output[4:0]pc_addr;

3.input[4:0]ir_addr;

4.input load,clock,rst;

5.reg[4:0]pc_addr;

6.

7.always@(posedge clock or posedge rst)

8.begin

9.if(rst)

10.pc_addr<=0;

11.else

12.if(load)

13.pc_addr<=ir_addr;

14.else

15.pc_addr<=pc_addr+1;

16.end

17.endmodule

3、指令寄存器

指令寄存器的触发时钟是clk1,在clk1的正沿触发下,寄存器将数据总线送来的指令存入opcode(高3位)或ir_addr(低5位)中。但并不是每个clk1的上升沿都寄存数据总线的数据,因为数据总线上有时传输指令,有时传输数据。什么时候寄存,什么时候不寄存由CPU状态控制器的load_ir信号控制。load_ir信号通过ena口输入到指令寄存器。复位后,指令寄存器被清为零。

Verilog代码:

1.module register(opcode,ir_addr,data,ena,clk,rst);

2.output[2:0]opcode;

3.output[4:0]ir_addr;

4.input[7:0]data;

5.input ena,clk,rst;

6.reg[2:0]opcode;

7.reg[4:0]ir_addr;

8.

9.always@(posedge clk)

10.begin

11.if(rst)

12.begin

13.opcode<=3'b000;

14.ir_addr<=5'b00000;

15.end

16.else

17.begin

18.if(ena)

19.begin

20.opcode<=data[7:5];

21.ir_addr<=data[4:0];

22.end

23.end

24.end

25.endmodule

4、运算器

根据输入的8种不同操作码对两个数据(data、accum)分别实现相应的运算,结果由alu_out 输出。

Verilog代码:

1.module alu(alu_out,zero,bz,data,accum,alu_clk,opcode);

2.output[7:0]alu_out;

3.output zero,bz;

4.input[7:0]data,accum;

5.input[2:0]opcode;

6.input alu_clk;

7.reg[7:0]alu_out,tmp;

8.reg bzt;

9.initial bzt=0;

10.

11.parameter DIV=3'b000,

12.JMP=3'b001,

13.ADD=3'b010,

14.SUB=3'b011,

15.MUL=3'b100,

16.LDA=3'b101,

17.STO=3'b110,

18.JA=3'b111;

19.

20.assign zero=!accum;

21.always@(posedge alu_clk)

22.begin

23.casex(opcode)

24.DIV:alu_out<=accum/data;

25.JMP:alu_out<=accum;

26.ADD:alu_out<=data+accum;

27.SUB:alu_out<=accum-data;

28.MUL:begin

29.if(!bzt)

30.begin

31.{tmp,alu_out}<=data*accum;

32.bzt<=1;

33.end

34.else

35.begin

36.alu_out<=tmp;

37.bzt<=0;

38.end

39.end

40.LDA:alu_out<=data;

41.STO:alu_out<=accum;

42.JA:alu_out<=accum;

43.default:alu_out<=8'bxxxx_xxxx;

44.endcase

45.end

46.assign bz=bzt;

47.endmodule

5、累加器

累加器用于存放当前的结果,它也是alu其中一个数据来源。复位后,累加器的值是零。当累加器通过ena口收到来自CPU状态控制器load_acc信号时,在clk1时钟正跳沿时就收到来自于数据总线的数据。

Verilog代码:

1.module accum(accum,data,ena,clk,rst);

2.output[7:0]accum;

3.input[7:0]data;

4.input ena,clk,rst;

5.reg[7:0]accum;

6.

7.always@(posedge clk)

8.begin

9.if(rst)

10.accum<=8'b0000_0000;//Reset

11.else

12.if(ena)//当CPU状态控制器发出load_acc信号

13.accum<=data;//接收来自ALU的数据

14.end

15.

16.endmodule

6、地址选择器

地址选择器用于选择输出的地址是PC(程序计数)地址还是数据/端口地址。每个指令周期的前4个时钟周期用于从ROM中读取指令,输出的应是PC地址。后4个时钟周期用于对RAM或端口的读写,该地址由指令中给出。地址的选择输出信号由fetch提供。

Verilog代码:

1.module addrchoose(addr,fetch,ir_addr,pc_addr);

2.output[4:0]addr;

3.input[4:0]ir_addr,pc_addr;

4.input fetch;

5.

6.assign addr=(fetch)?pc_addr:ir_addr;

7.

8.endmodule

7、数据选择器:

累加器的数据只有在需要往RAM区或输出口写时才允许输出,否则应呈现高阻态,以允许其它部件使用数据总线。所以任何部件往总线上输出数据时,都需要一控制信号。而此控制信号的启、停,则由CPU状态控制器输出的各信号控制决定。数据控制器何时输出累加器的数据则由状态控制器输出的控制信号datactl_ena决定。

Verilog代码:

1.module datactl(data,in,ena);

2.output[7:0]data;

3.input[7:0]in;

4.input ena;

5.

6.assign data=(ena)?in:8'bzzzz_zzzz;

7.endmodule

8、控制器

控制器是最重要的模块,它CPU的控制核心,用于产生一系列的控制信号,启动或停止某些部件。CPU何时进行读指令读写I/O端口,RAM区等操作,都是由状态机来控制的。状态机的当前状态,由变量state记录,state的值就是当前这个指令周期中已经过的时钟数。

第1个时钟:读指令,将rd与load_ir置高电平,其余为低电平。此时地址输出的是PC,所以会将

PC所指的ROM里的数据取到数据总线,并分开存入指令寄存器中。

第2个时钟:同上(不做任何操作)。

第3个时钟:空,输出全低(不做任何操作)。

第4个时钟:PC加1,将inc_pc置高电平,其余为低电平。

第5个时钟:这个时钟fetch翻转,由高变低,开始分析操作码并输出相应的信号。

第6个时钟:这个时钟alu_clk翻转,由低变高,alu分析操作码并进行相应运算,继续分析操作码并输出相应的信号。

第7个时钟:空(不做任何操作)

第8个时钟:空,输出全低(不做任何操作)。

Verilog代码:

1.module machine(inc_pc,load_acc,load_pc,rd,wr,load_ir,datactl_ena,clk,zero,rst,opcode,bz);

2.output inc_pc,load_acc,load_pc,rd,wr,load_ir,datactl_ena;

3.input clk,zero,rst,bz;

4.input[2:0]opcode;

5.reg inc_pc,load_acc,load_pc,rd,wr,load_ir,datactl_ena;

6.reg[7:0]state;

7.

8.parameter DIV=3'b000,

9.JMP=3'b001,

10.ADD=3'b010,

11.SUB=3'b011,

12.MUL=3'b100,

13.LDA=3'b101,

14.STO=3'b110,

15.JA=3'b111;

16.parameter SS0=8'b00000000,

17.SS1=8'b00000001,

18.SS2=8'b00000010,

19.SS3=8'b00000100,

20.SS4=8'b00001000,

21.SS5=8'b00010000,

22.SS6=8'b00100000,

23.SS7=8'b01000000,

24.SS8=8'b10000000;

25.

26.always@(posedge clk)

27.begin

28.if(rst)//接收到复位信号RST,进行复位操作

29.begin

30.state<=SS0;

31.{inc_pc,load_acc,load_pc,rd}<=4'b0000;

32.{wr,load_ir,datactl_ena}<=3'b000;

33.end

34.else

35.begin

36.case(state)

37.SS0:

38.begin

39.state<=SS1;

40.end

41.SS1://读指令

42.begin

43.{inc_pc,load_acc,load_pc,rd}<=4'b0001;

44.{wr,load_ir,datactl_ena}<=3'b010;

45.state<=SS2;

46.end

47.SS2:

48.begin

49.{inc_pc,load_acc,load_pc,rd}<=4'b0001;

50.{wr,load_ir,datactl_ena}<=3'b010;

51.state<=SS3;

52.end

53.SS3:

54.begin

55.{inc_pc,load_acc,load_pc,rd}<=4'b0000;

56.{wr,load_ir,datactl_ena}<=3'b000;

57.state<=SS4;

58.end

59.

60.SS4://pc+1

61.begin

62.{inc_pc,load_acc,load_pc,rd}<=4'b1000;

63.{wr,load_ir,datactl_ena}<=3'b000;

64.state<=SS5;

65.end

66.SS5://fetch翻转

67.begin

68.if(opcode==JA&&zero==1)

69.begin

70.{inc_pc,load_acc,load_pc,rd}<=4'b0010;

71.{wr,load_ir,datactl_ena}<=3'b000;

72.end

73.else

74.if(opcode==JMP)

75.begin

76.{inc_pc,load_acc,load_pc,rd}<=4'b0010;

77.{wr,load_ir,datactl_ena}<=3'b000;

78.end

79.else

80.if(opcode==ADD||opcode==SUB||opcode==MUL||opcode==LDA||

opcode==DIV)

81.begin

82.if(!bz)

83.begin

84.{inc_pc,load_acc,load_pc,rd}<=4'b0001;

85.{wr,load_ir,datactl_ena}<=3'b000;

86.end

87.else

88.begin

89.{inc_pc,load_acc,load_pc,rd}<=4'b0000;

90.{wr,load_ir,datactl_ena}<=3'b001;

91.end

92.end

93.else

94.if(opcode==STO)

95.begin

96.{inc_pc,load_acc,load_pc,rd}<=4'b0000;

97.{wr,load_ir,datactl_ena}<=3'b001;

98.end

99.else

100.begin

101.{inc_pc,load_acc,load_pc,rd}<=4'b0000;

102.{wr,load_ir,datactl_ena}<=3'b000;

103.end

104.state<=SS6;

105.end

106.SS6://alu_clock上升

107.begin

108.if(opcode==ADD||opcode==SUB||opcode==MUL||opcode==LDA||opcode==DIV) 109.begin

110.if(!bz)

111.begin

112.{inc_pc,load_acc,load_pc,rd}<=4'b0101;

113.{wr,load_ir,datactl_ena}<=3'b000;

114.end

115.else

116.begin

117.{inc_pc,load_acc,load_pc,rd}<=4'b0000;

118.{wr,load_ir,datactl_ena}<=3'b101;

119.end

120.end

121.else

122.if(opcode==JMP)

123.begin

124.{inc_pc,load_acc,load_pc,rd}<=4'b1010;

125.{wr,load_ir,datactl_ena}<=3'b000;

126.end

127.else

128.if(opcode==JA&&zero==1)

129.begin

130.{inc_pc,load_acc,load_pc,rd}<=4'b1010;

131.{wr,load_ir,datactl_ena}<=3'b000;

132.end

133.else

134.if(opcode==STO)

135.begin

136.//过一个时钟后把wr变1就可写到RAM中

137.{inc_pc,load_acc,load_pc,rd}<=4'b0000;

138.{wr,load_ir,datactl_ena}<=3'b101;

139.end

140.else

141.begin

142.{inc_pc,load_acc,load_pc,rd}<=4'b0000;

143.{wr,load_ir,datactl_ena}<=3'b000;

144.end

145.state<=SS7;

146.end

147.SS7:

148.begin

149.if(opcode==STO)

150.begin

151.{inc_pc,load_acc,load_pc,rd}<=4'b0000;

152.{wr,load_ir,datactl_ena}<=3'b001;

153.end

154.else

155.if(opcode==ADD||opcode==SUB||opcode==MUL||opcode==LDA|| opcode==DIV)

156.begin

157.{inc_pc,load_acc,load_pc,rd}<=4'b0001;

158.{wr,load_ir,datactl_ena}<=3'b000;

159.end

160.else

161.begin

162.{inc_pc,load_acc,load_pc,rd}<=4'b0000;

163.{wr,load_ir,datactl_ena}<=3'b001;

164.end

165.state<=SS8;

166.end

167.

168.SS8:

169.begin

170.{inc_pc,load_acc,load_pc,rd}<=4'b0000;

171.{wr,load_ir,datactl_ena}<=3'b000;

172.state<=SS1;

173.end

174.default:

175.begin

176.{inc_pc,load_acc,load_pc,rd}<=4'b0000;

177.{wr,load_ir,datactl_ena}<=3'b000;

178.state<=8'bxxxxxxxx;

179.end

180.endcase

181.end

182.

183.end

184.endmodule

9、ROM

程序存储器。

因为只需要验证下功能,这里的ROM是一种用verilog语言模拟的ROM,代码如下:

1.module rom(data,addr,rd,ena);

2.output[7:0]data;

3.input[4:0]addr;

4.input rd,ena;

5.reg[7:0]memory[31:0];

6.wire[7:0]data;

7.

8.initial

9.begin

10.memory[0]=8'b101_00000;//(00H)→A

11.memory[1]=8'b100_00001;//A*(01H)→TA

12.memory[2]=8'b100_11100;//T→1CH

13.memory[3]=8'b110_11101;//A→1DH

14.memory[4]=8'b001_00000;//00H→PC

15.

16.//1CH:输出口0地址,1DH:输出口1地址。(由硬件连接决定)

17.end

18.

19.assign data=(rd&&ena)?memory[addr]:8'bzzzzzzzz;

20.endmodule

10、RAM

1.module ram(data,addr,ena,rd,wr);

2.inout[7:0]data;

3.input[4:0]addr;

4.input ena;

5.input rd,wr;

6.reg[7:0]ram[27:0];

7.initial

8.begin

9.ram[0]=250;

10.ram[1]=100;

11.end

12.

13.assign data=(rd&&(!ena))?ram[addr]:8'hzz;

14.

15.always@(posedge wr)

16.begin

17.ram[addr]<=data;

18.end

19.endmodule

四、CPU的测试:

这里增加两个数码管译码输出口,将其挂在总线上,连接如下:

其功能是:将输入的8位数据译码,供数码管显示(16进制)。

几个测试用程序:

程序1:

乘法:将存在00H与01H的数相乘,结果送到输出口。

ROM:

//1CH:输出口0的地址,1DH:输出口1的地址

memory[0]=8'b101_00000;//(00H)→A

memory[1]=8'b100_00001;//A*(01H)→TA

memory[2]=8'b100_11101;//T→1DH

memory[3]=8'b110_11100;//A→1CH

memory[4]=8'b001_00000;//00H→PC

RAM:

ram[0]=250;

ram[1]=100;

程序2:

除法:将(00H)/(01H)的结果送到输出口。

memory[0]=8'b101_00000;//(00H)→A

memory[1]=8'b000_00001;//A/(01H)→A

memory[2]=8'b110_11100;//A→1CH

memory[3]=8'b001_00000;//00H→PC

程序3:

减1:让输出口的数循环减一。

ROM:

memory[0]=8'b101_00000;//(00H)→A

memory[1]=8'b011_00001;//A-(01H)→A

memory[2]=8'b110_11100;//A→1CH

memory[3]=8'b111_00000;//如果A=0:00H→PC。否者PC+1→PC

memory[4]=8'b001_00001;//01H→PC

RAM:

ram(0)=16;

ram(1)=1;

程序4:

加、减1:输出先由F减到0再加到F,如此循环。

//RAM:00H=16,01H= 1.

memory[0]=8'b101_00000;//(00H)→A

memory[1]=8'b011_00001;//A-(01H)→A

memory[2]=8'b110_11100;//A→1CH

memory[3]=8'b111_00101;//如果A=0:05H→PC。否者PC+1→PC

memory[4]=8'b001_00001;//01H→PC

memory[5]=8'b010_00001;//A+(01H)→A

memory[6]=8'b110_00010;//A→02H

memory[7]=8'b101_00000;//(OOH)→A

memory[8]=8'b011_00010;//A-(02H)→A

memory[9]=8'b111_00000;//如果A=0:00H→PC。否者PC+1→PC

memory[10]=8'b101_00010;//(02H)→A

memory[11]=8'b110_11100;//A→1CH

memory[12]=8'b001_00101;//05H→PC

乘法程序测试结果:

这个乘法程序将RAM里00H里的数乘以01H里的数,然后输出到数码管译码输出口。

十进制:250*100=25000。

十六进制:FA*64=61A8。

61A8在数码管上显示的段码分别为:

BE101111106

60011000001

EE11101110A

FE111111108

仿真波形图:

段码:BE60EE FE

显示:61A8

最终输出端口上输出了想要的值,CPU设计成功。

五、总结

本次设计不仅完成了设计任务与技术指标而且还有一定的发挥,在目前的基础上进行改进可以很容易的增加指令种类,增加寻址方式,增加寻址空间,再增加适当的外设,几乎可以无限的扩展该CPU的功能。

六、参考文献

1、夏宇闻《verilog数字系统设计教程(第2版)》

2、相关技术网站。

微处理器课程设计报告

桂林航天工业学院 课程设计报告 系(部):电子工程与自动化学院专业班级:xxxx班学生姓名:xxx学号:xxxxxx 课程:微处理器与接口技术课程设计 设计题目:简易波形发生器 完成日期:2016年01月04日 指导教师评语: 成绩(五级记分制): 指导教师(签字):____

摘要 本系统是基于STC89C52单片机的数字式低频信号发生器。采用STC89C52单片机作为控制核心,外围采用数字/模拟转换电路(DAC0832)、运放电路(LM324)、按键和8位数码管等。通过按键控制可产生方波、三角波、正弦波等,同时用数码管指示其对应的频率。其设计简单、性能优好,可用于多种需要低频信号的场所,具有一定的实用性。 各种各样的信号是通信领域的重要组成部分,其中正弦波、三角波和方波等是较为常见的信号。在科学研究及教学实验中常常需要这几种信号的发生装置。为了实验、研究方便,研制一种灵活适用、功能齐全、使用方便的信号源是十分必要的。 本文介绍的是利用STC89C52单片机和数模转换器件DAC0832产生所需不同信号的低频信号源,其信号幅度和频率都是可以按要求控制的。文中简要介绍了DAC0832数模转换器的结构原理和使用方法,STC89C52的基础理论,以及与设计电路有关的各种芯片。文中着重介绍了如何利用单片机控制D/A转换器产生上述信号的硬件电路和软件编程。信号频率幅度也按要求可调。 本次关于产生不同低频信号的信号源的设计方案,不仅在理论和实践上都能满足实验的要求,而且具有很强的可行性。该信号源的特点是:体积小、价格低廉、性能稳定、实现方便、功能齐全。 关键词: STC89C52 DAC0832 LM324 数码管 Abstract The Waveform The system is a digital signal generator based on single chip computer.STC89c52 is used as a control microcontroller core.The system is composed by digital/analog comversion(DAC0832), imply circuit,button and nixie tube.It can generate the square, triangle and sine wave,with nixie tube.The system can be used for a signal soure in the low-frequency signal soure.It is very practical. Various signals are an important part of correspondent area. In this area, sine wave, triangle wave and square wave are common signals. In science research and teaching experiment, we often need the occurrence equipment of these signals. In order to make the experiment and research easier, to develop a suitable, full functional and easily used signals

微处理器系统结构与嵌入式系统设计(第2版) 第3章答案

“微处理器系统原理与嵌入式系统设计”第三章习题解答 3.1处理器有哪些功能?说明实现这些功能各需要哪些部件,并画出处理器的基本结构图。 处理器的基本功能包括数据的存储、数据的运算和控制等功能。其有5个主要功能:①指令控制②操作控制③时间控制④数据加工⑤中断处理。其中,数据加工由ALU 、移位器和寄存器等数据通路部件完成,其他功能由控制器实现。处理器的基本结构图如下: 寄存器组 控制器 整数单元 浮点单元 数据通路 处理器数据传送 到内存数据来自内存数据传送到内存指令来自内存 3.2处理器内部有哪些基本操作?这些基本操作各包含哪些微操作? 处理器基本操作有:取指令、分析指令、执行指令。 取指令:当程序已在存储器中时,首先根据程序入口地址取出一条程序,为此要发出指令地址及控制信号。 分析指令:对当前取得的指令进行分析,指出它要求什么操作,并产生相应的操作控制命令。 执行指令:根据分析指令时产生的“操作命令”形成相应的操作控制信号序列,通过运算器、存储器及输入/输出设备的执行,实现每条指令的功能,其中包括对运算结果的处理以及下条指令地址的形成。 3.3什么是冯·诺伊曼计算机结构的主要技术瓶颈?如何克服? 冯·诺伊曼计算机结构的主要技术瓶颈是数据传输和指令串行执行。可以通过以下方案克服:采用哈佛体系结构、存储器分层结构、高速缓存和虚拟存储器、指令流水线、超标量等方法。

3.5指令系统的设计会影响计算机系统的哪些性能? 指令系统是指一台计算机所能执行的全部指令的集合,其决定了一台计算机硬件主要性能和基本功能。指令系统一般都包括以下几大类指令。:1)数据传送类指令。(2)运算类指令 包括算术运算指令和逻辑运算指令。(3)程序控制类指令 主要用于控制程序的流向。 (4)输入/输出类指令 简称I/O 指令,这类指令用于主机与外设之间交换信息。 因而,其设计会影响到计算机系统如下性能: 数据传送、算术运算和逻辑运算、程序控制、输入/输出。另外,其还会影响到运算速度以及兼容等。 3.9某时钟速率为2.5GHz 的流水式处理器执行一个有150万条指令的程序。流水线有5段,并以每时钟周期1条的速率发射指令。不考虑分支指令和乱序执行带来的性能损失。 a)同样执行这个程序,该处理器比非流水式处理器可能加速多少? b)此流水式处理器是吞吐量是多少(以MIPS 为单位)? a.=51p T nm S T m n =≈+-串流水 速度几乎是非流水线结构的5倍。 b.2500M IPS p n T T =≈流水 3.10一个时钟频率为2.5 GHz 的非流水式处理器,其平均CPI 是4。此处理器的升级版本引入了5级流水。然而,由于如锁存延迟这样的流水线内部延迟,使新版处理器的时钟频率必须降低到2 GHz 。 (1) 对一典型程序,新版所实现的加速比是多少? (2) 新、旧两版处理器的MIPS 各是多少? (1)对于一个有N 条指令的程序来说: 非流水式处理器的总执行时间s N N T 990 106.1)105.2/()4(-?=??= 5级流水处理器的总执行时间s N N T 991 10)4(2)102/()15(-?+=?-+= 加速比=42.310 +=N N T T ,N 很大时加速比≈3.2 (2)非流水式处理器CPI=4,则其执行速度=2500MHz/4=625MIPS 。 5级流水处理器CPI=1,则其执行速度=2000 MHz /1=2000 MIPS 。 3.11随机逻辑体系结构的处理器的特点是什么?详细说明各部件的作用。 随机逻辑的特点是指令集设计与硬件的逻辑设计紧密相关,通过针对特定指令集进行

多周期微处理器设计

微处理器系统设计 课程设计 版本v1.0 专业:集成电路设计与集成系统班级:电路1303班 姓名:周小朋 学号:05136085 2016年6月20 ~ 2016年7月1日

多周期微处理器设计 注:非正式版,仅为初稿 一、功能描述 MIPS微处理器是典型的32位定长指令字RISC处理器,此次设计的微处理器是基于verilogHDL语言、兼容MIPS指令格式、带有I/O接口和中断处理电路、能够实现26条指令功能,并且可以在DE2开发板上进行下载验证的多周期CPU。可以实现的指令包括,R型:add、addu、sub、subu、and、or、xor、nor、slt、sltu、sll、srl、sra、jr;I型:addi、addiu、lui、andi、ori、xori、lw、sw、beq、bne;J型:jal、jump。并且可以实现一段流水灯程序,程序的样式为1)10101010->010*******切换间隔为0.5秒2)11110000->00001111,切换间隔为1秒。两种样式通过按键控制。 二、设计方案 1.总体设计方案 此次设计是在前期课程已经设计好的单周期CPU上进行多周期CPU的设计,多周期指令的执行分为5个阶段:取指、译码、执行、访存、回写。由于PC,指令存储器只能在需要时写入新值,因此必须有“写使能信号”控制。可以用状态机来实现5个状态的转换以及控制信号的产生。来控制此次设计要实现一段流水灯程序,总共有两组不同的花型切换。可以先利用ori指令初始化第一组花型到两个寄存器,再利用SW指令将存到寄存器的花型读出存储到IO接口,通过LED显示,最后用J指令实现花型的循环,此即使第一组花型的实现。接下来考虑按键切换到下一组花型,可以使用按键产生一个中断信号,当按下按键时,进入中断程序,在中断程序里边存储第二个花型及其花型切换与循环,实现方式与花型一相同。时间的控制可以利用指令的条数进行控制,通过分频产生一个标准时钟,sw占用4个时钟周期,j型占用2个时钟周期,可以通过指令的条数来控制题目所需要的0.5s与1s。花型跳转示意图如下: 图1.流水灯实现示意图 总体设计框图如下:

简单微处理器的设计

简单微处理器的设计 摘要:本课程设计采用EDA技术设计简单微处理器。系统设计采用自顶向下的设计方法。它由数的输入,数的比较,数的交换和结果输出四部分组成。系统实现采用硬件描述语言VHDL把系统电路按模块化方式进行设计,然后进行编程、时序仿真并分析。系统结构简单,使用方便,功能齐全,精度高,具有一定的应用价值。 关键词:处理器;输入;比较;交换

目录 1 引言 (1) 1.1课题设计的背景、目的 (1) 1.2 课程设计的内容 (1) 2 EDA、VHDL简介 (2) 2.1 EDA简介 (2) 2.2 VHDL简介 (2) VHDL语言的特点 (2) VHDL的设计流程 (3) 3 简单微处理器的设计过程 (4) 3.1设计规划 (4) 3.2 各模块设计及相应程序 (4) 4 系统仿真 (8) 1.数的输入. (8) 2 数的比较。 (8) 3 交换两个数。 (9) 4 结果输出(从小到大). (9) 结束语 (11) 致谢 (12) 参考文献 (13) 附录 (14)

1 引言 随着社会的发展,科学技术也在不断的进步。特别是计算机产业,可以说是日新月异,而处理器,作为计算机中的一个重要部分,其性能从很大程度上决定了计算机的性能。本设计介绍的简单微处理器,要求具有以下验证程序所要求的功能:输入包含10个整数(无符号数)的数组M,按从小到大的顺序输出这10个数。 1.1课题设计的背景、目的 微处理器技术的发展是与微电子技术即大规模集成电路技术的发展分不开的。微电子技术以每18个月集成度提高一倍的速度迅速发展。20世纪80年代初,主要是16位微处理器8086/8088。1985年推出了80386微处理器,完成了16位体系结构向32位体系结构的转变。1989年80486出现了。80486的设计目标是提高指令执行速度和支持多处理器系统。80486在芯片内部增加一个8KB的高速缓冲存储器(cache),还增加了相当于80387的浮点部件(FPU),在基本指令的实现上,采用硬布线逻辑而不是微程序技术。1993年3月,Intel公司推出了第一代“奔腾”微处理器(Pentium),微处理器技术发展进入了一个新的阶段。到目前为止,“奔腾”已有四代产品。“奔腾”的设计思想是把如何提高微处理器内部指令执行的并行性作为主导。指令执行的并行性越好,微处理器的性能就越高。 本次设计的目的就是了解并掌握VHDL硬件描述语言的设计方法和思想,通过学习的VHDL语言结合电子电路的设计知识理论联系实际,掌握所学的课程知识,学习VHDL基本单元电路的综合设计应用。通过对实用电子称的设计,巩固和综合运用所学课程,理论联系实际,提高IC设计能力,提高分析、解决计算机技术实际问题的独立工作能力。通过课程设计深入理解VHDL语言的精髓,达到课程设计的目标。 1.2 课程设计的内容 本设计主要介绍的设计一台简单微处理器,要求具有以下验证程序所要求的功能:输入包含10个整数(无符号数)的数组M,按从小到大的顺序输出这10个数。 ( 1 )程序开始及输入10个数据。 ( 2 )数的比较。

基于51单片机的简易逻辑分析仪设计

本科生毕业设计报告学院物理与电子工程学院专业电子信息工程 设计题目:基于51单片机的 简易逻辑分析仪设计 学生姓名 指导教师 (姓名及职称) 班级 学号 完成日期:年月

基于51单片机的简易逻辑分析仪设计 物理与电子工程学院电子信息工程 [摘要]本设计完成了一种能进行数字电路中多路数据测试的简易逻辑分析仪。它以51单片机控制核心,数模转换器为逻辑信号门限电平控制电路,用按键和 12864LCD作为人机交互界面,采用C51进行模块化编程,实现了四路信号的测试,具有成本低,使用方便等特点。 [关键词]数字电路单片机数模转换器逻辑分析仪 1 设计任务与要求 本设计的主要任务及参数指标是:数据位数4位,存储深度80字;数据速率最高1kHz;输入阻抗大于50kΩ;逻辑信号门限电平在1.0V~4.0V 范围内按8级任意设定。 2 设计方案 本系统采用51单片机为控制核心,系统由单片机系统、逻辑电平控制、按键、LCD显示、系统电源等模块构成。被测数据输入到逻辑电平控制模块,然后进行单片机进行测试,按键用于控制逻辑信号门限电平的大小,系统电源为各模块供电,各模块的供电电压为5V。

图1 系统框图 3 设计原理分析 3.1 单片机系统电路设计 图2 单片机系统电路 单片机系统为逻辑分析仪的核心,负责控制逻辑分析仪的逻辑电平、检测按键并驱动LCD 进行显示。单片机系统电路如图2所示,由晶体振荡器Y1、电容C3和C4构成振荡器电路,为单片机提供时钟信号。电容C1、电阻R2和R1、按键KEY1构成单片机复位电路,高电平复位,当按键KEY1按下的时间超过2个机器周期以上时,单片机就执行复位操作。EA 接高电平,单片机首先访问内部程序存储器。J1为1KΩ的排阻,作为P0口的外部上拉电阻。在硬件制作时为了方便单片机的测试和功能的扩展,把所有的I/O 口均通过排针引出。 EA/VP 31X119X218RESET 9 RD 17WR 16 INT012INT113T014T115P101P112P123P134P145P156P167P178P0039P0138P0237P0336P0435P0534P0633P0732P2021P2122P2223P2324P2425P2526P2627P27 28 PSEN 29 ALE/P 30TXD 11RXD 10U18051 P10 P11P12P13P14P15P16P17P00P01P02P03P04P05P06P07P20P21P22P23P24P25P26P27 123456789J1 1K +5 Y112M +5 RXD TXD RD WR T0T1INT0INT1C3 22p F C4 22p F R28.2K C110u F +5 12J6CON2 KEY1SW2 R1100 . .

微处理器原理及其系统设计 第一章答案

第1章 1.将下列十进制数转换成二进制数: (1)58;(2)67.625; (3)5721; 解:(1)58D = 0011 1010B (2)67.625D = 0100 0011.1010B (3)5721D = 0001 0110 0101 1001B 2.将二进制数变换成十六进制数: (1)1001 0101B;(2)11 0100 1011B;(3)1111 1111 1111 1101B;(4)0100 0000 10101B;(5)0111 1111B;(6)0100 0000 0001B 解:(1)1001 0101B = 95H (2)11 0100 1011B = 34BH (3)1111 1111 1111 1101B = FFFDH (4)0 1000 0001 0101B = 815H (5)0111 1111B = 7FH (6)0100 0000 0001B = 401H 3.将十六进制数变换成二进制数和十进制数: (1)78H;(2)0A6H;(3)1000H;(4)0FFFFH 解:(1)78H = 120D = 0111 1000B (2)0A6H = 166D = 1010 0110B (3)1000H = 4096D = 0001 0000 0000 0000H (4)0FFFFH = 65535D = 1111 1111 1111 1111B 4.将下列十进制数转换成十六进制数: (1)39;(2)299.34375;(3)54.5625 解:(1)39D = 27H (2)299.34375D = 12B.58H (3)54.5625D = 36.9H 5.将下列二进制数转换成十进制数: (1)10110.101B;(2)10010010.001B;(3)11010.1101B 解:(1)10110.101B = 22.625D

嵌入式系统课程设计---基于ARM微处理器的数码管驱动设计-任务书(1)

河南工业大学嵌入式课程设计 课程设计题目:基于ARM微处理器的数码管驱动设计学院:信息科学与工程学院 班级:电科1304 姓名: 学号:2013160304 指导老师姓名:李智慧

13级电科专业课程设计任务书

基于ARM微处理器的数码管驱动设计 一、设计要求 1.1实验内容: 1. 利用ARM微处理器实现数码管显示驱动; 2.能够显示0 1 2 3 4 5 6 7 8 9等数字,且循环显示; 3. 通过按键改变循环显示速度; 1.2实验设备: 硬件:PXA270 实验平台,PXA270 ARM 标准/增强型仿真器套件,PC 机。 软件:VMware Workstation、Ubuntu、win7。 二、设计方案 本次试验选用的芯片为 PXA270 ,使用的是 PXA270集成试验箱。基于 IntelXScale 架构的 PXA270处理器,集成了存储单元控制器、时钟和电源控制器、 DMA控制器、 LCD控制器、 AC97控制器、 I2S 控制器、快速红外线通信 (FIR) 控制器等外围控制器,可以实现丰富的外围接口功能。其低电源运行模式以及动态电源管理技术可以有效的降低电源的功耗。使用试验箱上的 4X4 的矩阵键盘作为输入,用来控制数码管显示的快慢速度,将需要输出的各个数码管状态从两个数码管中输出。 三、设计原理 1、数码管结构 七段数码管由 8 个发光二极管排列组成(包括小数点位)如下图所示: 这 8 个独立的二极管通常被命名: a.b.c.d.e.f.g.h 。 h 表示小数点。利用 7 段数码管能显示所有数字以及部分英文字母。 数码管有 2 种不同的形式:一种是 8 个发光二极管的阳极都连一起,成为共 阳极 8 段数码管如图所示: 共阳极 8 段数码管的 8 个发光二极管的正极一起接 VCC ,要控制数码管中的某一段亮,比如 A段,只须要控制数码管的 A 脚为低电平就可以了,反之熄灭 A 段就控制 A 脚为高电平。

基于51单片机的简易逻辑分析仪设计说明书

word文档整理分享 本科生毕业设计报告学院物理与电子工程学院专业电子信息工程 设计题目:基于51单片机的 简易逻辑分析仪设计 学生姓名 指导教师 (姓名及职称) 班级 学号 完成日期:年月

基于51单片机的简易逻辑分析仪设计 物理与电子工程学院电子信息工程 [摘要]本设计完成了一种能进行数字电路中多路数据测试的简易逻辑分析仪。它以51单片机控制核心,数模转换器为逻辑信号门限电平控制电路,用按键和 12864LCD作为人机交互界面,采用C51进行模块化编程,实现了四路信号的测试,具有成本低,使用方便等特点。 [关键词]数字电路单片机数模转换器逻辑分析仪 1 设计任务与要求 本设计的主要任务及参数指标是:数据位数4位,存储深度80字;数据速率最高1kHz;输入阻抗大于50kΩ;逻辑信号门限电平在1.0V~4.0V 范围内按8级任意设定。 2 设计方案 本系统采用51单片机为控制核心,系统由单片机系统、逻辑电平控制、按键、LCD显示、系统电源等模块构成。被测数据输入到逻辑电平控制模块,然后进行单片机进行测试,按键用于控制逻辑信号门限电平的大小,系统电源为各模块供电,各模块的供电电压为5V。

图1 系统框图 3 设计原理分析 3.1 单片机系统电路设计 图2 单片机系统电路 单片机系统为逻辑分析仪的核心,负责控制逻辑分析仪的逻辑电平、检测按键并驱动LCD 进行显示。单片机系统电路如图2所示,由晶体振荡器Y1、电容C3和C4构成振荡器电路,为单片机提供时钟信号。电容C1、电阻R2和R1、按键KEY1构成单片机复位电路,高电平复位,当按键KEY1按下的时间超过2个机器周期以上时,单片机就执行复位操作。EA 接高电平,单片机首先访问内部程序存储器。J1为1KΩ的排阻,作为P0口的外部上拉电阻。在硬件制作时为了方便单片机的测试和功能的扩展,把所有的I/O 口均通过排针引出。 EA/VP 31X119X218RESET 9 RD 17WR 16 INT012INT113T014T115P101P112P123P134P145P156P167P178P0039P0138P0237P0336P0435P0534P0633P0732P2021P2122P2223P2324P2425P2526P2627P27 28 PSEN 29 ALE/P 30TXD 11RXD 10U18051 P10 P11P12P13P14P15P16P17P00P01P02P03P04P05P06P07P20P21P22P23P24P25P26P27 123456789J1 1K +5 Y112M +5 RXD TXD RD WR T0T1INT0INT1C3 22p F C4 22p F R28.2K C110u F +5 12J6CON2 KEY1SW2 R1100 . .

简易逻辑分析仪

简易逻辑分析仪 摘要 本系统基于逻辑分析仪原理,以AT89C系列单片机为核心,设计制作完成了简易逻辑分析仪。本系统主要由数字信号发生器模块、采集存储和示波器显示模块、人机交互模块三部分组成。基于题目要求,本系统对触发方式、信号采集存储、示波器显示波形和时间标志线、友好的人机界面等功能进行了重点设计。经测试,各项指标均满足基本部分和发挥部分的要求,并且有些指标超出题目要求。 关键字:逻辑分析仪;单片机;液晶 Abstract: Keywords: Signal Oscilloscope;MCU;LCM 1、 总体方案设计 1. 方案比较和选择 方案一:纯FPGA/CPLD(可带IP核)或FPGA/CPLD与单片机结合方式。即由FPGA/CPLD产生数字序列信号,判断单、三级触发信号,设定门限电压,采集、存储、显示被测信号;由IP核实现人机交互及信号测量分析等功能;或由单片机完成IP核实现的功能。此方案优点是速度快、精度高。缺点是软硬件复杂、调试困难、程序不易控制、性价比极低;而且体现不出本方案的优势。 方案二:纯单片机方式。即由多片单片机分别完成数字序列发生器,判断触发信号、数据采集、存储、显示,人机交互、门限电压设定

等功能。优点是操作方便、软件结构清晰、控制灵活、调试容易、性价比较高。本系统对速度的要求不是很高,所以单片机完全能够胜任。 2. 系统设计方案 本系统以三片单片机AT89C51为核心,将设计任务分解为数字信号发生器模块、采集存储和示波器显示模块、人机交互模块三部分。其中核心和关键部分是采集存储和示波器显示模块,另外两个模块起辅助作用。总体系统框图如图1所示。 图1 2、 电路设计与分析 1.可预置的8路数字信号发生器 本模块用于产生8路可预置的重复循环移位逻辑信号序列,输出信号为TTL电平,序列时钟频率为100Hz。输出数字信号如图2示例所示。

逻辑分析仪使用教程

声明: 本文来自 另外,将68013制作逻辑分析仪的原理说明简单整理了一下,大家可以瞧瞧,如果想DIY也就不难了。点击此处下载ourdev_578200、pdf(文件大小:203K)(原文件名:逻辑分析仪开发手册、pdf) 前言 一、什么就是逻辑分析仪 二、使用介绍 三、安装说明 四、Saleae软件使用方法 五、逻辑分析仪硬件安装 六、使用Saleae分析电视红外遥控器通信协议 七、使用Saleae分析UART通信 八、使用Saleae分析IIC总线通信 九、使用Saleae分析SPI总线通信 十、Saleae逻辑分析仪使用问题与注意事项

淘宝地址: (原文件名:21、jpg) 前言: 工欲善其事,必先利其器。逻辑分析仪就是电子行业不可或缺的工具。但就是由于一直以来,逻辑分析仪都属于高端产品,所以价格居高不下。因此我们首先要感谢Cypress公司,提供给我们68013这么好的芯片,感谢俄罗斯毛子哥将这个Saleae逻辑分析仪开源出来,让我们用平民的价格,就可以得到贵族的待遇,获得一款性价比如此之高的逻辑分析仪,可以让我们在进行数字逻辑分析仪的时候,快速查找并且解决许多信号、时序等问题,进一步提高我们处理实际问题的能力。 原本计划,直接将Saleae的英文版本使用手册直接翻译过来提供给大家,我花费半天时间翻译完后,发现外国人写的东西不太符合我们国人的思维习惯,当然,也就是由于我的英语水平有限,因此,我根据自己摸索这个Saleae的过程,写了一份个人认为符合中国人习惯的Saleae,提供给大家,希望大家在使用过程中少走弯路,快速掌握使用方法,更快的解决自己实际遇到的问题。 由于个人水平有限,因此在文章撰写的过程中难免存在问题与错误,如果有任何问题,希望大家能够提出来,我会虚心接受并且改进,希望通过我们的交流,给越来越多的人提供更加优秀的资料,共同进步。 一、什么就是逻辑分析仪: 逻辑分析仪就是一种类似于示波器的波形测试设备,它通过采集指定的信号,并通过图形或者数据统计化的方式展示给开发人员,开发人员通过这些图形化时序信号按照协议来分析硬件或者软件中的错误。逻辑分析仪就是设计中不可缺少的设备,通过它,可以迅速定位错误,发现并解决问题,达到事半功倍的效果,尤其在分析时序,比如1wire、I2C、UART、SPI、CAN等数据的时候,应用逻辑分析仪解决问题非常快速。 如果在您的工作中有数字逻辑信号,您就有机会使用逻辑分析仪。因此应选好一种逻辑分析仪,既符合所用的功能,又不太超越所需的功能。用户多半会找一种容易操作的仪器,它在功能控制上操作步骤较少,菜单种类也不多,而且不太复杂。而Saleae就就是一种低端的,比较适合大众化的逻辑分析仪,价格便宜,而且常用的逻辑分析功能足够,人机界面人性化,非常适合实用。 以下就是一个Saleae分析I2C时序的一个典型例子:从图中我们可以清晰的瞧到,起始信号start,从地址就是0x50的器件中去读取数据,第一个字节就是0xc0,第二个字节就是0x50,有了逻辑分析仪,我们可以快捷的找出我们的I2C时序读写数据的正确与否,可以很快将问题解决。后边的讲解中,我会详细讲解逻辑分析仪分析红外遥控器,UART时序,I2C时序的具体方式方法。

简单微处理器的设计与实现

实验五简单微处理器的设计与实现 一、设计任务和技术指标 运用在“数字电路与逻辑设计”课程中学过的基本理论知识,设计并用可编程逻辑器件实现一个简单的八位操作数的微处理器。完成微处理器硬件系统设计和指令系统设计两方面的任务,使微处理器能够实现两个不带符号位的八位二进制数原码相乘等功能。 二、简单微处理器介绍 1.微处理器硬件系统及原理 微处理器硬件系统包括运算器、控制器、存储器以及其它必要的逻辑部件。图4-1是一个微处理器的参考原理框图,具体说明如下: (1)程序计数器PC:存放将要执行指令的地址。 (2)指令存储器IROM,存放程序指令,每条指令的长度为W,指令的个数为L。 (3)指令寄存器IR:存放被执行指令的操作码,直接供运算控制器。 (4)控制器CON:产生一系列时序逻辑信号,控制微处理器各个部件协调一致地完成每条指令相应的操作,实现两个操作数的运算。 (5)通用寄存器堆R0-R7:用来临时存放运算过程中读出和写入的数据。 (6)缓冲寄存器RS和RD:用于存放ALU的两个输入操作数。 (7)运算器ALU和进位寄存器C:运算器ALU对两个操作数RS和RD进行加、减或逻辑运算处理,在进行加减运算时还接受控制器的进位输入信号CI,ALU的运算结果送给通用寄存 器或特殊寄存器。ALU还根据运算结果设置进位标志C和零标志Z。 (8)运算结果显示送七段数码管显示,用十六进制显示。 输入 输出 图4-1 简单微处理器框图 2.处理器指令系统及功能 处理器的基本指令字长为W位,指令的每一位从高到低用D W、D W-1、…D1、D0表示,有些微处理器的一条指令包括多个指令字长,即每条指令的长度不一样,例如Intel的80386等。本实验为了简化设计,规定所有的指令都是单指令字的指令,即所有指令的长度都是W。基本的指令系统一般包括

微原课程设计

微机原理课程设计 学院机电工程学院 专业自动化 姓名颜秦鑫 学号 指导教师千博董瑞军

第一章绪论 1.1课程设计的意义: 《微机原理与接口技术》是自动化专业的专业基础课,在总课程体系种占有重要的位置。课程设计的目的是使学生更进一步掌握微机原理及应用课程的有关知识,加深对微机应用的理解,以达到巩固课堂教学内容,并进一步加强学生的应用能力和创新能力,是培养学生综合素质,提高动手能力,增强发现问题和解决问题能力的重要部分。 1.2课程设计的目的: 1.掌握8088最小系统的实现方法 2.掌握利用8088最小系统完成存储器的设计及其扩展方法 3.掌握系统设计时的地址空间分配及其译码电路设计 4.掌握利用8088最小系统完成接口设计的方法 5.掌握8255、8253、0809、0832等芯片的使用方法 1.3 课程设计的要求: 1.构成8088最小工作系统 2.分别采用两片6264和2764完成存储器电路的设计 3.采用ADC0809组成8位温度AD变换接口电路 4.采用DAC0832组成8位DA变换接口电路驱动直流电机 5.采用8255和8253组成步进电机的控制电路 第二章设计思路说明 2.1 设计任务分析: 系统要求采用8088工作于最小方式下,在这种方式中,8088CPU引脚直接产生存储器或I/O口读写的所有控制信号。首先利用8284提供时钟信号,同时也提供了复位信号和准备好信号。然后利用3片74LS373锁存器芯片形成20位地址总线,利用1片74LS245双向数据收发器芯片形成8位数据总线,至此形成

总线逻辑电路和最小系统工作电路。存储器设计分别采用2片2764和2片6264进行扩展,分别形成16KB的ROM和16KB的RAM。温度变换电路采用AD590采集温度信号送入0809的通道进行AD转换,并用8259对其产生的EOC信号产生中断控制。将系统数据送入0832进行DA转换,完成控制直流电机。系统的定时计数器8253完成对步进电机定时计数,采用8255并行接口控制步进电机。以上各模块译码电路均由74LS138产生。 2.2 系统各模块地址空间分配: 存储器模块: ROM:FC000H—FFFFFH RAM:00000H—03FFFH 温度变换模块: ADC0809:000H—007H 8259:008H—009H 直流电机驱动模块: DAC0832:00AH 步进电机控制模块: 8253:00CH—00FH 8255:010H—013H 键盘显示模块: 8255:014H—017H 第三章电路总体构成 3.1 最小系统设计: 3.1.1 8088芯片介绍 1.8088芯片简介:

16位cpu设计课程设计

石家庄经济学院 信息工程学院 计算机组成原理课程设计报告 题目16位模型计算机的设计 姓名 学号 班号 指导老师 成绩 2011年1月

目录 1. 课程设计目的 (3) 2. 开发工具选择 (3) 3. 方案选择 (3) 4.指令系统设计 (4) 5. 模型机框图设计 (4) 6. 指令流程图 (5) 7.微指令格式(微程序控制器)设计 (6) 8.微程序(微程序控制器)设计 (7) 9. VHDL程序代码 (9) 10. 调试仿真 (16) 11. 课程设计回顾总结 (18) 参考文献 (18)

1. 课程设计目的 (1)、计算机组成原理课程设计的主要任务是让学生通过动脑和动手解决计算机设计中的实际问题。综合运用所学计算机组成原理知识,在掌握部件单元电路实验的基础上,进一步将其组成系统构造一台基本的模型计算机,掌握整机概念,并设计机器指令系统,编写程序,在所设计的模型计算机上调试运行。 (2)、通过一台模型机的设计过程,明确计算机的控制原理与控制过程,巩固和灵活应用所学的理论知识,掌握计算机组成的一般设计方法,提高学生设计能力和实践操作技能,为从事计算机研制与设计打下基础。 2. 开发工具选择 使用QUARTUS 5.0软件编写并调试VHDL程序,然后做功能仿真。 3. 方案选择 本次实习的内容为16位模型计算机的设计,单总线,采用微程序控制方式,有四种寻址方式:直接寻址、寄存器寻址、寄存器间接寻址和变址寻址。 微程序控制方式由微指令译码产生。微程序中一条机器指令往往分成几步执行,将每一步操作所需的若干为命令以代码编写在一条微指令中,若干条微指令组成一段微程序,对应一条机器指令。然后根据系统的需要,事先编制各段微程序,将它存入一个专用寄存器(即控制存储器)中。 微程序执行过程:如图1所示,为微程序控制基本框: (1)从控存中逐条取出“取指令操作”,执行取指令公共操作。 (2)根据指令的操作码,经过微地址形成部件,得到这条指令的入口地址,并送入微地址寄存器中。 (3)从控存中逐条的取出对应的微指令并执行。 (4)执行完一条机器指令对应的微程序后又回到取指微程序的入口地址,继续第(1)步,以完成取下一条机器指令的公共操作。 IR PSW PC 微地址 形成电路 微地址寄 存器μAR 微指令寄存器μIR 译码器 控制存储器CM 指令代码 运行状态 …… 微命令字段微地址字段 …… 微命令序列 图1 微程序控制基本框

逻辑分析仪使用教程

声明: 本文来自 另外,将68013制作逻辑分析仪的原理说明简单整理了一下,大家可以看看,如果想DIY也就不难了。点击此处下载(文件大小:203K)(原文件名:逻辑分析仪开发手册.pdf) 前言 一、什么是逻辑分析仪 二、使用介绍 三、安装说明 四、Saleae软件使用方法 五、逻辑分析仪硬件安装 六、使用Saleae分析电视红外遥控器通信协议 七、使用Saleae分析UART通信 八、使用Saleae分析IIC总线通信 九、使用Saleae分析SPI总线通信 十、Saleae逻辑分析仪使用问题和注意事项 淘宝地址:(原文件名: 前言: 工欲善其事,必先利其器。逻辑分析仪是电子行业不可或缺的工具。但是由于一直以来,逻辑分析仪都属于高端产品,所以价格居高不下。因此我们首先要感谢Cypress 公司,提供给我们68013这么好的芯片,感谢俄罗斯毛子哥将这个Saleae逻辑分析仪开源出来,让我们用平民的价格,就可以得到贵族的待遇,获得一款性价比如此之高的逻辑分析仪,可以让我们在进行数字逻辑分析仪的时候,快速查找并且解决许多信号、时序等问题,进一步提高我们处理实际问题的能力。 原本计划,直接将Saleae的英文版本使用手册直接翻译过来提供给大家,我花费半天时间翻译完后,发现外国人写的东西不太符合我们国人的思维习惯,当然,也是由于我的英语水平有限,因此,我根据自己摸索这个Saleae的过程,写了一份个人认为符合中国人习惯的Saleae,提供给大家,希望大家在使用过程中少走弯路,快速掌握使用方法,

更快的解决自己实际遇到的问题。 由于个人水平有限,因此在文章撰写的过程中难免存在问题和错误,如果有任何问题,希望大家能够提出来,我会虚心接受并且改进,希望通过我们的交流,给越来越多的人提供更加优秀的资料,共同进步。 一、什么是逻辑分析仪: 逻辑分析仪是一种类似于示波器的波形测试设备,它通过采集指定的信号,并通过图形或者数据统计化的方式展示给开发人员,开发人员通过这些图形化时序信号按照协议来分析硬件或者软件中的错误。逻辑分析仪是设计中不可缺少的设备,通过它,可以迅速定位错误,发现并解决问题,达到事半功倍的效果,尤其在分析时序,比如1wire、I2C、UART、SPI、CAN等数据的时候,应用逻辑分析仪解决问题非常快速。 如果在你的工作中有数字逻辑信号,你就有机会使用逻辑分析仪。因此应选好一种逻辑分析仪,既符合所用的功能,又不太超越所需的功能。用户多半会找一种容易操作的仪器,它在功能控制上操作步骤较少,菜单种类也不多,而且不太复杂。而Saleae就是一种低端的,比较适合大众化的逻辑分析仪,价格便宜,而且常用的逻辑分析功能足够,人机界面人性化,非常适合实用。 以下是一个Saleae分析I2C时序的一个典型例子:从图中我们可以清晰的看到,起始信号start,从地址是0x50的器件中去读取数据,第一个字节是0xc0,第二个字节是0x50,有了逻辑分析仪,我们可以快捷的找出我们的I2C时序读写数据的正确与否,可以很快将问题解决。后边的讲解中,我会详细讲解逻辑分析仪分析红外遥控器,UART时序,I2C 时序的具体方式方法。 (原文件名: 二、使用介绍 1、 saleae的带宽是24M,也就是所谓的最高采样频率是24M,根据乃奎斯特采样定律,12M以下都可以还原信号。但就实际系统来讲,采样频率至少要保持在信号频率的5倍以上,一般在10倍以上会比较准确。也就是说,信号频率在2M以下,采样会很准。 Ps:论坛有人说可以采12M,6M,3M等等。24M采12M的标准方波,风险极大,稍有误差就会出错,如果12M的上升沿和下降沿较缓也容易出错。因此,根据理论,在10倍于信号频率的情况下基本没问题,一般应该采2M以下的波形,对于常见的通信,2M的信号速率已经很高了。 2、采样深度:理论上,这个Saleae逻辑分析仪的采样深度是1000M,也就是说,可以保存的最大数据量是1G,实际使用的设置太大等待时间长,所以通常使用10M 到50M就差不多了,只要能够抓够我们需要的是数据量就可以了。 3、经测试,在XP系统、win7系统、VISTA系统下都可以正常使用。 三、安装说明 安装之前,务必要确认,你的电脑是高速的,低速的USB是不可能正常工作的!!!!!

嵌入式微处理器结构与应用课程设计报告

《嵌入式微处理器结构与应用》 课程设计报告 题目:电子菜单 一、课程设计的目的和主要内容: 目的:《嵌入式微处理器结构与应用》课程设计是软件工程本科专业的专业实践课程,结合在课程中学到的嵌入式系统的开发和调试方法,对学生在嵌入式系统设计和应用开发的基本技能方面进行综合的检验和实践。是学生在学习完《嵌入式微处理器结构与应用》课程之后的一个重要的实践环节。要求学生在教师的指导下,综合运用已学过的嵌入式微处理器相关的各种知识和技能,以小组协作的方式完成一项较为完整、并具有一定难度的课程设计任务。使学生总结本课程的主要知识点,提高学生的实际动手能力,为学生今后进一步学习和从事嵌入式系统相关的研究与开发打下坚实的基础。 内容:基于实时操作系统,学会复杂应用程序的基本开发方法,结合课程实验学到的知识,编写一个能综合应用液晶屏、触摸屏、键盘并结合简单文件系统API函数的界面应用。要求具备基本的三个界面:初始界面、点菜界面、结束界面,基本实现点菜的全过程。 二、基本的设计思路或程序流程图描述: 基于MVC勺设计模式,将程序分成三大独立的部分:模型(逻辑)部分、视图部分、控制部分。这三大部分的关系如下:

程序总流程图:

百度文库-让每个人平等地提升自我 初始化程序, 打开启动画面线程 关闭线程 点菜结束按钮 判断消息 类型 判断操 作类型 判断单 击内容 判断控 件类型 判断该菜单条目 的 状态,进行相应的逻 辑和视图更新 本人负责: 打开线程 界面控件 翻页按钮 加载菜单数据 显示启动动 画 键盘消息 显示点菜结束 画面和总价 程序 菜单条目 进行菜单的上下 滚动 关闭按钮 单击 拉动 重置逻辑数 据,显示最初 的点菜界面 关闭启动画面线程, 显示点菜画面 显示程序结束画 面 进行菜单的翻页 等待系统消息 触摸屏消息 、视图部分:

微型计算机系统技术课程设计书

一、设计目的 为了进一步巩固学习的理论知识,增强学生对所学知识的实际应用能力和运用所学的知识解决实际问题的能力,开始为期两周的课程设计。通过设计使学生在巩固所学知识的基础之上具有初步的单片机系统设计与应用能力。 1、通过本设计,使学生综合运用《微型计算机技术》、《C 语言程序设计》以及《数字电路》、《模拟电路》等课程的内容,为以后从事电子产品设计、软件编程、系统控制等工作奠定一定的基础。 2、学会使用KEIL C 和PROTEUS 等软件,用C 语言或汇编语言编写一个较完整的实用程序,并仿真运行,保证设计的正确性。 3、了解单片机接口应用开发的全过程:分析需求、设计原理图、选用元器件、布线、编程、调试、撰写报告等。 二、设计内容 该实践训练环节要求学生能够运用所学知识,在老师的引导下完成课程设计题目,达到相应的训练要求。 通过实验进一步学习D/A 转换器的基本原理以及在单片机系统中扩展D/A 转换器的方法。用D/A 完成锯齿波输出,用PROTEUS 内带的示波器查看波形。 三、问题分析、方案的提出、设计思路及原因 首先根据锯齿波的图形构建基本框架,输出的电压值以一定的增量逐步增加,达到最大值后再回到初始值然后再次循环。 本设计要求利用数字量/模拟量(D/A )转换来完成锯齿波的输出。数/模转换器(DAC )是一种把数字信号转换成模拟信号的器件。计算机输出的数字信号首先传送到数据锁存器中,然后由模拟电子开关把数字信号的高低电平变成对应的电子开关状态。 1、系统方案的比较 方案一:采用函数信号发生器ICL8038集成模拟芯片,(如图2-1)它是一种可以同时产生方波、三角波、正弦波的专用集成电路。但是这种模块产生的波形都不是纯净的波形,会寄生一些高次谐波分量,采用其他的措施虽可滤除一些,但不能完全滤除掉。 方案二:采用分立元件实现非稳态的多谐振振荡器,然后根据需要加入积分电路等构成正弦、矩形、三角等波形发生器。这种信号发生器输出频率范围窄,而 图2-1方案一方框图 D/A 键 盘 单片机 ICL8038 运算电 路 显 示 D/A 输出

简易逻辑分析仪设计报告3

D7简易逻辑分析仪 摘要 本系统由8位可预置的循环移位数字信号发生器、简易逻辑分析仪两部分组成。 循环移位数字信号发生器由51单片机控制,可以产生8位逻辑信号序列和时钟信号波形,并且逻辑信号序列可以预置。其中一路输出电平可在0~5V内调节。采用16×2液晶显示各设置参数,显示直观,设置方便。 在简易逻辑分析仪的设计中,由于要在示波器上显示8路波形,此操作占用大量运算时间,故而采用双单片机协同工作的方式:其中一片单片机作输入控制、数据存储、数据显示及各控制参数设置;另一片单片机控制D/A转换器输出波形到示波器。两单片机之间采用串行方式进行通信。我们采用XY扫描方式的显示方法。X轴的锯齿波信号由D/A转换器产生,由于要同时显示8路信号,所以Y轴的信号由被测信号、时标信号和参考电平相加得到,在软件配合下,可以比较方便实现8路信号的稳定显示,同时也可显示时间标志线和触发点位置。 在本设计中,采用插线连接信号发生器和简易逻辑分析仪,连接方式灵活、方便。数据采集有单级、多级(3级)触发方式。信号采集电路中采用门限电压调节电路,可以采集0.1~4.5V门限的各种逻辑电平,存储深度达到24Bit,示波器可以实现对8路24Bit信号同时显示。时间标志线,触发点等功能完善。达到了基本的设计要求,并对其它的功能进行了较好的完善和扩充。

第一部分:方案论证与比较 由于本题目实际由两个相对独立的部分组成,所以我们对两个部分分别进行分析讨论: 一、数字信号发生器 根据题目要求,我们考虑可以采用以下几种方案可以采用: 1、方案一:采用555定时器和可预置移位寄存器。用74LS194A接成8位可预置循环移位寄存器,方波发生器提供一时钟信号给移位寄存器,预置数用8个波段开关接入(即循环序列)。此方案简单可靠,但信号频率不易更改,硬件复杂,不易扩展。 2、方案二:采用EPROM固化波形输出,EPROM存储容量大,将各种波形的产生程序固化到EPROM中,一振荡器接一8位的计数器送EPROM 8位数据输出,8位计数器需要3位地址线再加上8位选择开关切换不同波形显示,这样就有11位地址线可寻址2K空间。尽管此种方法可产生较好的波形,但使用时不够灵活,只有固定的几种波形。 3、方案三:用PC 通过软件编程可以从并行口输出信号波形,不需要硬件电路,且设计灵活,但是不适合电子设计竞赛,并且PC体积大,携带不方便。 4、方案四:采用中规模FPGA,使用VHDL语言设计移位寄存器。此方案可以实现精确定时产生信号,且信号频率可调,体积小, 但其显示电路占用资源多,这样设计出来的电路系统将大且复杂。 5、方案五:采用一片89C51单片产生波形序列。用单片机产生数字信号,设计简单,设置灵活,频率调节方便,并且易扩展其他功能,有它独到之处! 综合分析上述各方案,比较其优缺点,包括灵活性、可靠性、可扩展性和易操作性,所以选用方案五。 二、简易逻辑分析仪 我们先对题目要求进行简单分析: 要实现本题目的基本要求,主要实现数据采集存储和控制示波器显示的功能。其中数据采集功能要求可采集8路信号,采集深度20位(我们的方案选择24位),数据量为24×8=24bytes,对于一般的单片机系统很容易实现。 对于显示功能,要求用示波器显示清晰稳定的8路数字波形,再包括额外的时间标线和触发点的显示,则共需要9个通道。对于示波器来说,为了显示的波形清晰稳定,一般要求扫描的刷新频率f>25Hz。每显示一路信号,需要沿X轴扫描24个位,设定每个位需要显示10个点,则显示一个通道需要24×10个点。 同时显示9通道的数字波形,则共显示24×9=216个位,216×10个点。由此可知,扫描一个点所需的时间为:1秒/(25祯*24位*9通道*10点)=18.5微秒/点。对于采用12MHz晶振的单片机来说,仅能执行大约15条指令。如果数据采集存储和控制显示功能由同一单片机来实现,处理起来十分困难。即使是24兆的单片,也只能执行30条左右而已。因而若用单MCU来实现,则须用更高性能的单片

相关主题
文本预览
相关文档 最新文档