1 / 40

简化 CPU 设计

简化 CPU 设计. 刘悦 13648018193. 308679868@qq.com. 目 录. 1. 课程设计要求. 2. 设计思路. 提交的设计和文档要求. 3. 4. 一、 课程设计要求. 设计16位精简指令集CPU指令系统; 完成精简指令集CPU的结构设计和所有模块的代码编写,并仿真验证; 编写能够完成加法器﹑流水灯等功能的汇编程序,并翻译成二进制机器码; 设计CPU外围模块如分频器,存储器和IO接口,并在软件平台上仿真CPU执行程序的完整过程; 下载工程到FPGA芯片,在硬件资源上实现。. 二 、设计思路. 1、CPU指令集系统设计

redell
Download Presentation

简化 CPU 设计

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 简化CPU设计 刘悦 13648018193 308679868@qq.com

  2. 目 录 1 课程设计要求 2 设计思路 提交的设计和文档要求 3 4

  3. 一、课程设计要求 • 设计16位精简指令集CPU指令系统; • 完成精简指令集CPU的结构设计和所有模块的代码编写,并仿真验证; • 编写能够完成加法器﹑流水灯等功能的汇编程序,并翻译成二进制机器码; • 设计CPU外围模块如分频器,存储器和IO接口,并在软件平台上仿真CPU执行程序的完整过程; • 下载工程到FPGA芯片,在硬件资源上实现。

  4. 二、设计思路 1、CPU指令集系统设计 本课程设计所设计的RISC_CPU指令长度为16位,能够处理16位数据。 指令中需要操作符,寄存器地址和立即数等字段。

  5. 二、设计思路 完成立即数数据载入操作需要如下指令: mil:将立即数放在低8位 mih:将立即数放在高8位 因为一条指令无法载入完整16比特立即数数据,将16bits数据传递到通用寄存器需要2条指令。

  6. 二、设计思路 完成存储器或I/O数据载入与储存需要如下指令: lda:载入指定地址数据 sta:储存数据到指定地址 inp:从端口输入 oup:输出到端口 对存储器某些地址上的数据的处理是必不可少的。

  7. 二、设计思路 完成数据运算操作需要如下指令: • and:寄存器数据与操作orr:寄存器数据或操作 • not:寄存器数据非操作shl:左移 • shr:右移add:寄存器数据相加 • sub:寄存器数据相减mul:寄存器数据相乘 • cmp:寄存器数据相比较

  8. 二、设计思路 完成对标志位的处理操作需要如下指令: • szf:对零标志位置1 • czf:清除零标志位 • scf:对进位标志位置1 • ccf:清除进位标志位 • 设计这些指令为分支操作的执行创造了条件。

  9. 二、设计思路 完成指令跳转、分支操作需要如下指令: • spc:保存pc的值 • jpa:跳转到指定位置 • jpr:跳转到相关位置 • brz:以零标志位为条件的分支 • brc:以进位标志位为条件的分支

  10. 二、设计思路 完成对窗口指针的操作需要如下指令: • cwp:清除窗口指针 • awp:窗口指针与立即数相加 完成无操作、中断需要如下指令: • nop:无操作 • hlt:中断

  11. 二、设计思路 建议本课程设计所设计的CPU的指令格式为: • 15-12bit规定指令的类型; • 11-8bit选择寄存器,共设有8个寄存器,前2位为目的寄存器,后2位为源寄存器; • 7-0bit为立即数。 示例指令如下表2-1所示,其中D、S分别为目的、源寄存器,I为立即数。

  12. 二、设计思路

  13. 二、设计思路

  14. 二、设计思路 2、精简指令集CPU结构设计 CPU整体设计 RISC_CPU是一个复杂的数字逻辑电路。 图2-1 精简指令集CPU的接口

  15. 二、设计思路 课程设计所设计的精简指令集CPU包括数据通路和控制器,如图2-2所示。其中: • 数据通路部分主要由以下基本部件组成:寻址单元、算术逻辑单元、通用寄存器阵列、窗口指针、指令寄存器、状态寄存器。 • 控制器是7状态的状态机,不同状态下向数据通路发送不同的控制信号。

  16. 图2-2 精简指令集CPU层次结构 二、设计思路

  17. 二、设计思路 数据结构 • 寻址单元:包括程序计数器和地址逻辑两部分。 • 地址逻辑是个小型的算术单元,通过加法和递增来计算程序计数器的值或储存器的地址。 • 寻址单元的控制信号决定寻址单元的输出内容。寻址单元根据输入控制信号生成程序计数器的输入信号。

  18. 二、设计思路 图2-3 寻址单元结构

  19. 二、设计思路 • 如执行指令jpa “跳转到指定位置”,二进制码设为1111-D-11-I,表达式为PC<=Rd+I。 • 指令码1111-D-11在控制器处于exec1状态时输入控制器,产生一系列控制信号, • 产生的结果是地址逻辑将RSide的值与ISide的值相加,结果作为输出地址发送给存储器。

  20. 二、设计思路 • 算数逻辑单元:ALU的输入信号有B15to0,AandB,AorB,notB,shlB,shrB,AaddB,AsubB,AmulB和AcmpB,这些信号选择ALU进行的操作。

  21. 二、设计思路    图2-4 算术逻辑单元结构

  22. 二、设计思路 • 如执行指令mih“将立即数放到高8位”二进制码为1111-D-01-I,表达式为Rdl<={I,8’BZ}。 • 指令码1111-D-01在控制器处于exec1状态时输入控制器,产生一系列控制信号。 • 产生的结果是立即数I被治理寄存器从低8位放到高8位,并经过算术逻辑单元回到数据总线,写入寄存器阵列D寄存器的高8位。

  23. 二、设计思路 •    //Arithmetic Logic Unit (ALU) •    `timescale 1 ns /1 ns •    `define B15to0H 10'b1000000000 •    `define AandBH 10'b0100000000 •    `define AorBH 10'b0010000000 •    `define notBH 10'b0001000000 •    `define shlBH 10'b0000100000 •    `define shrBH 10'b0000010000 •    `define AaddBH 10'b0000001000 •    `define AsubBH 10'b0000000100 •    `define AmulBH 10'b0000000010 •    `define AcmpBH 10'b0000000001

  24. 二、设计思路 • module ArithmeticUnit ( •     A, B, •     B15to0, AandB, AorB, notB, shlB, shrB, AaddB, AsubB, AmulB, AcmpB, •     aluout, cin, zout, cout •    ); •    input [15:0] A, B; •    input B15to0, AandB, AorB, notB, shlB, shrB, AaddB, AsubB, AmulB, AcmpB; •    input cin; •    output [15:0] aluout; •    output zout, cout; •    reg [15:0] aluout; •    reg zout, cout;

  25. 二、设计思路 • always @( •     A or B or B15to0 or AandB or AorB or notB or shlB or shrB or AaddB or AsubB or AmulB or AcmpB or cin •     ) •     begin •     zout = 0; cout = 0; aluout = 0; •     case ({B15to0, AandB, AorB, notB, shlB, shrB, AaddB, AsubB, AmulB, AcmpB}) •     `B15to0H:aluout = B; •     `AandBH: aluout = A & B; •     `AorBH: aluout = A | B; •     `notBH: aluout = ~B; •     `shlBH: aluout = {B[14:0], B[15]}; •     `shrBH: aluout = {B[0], B[15:1]}; •     `AaddBH: {cout, aluout} = A + B + cin; •     `AsubBH: {cout, aluout} = A - B - cin; •     `AmulBH: aluout = A[7:0] * B[7:0];

  26. 二、设计思路 • `AcmpBH: begin •     aluout = A; •     if (A> B) cout = 1; else cout = 0; •     if (A==B) zout = 1; else zout = 0; •     end •     default: aluout = 0; •     endcase •     if (aluout == 0) zout = 1'b1; •     end • endmodule

  27. 二、设计思路 指令寄存器只有一个输入控制信号:IRload 图2-5指令寄存器结构

  28. 二、设计思路 • 如执行指令awp“窗口指针与立即数相加”,二进制码0000-10-10-I表达式为WP<=WP+I。 • 指令码0000-10-10在控制器处于exec1状态时输入控制器,产生一系列控制信号。 • 产生的结果是指令寄存器将立即数I送到窗口指针寄存器,与原窗口偏移值相加,其结果作为新的窗口偏移值。

  29. 二、设计思路 寄存器阵列是带移动窗口指针的双端口储存器。    图2-6通用寄存器阵列结构图

  30. 二、设计思路 • 状态寄存器 图2-7状态寄存器结构

  31. 二、设计思路 • 窗口指针:用于存放通用寄存器的窗口偏移值,达到扩大通用寄存器数量的目的。 • 本CPU共设有8个通用寄存器。 图2-8窗口指针寄存器结构

  32. 二、设计思路 控制器 • 控制器是7状态的状态机,不同状态下向数据通路发送不同的控制信号。下面分别介绍控制器的各个部分。 • 控制器端口:控制器控制37个信号给数据通路。控制器的输出是reg类型,通过组合的always语句对它们赋值。

  33. 二、设计思路 • 控制状态:参数声明里定义了7个状态。 • Reset状态和halt状态分别对应状态机的初始和中断状态。 • 在fetch状态下,状态机读取16比特的指令。 • 在memread状态。 • 在execl状态下执行指令。 • 额外状态execllda来完成对存储器的读操作。 • 在incpc状态下让程序计数器加1。

  34. 二、设计思路 • 指令的执行:exec1状态下mvr指令的执行。 • 该指令从寄存器阵列的右路地址读取一个字,写入左路地址。 • 控制信号RFright_on_OpndBus,B15to0,RFLwrite和RFHwrite为1。

  35. 二、设计思路    图2-6 系统最高层结构图 3、外围模块设计 • 要想让CPU工作,还需要一些外围模块配合,如分频器模块、存储器模块和I/O模块。

  36. 二、设计思路 • 分频器:为CPU正常工作提供稳定的时钟信号及主频。 • 存储器:作为CPU的外部存储器,存储CPU执行的程序指令。 • I/O模块:作为本课程设计唯一的输出模块,从数据总线上得到CPU处理好的数据,驱动LED灯闪烁。

  37. 二、设计思路    图2-7存储器结构图

  38. 二、设计思路 4、仿真与测试 • 完成CPU各模块的设计,外围模块的设计和软件程序的编写编译及初始化到存储器中的工作。 • 对系统最高层进行仿真通过。 • 下载到FPGA实验板上,进行实际测试,运行观察分析实验现象。

  39. 三、提交的设计和文档要求 • 1.介绍所设计的16位精简指令集CPU指令系统; • 2.上交精简指令集CPU所有模块的代码及仿真结果图,并分析仿真结果; • 3.分析所编写的汇编程序,并翻译成二进制机器码; • 4.自己编写的CPU外围模块如分频器,存储器和IO接口,上交各模块代码,利用库例化完成的介绍步骤,并分析CPU执行程序的仿真结果图;

  40. 资料 • 教材:《Verilog》数字系统设计,《微机原理》。 • 图书馆:查找关键字“CPU”。 • 百度:查找关键字“CPU”。

More Related