基于有限状态机的多周期CPU实验设计

2017-07-25 13:00冯建文
实验技术与管理 2017年7期
关键词:状态机存储器寄存器

冯建文

(杭州电子科技大学 计算机学院, 浙江 杭州 310018)

基于有限状态机的多周期CPU实验设计

冯建文

(杭州电子科技大学 计算机学院, 浙江 杭州 310018)

设计了一个基于FPGA的多周期CPU实验,并将有限状态机应用于模型计算机的设计与实现。模型计算机基于MIPS处理器,含8条典型指令。给出了多周期CPU的数据通路与指令流程图,并按照有限状态机的设计方法,完成了状态转移图的设计和HDL的程序描述。实验不仅使学生掌握有限状态机这一重要的数字系统设计工具,同时也有助于学生加深理解“计算机就是一个有限状态机”的概念。在课程实践应用中教学效果良好。

多周期CPU; 有限状态机; 实验设计; FPGA

CPU是计算机硬件系统的核心部件,CPU的设计与实现是“计算机组成原理”课程实践环节的重要内容[1-3]。随着EDA技术的迅猛发展,使用FPGA实验平台完成硬件实验已成为计算机硬件课程实践教学的主流趋势[4-5]。

但是受课时等因素的影响,地方高校“计算机组成原理”实验课程通常采用单周期方式设计CPU[6],然而却不能适用于后续的流水线CPU设计。本文设计了一个基于FPGA的多周期CPU实验,将有限状态机应用于CPU的设计与实现,既为后续的流水线CPU设计打下基础,也培养了学生对复杂工程问题的分析与解决能力[7-8]。

1 CPU模型与结构

CPU的模型与指令系统均基于MIPS处理器。

在MIPS处理器的核心指令集中,选取了8条典型指令,指令格式、编码与功能如表1所示。

表1 指令系统编码与功能表

在前期的单周期CPU设计实验的基础上,引导学生分析多周期CPU的特点并设计系统结构与数据通路[9-10](见图1)。

图1 CPU的系统结构与数据通路框图

在CPU的多周期实现方案中,指令的执行被分成若干步骤,每一步骤占用一个机器周期。一方面,硬件在不同机器周期可以重复使用;另一方面,在上一周期中指令执行的结果,需要用于下一周期的操作。因此,必须添加功能部件之间的缓冲寄存器,用以暂存时钟周期之间交换的数据。例如图1中的暂存器A、B用于保存从寄存器堆读出的数据,F用于保存ALU运算的结果,MDR用于保存从存储器读出的数据,IR用于保存从存储器读出的指令。

图中的寄存器堆为三端口寄存器,含两个读端口A、B和一个写端口,能同时执行A、B两个端口的读操作和写端口的写操作。

2 指令执行的过程分析

2.1 指令流程图

对指令系统中的每一条指令进行逐条分析,研究其在图1上的数据通路,按照机器周期可以画出指令流程图,如图2所示。

图2 指令流程图

由图2可见,8条指令中,指令周期最长的指令是lw指令,需要5个机器周期M0—M4。

2.2 控制信号流

根据指令执行过程分析及数据通路分析,引导学生进一步细化控制需求。一是需要在部件入口处添加一系列的数据选择器,二是定义控制信号含义[6]。图3为细化后的模型计算机的完整数据通路与控制线路。图3中的粗体字为部件控制信号与多路选择器的选择信号,其中,选择器中的数字指明了选择信号的定义。部件控制信号具体定义如表2所示。

图3 多周期CPU的模型计算机完整数据通路与控制线路

部件控制信号作用有效边沿PCPC_write写入PC作用周期下跳沿存储器Mem_write写入存储器作用周期上跳沿IRIR_write写入IR作用周期下跳沿寄存器堆Reg_write写入寄存器作用周期下跳沿

从表2可以看出,寄存器的写入操作总是在后边沿有效,以保证功能部件操作完成后,再保存结果。存储器的读写操作均在时钟上跳沿执行。

寄存器堆和存储器没有读信号,寄存器读操作不受时钟控制且始终读出;存储器则在每个时钟的上跳沿执行读出操作。暂存器MDR、A、B、F没有控制信号,直接使用CPU时钟作为其时钟脉冲——意即每个时钟周期后沿,它们均要执行写入操作,且没有输出控制,内容始终可用。

