如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
第4章CPU功能模块设计4.2CPU中的基本部件4.2.7程序计数器与地址寄存器1.程序计数器为了保证程序按其指令序列执行下去,必须对下一条指令进行跟踪,以便取得下一条指令。程序计数器(PC)的功能就是用来确定下一条指令在主存中的地址。当CPU取得当前要执行的指令后,通过修改程序计数器中的值来确定下一条指令在主存中的存放地址。4.2CPU中的基本部件4.2.7程序计数器与地址寄存器1.程序计数器程序计数器值的修改分两种情况,一种是顺序执行指令的情况,另一种是分支转移指令的执行情况。当CPU顺序执行指令时,程序计数器值的修改较为简单。即若当前取得的指令是单字节指令,便将程序计数器的值加1(PC+1→PC);而若当前取得的指令是双字节指令,则将程序计数器的值加2。一般而言,如果当前取得的指令是n字节,则将程序计数器的值加n。在执行分支转移指令时,由分支转移指令的寻址方式确定下一条指令在主存中的地址。若分支转移指令的寻址方式是相对寻址,于是,程序计数器的值就修改为当前地址加上相对偏移量;若分支转移指令的寻址方式是绝对寻址,即将转移指令中绝对转移地址送给程序计数器;而当执行间接寻址方式的分支转移指令时,程序计数器的值从指令指定的寄存器或主存储单元中提取。4.2CPU中的基本部件4.2.7程序计数器与地址寄存器1.程序计数器lpm_counter1upcountersloadd[7..0]INPUTOUTPUTq[7..0]VCCdata[7..0]q[7..0]LOADINPUTVCCCLKINPUTrVCCclocklacinstRSTINPUTVCC图4-26程序计数器结构图图4-26程序计数器结构图lpm_counter1upcountersloadd[7..0]INPUTOUTPUTq[7..0]VCCdata[7..0]q[7..0]LOADINPUTVCCCLKINPUTrVCCclocklacinstRSTINPUTVCC程序计数器采用LPM库中的元件lpm_counter来完成,计数器的数据宽度为8位,其结构如图所示。图中各信号的作用分别是:CLK是时钟脉冲输入信号;aclr是计数器的异步清零端,当CPU复位时,可用RST复位信号对计数器清零;LOAD是计数器数据加载端,当发生程序转移时,可用它向计数器加载新的转移地址;data[7..0]是计数器的数据输入端;q[7..0]是计数器的数据输出端。图4-26程序计数器结构图lpm_counter1upcountersloadd[7..0]INPUTOUTPUTq[7..0]VCCdata[7..0]q[7..0]LOADINPUTVCCCLKINPUTrVCCclocklacinstRSTINPUTVCC在图中,程序计数器可以有三种工作状态:(1)当CPU复位时,复位信号RST可以使程序计数器清零。(2)正常情况下,从程序存储器读取一个字节后,程序计数器在CLK脉冲信号作用下自动加1。(3)当发生程序转移时,在LOAD信号的作用下,从d[7..0]向程序计数器装载新的计数器初值,进行程序转移。4.2CPU中的基本部件4.2.7程序计数器与地址寄存器2.地址寄存器地址寄存器(AR)用来保存当前CPU所要访问的主存单元或I/O端口的地址。当CPU要对存放在主存或外围设备的信息进行存取时,需要解决的是地址的定位问题。地址定位是通过CPU将地址信息传送到地址总线上,再由地址译码电路实现。在对主存或I/O端口内的信息存取过程中,地址信号必须是稳定的。因此地址信息要由一个寄存器来保存,这个寄存器就是地址寄存器。地址寄存器采用单纯的寄存器结构。在对主存或I/O端口进行访问时,地址寄存器存放当前访问的地址,数据缓冲器实现数据的缓冲。CPU通过修改地址寄存器中的值,就可访问不同的存储器单元及不同的I/O端口。4.2CPU中的基本部件4.2.7程序计数器与地址寄存器2.地址寄存器lpm_latch0data[7..0]q[7..0]gateinst15图4-27地址寄存器结构图图4-27地址寄存器结构图lpm_latch0data[7..0]q[7..0]gateinst15地址寄存器可用LPM库中的元件lpm_latch锁存器来完成。地址寄存器的数据宽度应当与程序计数器的数据宽度一致。data[7..0]是地址寄存器的数据输入端,q[7..0]是地址寄存器的数据输出端,gate是地址锁存器的控制