3 有限状态机的实现

3.1 有限状态机概述

FPGA最大的优势是它的电路是并行实现的,从而具有高速性。但是有限状态机则可以通过状态迁移来完成一些特定的顺序控制逻辑,而非并行逻辑,例如指令的执行。

有限状态机包含了1个状态存储器和2个函数——下一状态函数和输出函数[10-11],如图4所示。

图4 有限状态机的结构图

rst是复位信号,用于确定有限状态机的初始状态;clk是时钟信号,用于同步状态转换的边沿。状态存储器是储存状态机状态的一组触发器,触发器的次态由下一状态函数决定,下一状态函数则是输入变量和当前状态的函数,通过激励状态触发器,实现状态的转移。状态机的输出,则由输出函数决定,它是当前状态和输入变量的组合逻辑函数。

使用FPGA设计有限状态机的步骤如下:

(1) 确定输入、输出与状态机状态,画出状态转移图;

(2) 状态简化,得到最简的状态转移图;

(3) 对状态进行编码:有binary、gray、one-hot等编码方式,在FPGA的开发平台中,可以进行选择和自定义;

(4) 使用HDL描述,并综合、仿真与实现。

3.2 多周期CPU的有限状态机设计

在有限状态机相关知识的基础上,引导学生设计多周期CPU的有限状态机。

3.2.1 状态图

图2(指令流程图)是原始状态转移图,经过分析、化简,可得到图5所示的最简状态转移图,除空闲状态Idle之外,图中有10个有效状态。显然,图5所示的状态机是CPU的控制器,除了定序之外,还要发送各个控制信号和多路选择信号。状态机的输入变量就是指令码,输出变量即为所有的控制信号和多路选择信号。分析可知,该有限状态机为Mealy型状态机,因为其输出的控制信号取决于当前状态与输入的指令码。

图5 最简状态转移图

3.2.2 状态输出的信号

结合图3的数据通路,分析每一个状态下输出的有效信号如表3所示。

表3 各状态下有效的控制信号

注:#表示当zero=1时;**表示根据指令的func字段译码

3.2.3 状态机的HDL描述

在有限状态机的HDL实现上,使学生了解一段式、二段式和三段式描述各自的优缺点,引导学生尝试使用更可靠的三段式方法描述多周期CPU的控制器有限状态机,即:状态转移、次态函数和输出函数各用一个或者多个独立的always或者assign语句实现。三段式有限状态机的框架如下:

//状态转移 always @(posedge rst or posedge clk)begin if (rst)ST <= Idle; else ST <= Next_ST; end //次态函数 always @(*)begin Next_ST = Idle; case (ST) Idle: Next_ST = S0; S0: if (OP==`OP_J_J) Next_ST = S2; else Next_ST = S1; ……//次态的阻塞式赋值 default:Next_ST = S0; endcase end //输出函数 always @(posedge rst or posedge clk) begin if (rst)begin PC_write <= 1′b0; IR_write <= 1′b0; ……//全部信号初始化为0 end else begin case(Next_ST) S0:begin//信号的非阻塞式赋值 PC_write<=1′b1;IR_write<=1′b1;…… end ……//每个状态下输出的控制信号 endcase end; end assign Mem_write = (Next_ST==S8); assign I_D_s = (Next_ST==S7)||(Next_ST==S8);

上述输出函数的代码中,大部分使用次态Next_ST作为输入,对控制信号进行非阻塞式赋值。但是,因为存储器的读写操作在clk上跳沿触发,所以地址选择信号I_D_s和存储器写信号Mem_write需要使用数据流驱动,以保证存储器地址和读写信号先于clk上跳沿置为有效。

3.2.4 测试程序与调试

控制器的有限状态机只是模型计算机的一部分,其他计算机部件如存储器、运算器、专用寄存器等,需要指导学生在单周期CPU的基础上进行改造。

将各部件通过控制器的有限状态机连接而成整机,然后针对实现的MIPS指令集自行编写测试程序。综合与实现后,对模型计算机进行功能仿真,如图6所示。

图6 多周期CPU的功能仿真

板级验证可借助按键、数码管等输入、输出设备进行单步执行,显示状态机每一个状态下的执行结果,如图7所示为当前指令码的高16位。

图7 多周期CPU的板级验证

4 结语

多周期CPU具有时钟周期短、各功能部件可共享的优点,它既符合现代CPU的真实设计,又是流水线CPU设计的基础。采用有限状态机实现其控制单元部分,不仅能够帮助学生掌握有限状态机这一重要的数字系统设计工具,也有助于学生进一步深刻理解“计算机就是一个有限状态机”的概念。

多周期CPU实验基于FPGA实验平台而开设,使实验具有较高的开放性和扩展性[12],在指令集的选取、有限状态机的状态分析、控制信号设计、输出函数的硬布线设计、测试程序与板级调试等环节,均可以为学生提供自主设计与发挥的空间,培养学生的综合分析、研究与设计能力。在课程实践中,绝大多数学生达到了设计目标,收到了良好的实验教学效果。

References)

[1] 姜欣宁,陈宇.“计算机组成原理专题实验”的教学改革[J].实验技术与管理,2013,30(4):162-165.

[2] 高小鹏.计算机专业系统能力培养的技术途径[J].中国大学教学,2014(8):53-57.

[3] 周刚,师维,陈润,等.计算机组成原理实验创新性改革探索与实现[J].实验技术与管理,2016,33(11):26-29.

[4] 刘敬猛,徐东,陈柏成,等.少学时FPGA实验课体系结构[J].实验技术与管理,2012,29(4):280-282.

[5] 肖堃,邢建川.计算机专业硬件实验体系与综合实验平台[J].实验科学与技术,2012,10(6):227-229.

[6] 冯建文,章复嘉,包健.计算机组成原理与系统结构实验指导书[M].2版.北京:高等教育出版社,2015.

[7] 刘卫东,张悠慧,向勇,等.面向系统能力培养的计算机专业课程体系建设实践[J].中国大学教学,2014(8):48-52.

[8] 全成斌,郑宁汉,杨士强.计算机一体化实验教学改革与探索[J].中国大学教学,2014(6):78-80.

[9] Patterson D A, Hennessy J L.计算机组成与设计:硬件/软件接口[M].英文版.北京:机械工业出版社,2013.

[10] Harris D M,Harris S L.数字设计和计算机体系结构[M].英文版.北京:机械工业出版社,2016.

[11] 夏宇闻.Verilog数字系统设计教程 [M].3版.北京:北京航空航天大学出版社,2013.

[12] 刘玉洁,沈世全.多级流水线处理机的少课时实践内容设计[J].实验技术与管理,2016,33(7):96-99.

Design of multi-period CPU experiment based on finite state machine

Feng Jianwen

(School of Computer Science and Technology, Hangzhou University of Electronic Science and Technology,Hangzhou 310018,China)

A multi-period CPU experiment based on FPGA is designed,and the finite state machine is designed and applied to the model computer. The model computer is based on MIPS processor with 8 typical instructions. The data path and instruction flow chart of multi-period CPU are presented,and according to the design method of the finite state machine,the state transition diagram and the program description of HDL are completed. The experiment helps the students not only to grasp the important digital system design tool of the finite state machine,but also to understand the concept that “Computer is a finite state machine.” In practice,the teaching effect is fine.

multi-period CPU; finite state machine; experimental design; FPGA

10.16791/j.cnki.sjg.2017.07.033

2017-01-19

教育部国家精品资源共享课程“计算机组成原理”;浙江省教育技术研究规划课题(JA007)

冯建文(1971—),女,浙江杭州,硕士,副教授,主要研究方向为嵌入式系统与智能控制.

E-mail:fengjianwen@hdu.edu.cn

G642;TP3-4

A

1002-4956(2017)07-0127-05

猜你喜欢
状态机存储器寄存器
STM32和51单片机寄存器映射原理异同分析
静态随机存储器在轨自检算法
Lite寄存器模型的设计与实现
基于有限状态机的交会对接飞行任务规划方法
存储器——安格尔(墨西哥)▲
基于Nand Flash的高速存储器结构设计
高速数模转换器AD9779/AD9788的应用
FPGA设计中状态机安全性研究
基于反熔丝FPGA的有限状态机加固设计
一种可重构线性反馈移位寄存器设计