计算机组成原理课程设计基于EDA和FPGA技术的8位模型计算机的设计与实现.doc
目录前言2第一章 课程设计内容21.1 实验要求21.2 实验目的2第二章 实验原理及方案22.1 实验原理22.2 实验方案22.2.1 指令系统.52.2.2 模型计算机硬件62.2.3 微指令设计62.2.3.1 微代码定义62.2.3.2 微代码具体设计72.2.4 控制台解释微程序82.2.5 运行指令流程图2第三章 具体设计过程93.1 各个主要基本部件设计23.1.1 算术逻辑部件(ALU)23.1.2 程序计数器(PC)23.1.3 寄存器23.1.4 存储器23.2 模型机顶层框图设计2第四章 程序测试和指令调试24.1 波形仿真24.2 实验调试2第五章 设计总结与体会2参考文献2前言计算机诞生以来,计算机还是主要由运算器、控制器组成CPU,用二进制数字表示计算机的操作指令和数据,将其存放在存储器中,通过CPU自动地从存储器提取指令和数据,并按照指定的顺序完成各项任务。这也改变了又来人们的生活。同事随着大规模集成电路技术的开发,计算机组织设计与实现技术也在不断发展。现在,不仅软件可编程,硬件电路也可以编程所以,在这个时候,我们更要注重一台电子计算机的整体模型,而不是一味的强调怎样去追求这个时代的计算机发展速度。这已经成为我们为更新计算机硬件的必备知识。让学生通过动脑和动手解决计算机设计中的实际问题,本次课题设计便是为此应运而生的。在这次课程设计当中,我们需要结合计算机组成原理的基本理论,利用EDA技术和FPGA技术设计实现一个8位模型计算机。因此,我们需要掌握ALU,微程序控制器,时序产生电路,数据通路,存储器,指令系统单元电路的设计方法,并且在此基础上,进一步将单元电路组成系统,构造一台基本模型计算机。本报告便是通过对各关键部位进行单元和集成仿真测试后,下载到目标芯片里,最终形成一个功能较为完善的8位模型计算机系统。第一章 课程设计内容1.1 实验要求在Quartus 6.0上完成8位模型机的设计。具体的要求如下:(1)在定义五条机器指令,并编写响应的微程序作为模型计算机的控制器;(2)使用电路框图设计模型计算机电路,并下载编程芯片为定制的简单模型CPU. (3)在实验系统上连接输入按键和输出液晶显示屏为输出的模型计算机系统。1.2 实验目的(1)深入理解基本模型计算机的功能和组成知识;(2)深入学习计算机各类典型指令的执行流程;(3)学习微程序控制器的设计过程和相关技术,掌握LPM_ROM的配置方法;(4)掌握微程序的设计方法,学会编写二进制微指令代码表; (5)在掌握部件单元电路实验的基础上,进一步将单元电路组成系统,构造一台基本模型计算机;(6)通过这次的课程设计让学生通过动脑和动手解决计算机设计中的实际问题。综合运用所学计算机组成原理知识,在掌握部件单元电路实验的基础上,进一步将其组成系统构造一台基本的模型计算机,掌握整机概念,并设计机器指令系统,编写程序,在所设计的模型计算机上调试运行。第二章 实验原理及方案2.1 实验原理本实验将能在微过程控制下自动产生各部件单元控制信号,实现特定的功能。实验中,计算机数据通路的控制将由微过程控制器来完成,CPU从内存中取出一条机器指令到指令执行结束的一个指令周期,全部由微指令组成的序列来完成,即一条机器指令对应一个微程序。该模型机的总的数据通路如图2.1.1所示。图2.1.1 模型机的数据通路2.2 实验方案2.2.1 指令系统本实验采用五条机器指令。指令编码如下表:表一 指令编码助记符操作码addr地址码功能描述IN00H“INPUT”R0,键盘输入数据ADD addr10HXXHR0+addr R0STA addr20HXXHR0addrOUT addr30HXXHBUS“OUTPUT”,显示输出数据JMP addr40HXXHaddrPC指令分单字节和双字节,单字节指令只有IN一条,其余都是双字节指令。指令各式如表二和表三。表二 单字节指令格式7 6 5 43 21 0操作码源寄存器目的寄存器表三 双字节指令格式7 6 5 4 3 2 1 07 6 5 4 3 2 1 0操作码操作数(内存地址码)源和目的寄存器可以是三个工作寄存器之一,寄存器标号R0为00,R1为01,R2为10。为了在试验台上用键盘输入程序和数据到内存,以及通过液晶屏显示输出,设计了3个控制台操作命令,通过按键SWB 和SWA组合实现(括号中是SWB,SWA的键值): 存储器读KRD(00)操作,存储器KWE(01)操作,启动程序执行RP(11)操作。2.2.2 模型计算机硬件在本此设计的模型机硬件主要有以下部分组成:运算器:采用8位运算器ALU181,实现算术逻辑运算。该电路的两个操作数输入端设置两个寄存器DR0和DR1。程序计数器PC:用来指示执行指令的地址,以便从内存取得指令。地址寄存器AR:存放并输出访问内存单元的地址。指令寄存器IR:锁存取得的指令,供控制电路解码分析执行。此外,还提供了3个工作寄存器R0,R1和R2。存放可编程程序和数据的存储器RAM也在芯片上实现(像单片机一样)。各个功能模块通过总线连接。控制器采用微程序设计。整个模型机各功能部件的工作及通路连接的微操作代码如表3.11和表3.12所示。采用字宽24位的ROM存放微程序,3个3-8译码器组成24位输出译码电路。2.2.3 微指令设计 2.2.3.1 微代码定义由于在本次设计的模型机中只设计五条指令,以及它们所实现的任务,可以将每条微指令用24位的微代码来表示,如表四所示表四 24位微代码定义24232221201918171615 14 1312 11 109 8 7654321S3S2S1S0MCnWEA9A8A字段B字段C字段uA5uA4uA3uA2uA1uA0操作控制信号译码器下址字段 如表四所示的24位微代码信号的功能解释如下: S3-S0,ALU的操作选择信号,控制执行16种算术逻辑操作之一种; M,ALU操作方式选择,等于O为算术操作,等于1时执行逻辑操作; CN ,进位标志,等于0时,最低位有进位输入,等于1表示无进位; WE,控制RAM的读写信号,0值为读,1值为写; A9,A8,经译码产生键盘SW_B,存储器RAM,输出显示LED通路选择信号; A字段, 经译码产生各部件从总线输入选通信号,参考表五;表五 微指令译码字段说明A字段B字段C字段151413选择121110选择987选择000000000001LDRi001RS_B001P(1)010LDR1010RD_B010P(2)011LDR2011RJ_B011P(3)100LDIR100SFT_B100P(4)101LOAD101ALU_B101LDAR110LDAR110PC_B110LDPC B字段, 经译码产生各部件到总线输出选通信号,参考表五; C字段, 经译码产生测试转移P1P4,装入程序计数器LDPC,参考表五; A5A0,微程序地址信号 2.2.3.2 微代码具体设计综上所述,实现模型机指令的解释与执行的微程序代码。这些微代码写入ROM 中。注意,表六中的微地址是8进制表示。表六微代码微地址微指令S3 S2 S1 S0 M CN WE A9 A8 ABCA5A0000181100 0 0 0 0 0 0 1 10000001000100000101ED820 0 0 0 0 0 0 1 11101101100000100200C0480 0 0 0 0 0 0 0 11000000010010000300E0040 0 0 0 0 0 0 0 11100000000001000400B0050 0 0 0 0 0 0 0 10110000000001010501A2060 0 0 0 0 0 0 1 101000100000011006919A011 0 0 1 0 0 0 1 10011010000000010700E00D0 0 0 0 0 0 0 0 1110000000001101100010010 0 0 0 0 0 0 0 00010000000000011101ED830 0 0 0 0 0 0 1 11101101100000111201ED870 0 0 0 0 0 0 1 11101101100001111301ED8E0 0 0 0 0 0 0 1 11101101100011101401ED960 0 0 0 0 0 0 1 1110110110010110150382010 0 0 0 0 0 0 1 10000010000000011600E00F0 0 0 0 0 0 0 0 11100000000011111700A0150 0 0 0 0 0 0 0 10100000000101012001ED920 0 0 0 0 0 0 1 11101101100100102101ED940 0 0 0 0 0 0 1 11101101100101002201A0100 0 0 0 0 0 0 1 1010000000010000230180010 0 0 0 0 0 0 1 1000000000000001240620110 0 0 0 0 1 1 0 001000000001000125010A010 0 0 0 0 0 0 1 00001010000000012600D1810 0 0 0 0 0 0 0 11010001100000012.2.4 控制台解释微程序为了在实验台上用键盘输入程序和数据到内存,以及通过液晶屏显示输出,设计了3个控制台操作命令,通过安检SWA和SWB组合实现,同时根据微代码的设计可以将控制台设计为如下的解释微程序。控制台键盘译码微程序流程如图2.2.4.1所示。图2.2.4.1 控制台键盘译码微程序流程2.2.5 运行指令流程图根据每条机器指令执行的微操作顺序,微程序流程图如下图:第三章 具体设计过程 3.1 各个主要基本部件设计在设计模型机的主要的顺序是从底层开始设计,逐步向上设计,最后实现顶层的电路图的设计。3.1.1 算术逻辑部件(ALU)ALU是计算机的核心部件之一,它能执行加法和减法等算术运算,也能执行“与”、“或”等逻辑运算。ALU的基本功能根据74LS181的功能用VHDL编辑而成的。本次设计中的运算器功能部件可以对8为数据进行算术/逻辑运算,采用硬件描述语言 VHDL设计。该元件,共有两个数据输入端A70、B70,S30控制执行16种算术/逻辑运算中的一种,M端控制操作方式的选择(算术运算和逻辑运算),CN表示进位标志(进位和无进位)。具体设计如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ALU181 IS PORT ( S : IN STD_LOGIC_VECTOR(3 DOWNTO 0 ); A : IN STD_LOGIC_VECTOR(7 DOWNTO 0); B : IN STD_LOGIC_VECTOR(7 DOWNTO 0); F : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); COUT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); M : IN STD_LOGIC; CN : IN STD_LOGIC; CO : OUT STD_LOGIC; FZ : OUT STD_LOGIC );END ALU181;ARCHITECTURE behav OF ALU181 ISSIGNAL A9 : STD_LOGIC_VECTOR(8 DOWNTO 0);SIGNAL B9 : STD_LOGIC_VECTOR(8 DOWNTO 0);SIGNAL F9 : STD_LOGIC_VECTOR(8 DOWNTO 0);BEGIN A9 <= '0' & A ; B9 <= '0' & B ; PROCESS(M,CN,A9,B9,S) BEGIN CASE S IS WHEN "0000" => IF M='0' THEN F9<=A9 + CN ; ELSE F9<=NOT A9; END IF; WHEN "0001" => IF M='0' THEN F9<=(A9 OR B9) + CN ; ELSE F9<=NOT(A9 OR B9); END IF; WHEN "0010" => IF M='0' THEN F9<=(A9 OR (NOT B9)+ CN ; ELSE F9<=(NOT A9) AND B9; END IF; WHEN "0011" => IF M='0' THEN F9<= "000000000" - CN ; ELSE F9<="000000000" END IF; WHEN "0100" => IF M='0' THEN F9<=A9+(A9 AND NOT B9)+ CN ; ELSE F9<=NOT (A9 AND B9); END IF; WHEN "0101" => IF M='0' THEN F9<=(A9 OR B9)+(A9 AND NOT B9)+CN ; ELSE F9<=NOT B9; END IF; WHEN "0110" => IF M='0' THEN F9<=A9 -B9 - CN ; ELSE F9<=A9 XOR B9; END IF; WHEN "0111" => IF M='0' THEN F9<=(A9 AND (NOT B9) - CN ; ELSE F9<=A9 AND (NOT B9); END IF; WHEN "1000" => IF M='0' THEN F9<=A9 + (A9 AND B9)+CN ; ELSE F9<=(NOT A9) OR B9; END IF; WHEN "1001" => IF M='0' THEN F9<=A9 + B9 + CN ; ELSE F9<=NOT(A9 XOR B9); END IF; WHEN "1010" => IF M='0' THEN F9<=(A9 OR (NOT B9)+(A9 AND B9)+CN ; ELSE F9<=B9; END IF; WHEN "1011" => IF M='0' THEN F9<=(A9 AND B9)- CN ; ELSE F9<=A9 AND B9; END IF; WHEN "1100" => IF M='0' THEN F9<=A9 + A9 + CN ; ELSE F9<= "000000001" END IF; WHEN "1101" => IF M='0' THEN F9<=(A9 OR B9) + A9 + CN ; ELSE F9<=A9 OR (NOT B9); END IF; WHEN "1110" => IF M='0' THEN F9<=(A9 OR(NOT B9) +A9 + CN ; ELSE F9<=A9 OR B9; END IF; WHEN "1111" => IF M='0' THEN F9<=A9 -CN ; ELSE F9<=A9 ; END IF; WHEN OTHERS => F9<= "000000000" ; END CASE; IF (A9=B9) THEN FZ <= '0' ; ELSE FZ <= '1' END IF; END PROCESS; F<= F9(7 DOWNTO 0) ; CO <= F9(8) ;COUT <= "0000" WHEN F9(8) = '0' ELSE "0001" ;END behav;3.1.2 程序计数器(PC)程序计数器采用LPM库中的元件lpm_counter来完成的,计数器的数据宽度为8位。程序计数器(PC)是为能够进行主机系统设计实验,控制程序的自动运行而设计的部件。改程序计数器可以提供8为的程序地址,具有自增1和接收转移地址的功能。具体设计如下:图3.1.2.1 程序计数器元件图图3.1.2.2 程序计数器功能部件详细设计图3.1.3 寄存器在该模型机中用到的寄存器主要有数据缓冲寄存器、地址寄存器、工作寄存器和指令寄存器。数据缓冲寄存器是用来存放CPU主存读取的一个指令字或一个数据字,它是采用锁存器结构来实现的。他们都是可以直接从LPM库中调用的。 图3.1.3.1 数据缓冲寄存器逻辑结构 图3.1.3.2 指令寄存器逻辑结构图3.1.3.3 工作寄存器元件图图3.1.3.4 工作寄存器逻辑结构3.1.4 存储器用于存储微程序的LPM_ROM用初始化存储器编辑窗口LPM_ROM配置文件.mif的,其中rom5.mif的数据是微指令码,如图3.1.4.1.图3.1.4.1 rom5.mif中的数据图3.1.4.2 存储器3.2 模型机顶层框图设计 通过各个小的部件的设计,最后将各个部件如数据通路一样的将部件连接起来,完成如图的顶层框图。图3.2.1 8位CPU的顶层电路图第四章 程序测试和指令调试4.1 波形仿真电路的设计与仿真在Quartus 6.0的环境下完成的,硬件测试平台为杭州康芯电子有限公司“SOPC/EDA组成原理实验开发系统”上完成的。其中编写的rom5.mif保存在预实验电路cpu5.bdf工程所在的文件夹中,与实验电路cpu5.bdf一同编译后得到下载文件cpu5.sof,设计波形激励文件进行波形的仿真,结果如图4.1.1.图4.1.1 波形仿真图4.2 实验调试下载编程和试验台联机测试下载编程芯片方法在前面实验已经介绍,下面主要讲述测试。在GW48实验系统上选用电路模式NO.0。实验台资源应用说明如下:l 液晶屏LCD 显示程序运行监测信息如图3.39,功能说明如表七。l 数码管LED,数码管2,1显示手工输入数据的值。 表七 LCD液晶显示功能说明名称作用名称作用名称作用ININPUT 输入单元 OUTOUTPUT 输出单元ALU算术逻辑单元R0寄存器R0R1寄存器R1R2寄存器R2DR1暂存器DR1DR2暂存器DR2BUS内部数据总线PC程序计数器AR地址寄存器RAM程序/数据存储器IR指令积存器A微程序地址MC微指令代码l 键盘,按键8,7,4,3 分别表示模型机复位RST,模拟节拍SETP,控制台控制信号SWB,SWA。是乒乓开关,按一次为高电平,对应的发光管点亮,再按一次即变为低平,对应发光管灭,再按又变高。l 按键2,1 为数据录入键,16进制输入,每按一次加一,显示在数码管上。1)手动输入实验程序实验程序用来检查模型机的指令执行情况,包含了指令系统全部5条指令,用机器指令代码编程,参考实验程序如表八:表八 机器指令试验程序存储器地址内容助记符说明00H00HIN“INPUT”R0,键盘输入数据01H10HADD0AHR0+0AHR002H0AH03H20HSTA0BHR00BH04H0BH05H30HOUTOBH0BH“OUTPUT”,显示输出数据06H0BH09HPC,以08H内容为转移地址07H40H JMP08H08H00H 09H00H 0AH34HDB 34H被加数0BHXXH求和结果输入程序的方法如下:通过按键4,3,置SWB,SWA为01,并按复位按键8.令模型机工作在控制台写存储器状态,执行KWE微程序;通过按键2,1输入实验程序代码数据,按键数据显示在数码管2,1上。然后再按单步STEP按键7两次,产生低高低电平变化的正脉冲,可以通过液晶屏显示的内容跟踪控制台写KWE微程序的执行过程。当3次正脉冲(每次按键7两次)后,液晶屏显示RAM等于键2,1输入的值,这时,可以继续通过键2,1 输入第2个数据,直至机器指令实验程序代码全部输入完毕。仿照操作,只是设置SWB,SWA为00,然后按复位按键8。通过手动键7跟踪控制台读存储器操作(KRD)微程序的执行。并核对输入模型机RAM中的数据是否正确。注意,此操作不是必须的。可以在计算机上编译好代码文件,并随同模型CPU设计文件一同编译进SOF下载文件中,直接下载进入FPGA。方法可以按如下步骤完成:在Quartus环境下,打开工程文件CPU5A,修改CPU5A.bdf中LPM_RAM_DQ的参数,将初始化文件LPM_FILE设置为“./ram_1.mif”;打开ram_1.mif(在示例中已有此文件),根据实验程序,在ram_1.mif中输入全部机器指令代码(示例中已经输入)。将工程文件重新编译后,下载到实验台中,即完成LPM_RAM的配置。2)通过液晶屏监视,单步跟踪试验程序机器指令的解释执行置SWB,SWA为11,并按复位按键8,启动程序运行(RP)微程序(参看图4.3)。 每按键7两次产生一个STEP单步脉冲,跟踪机器指令和微指令程序的执行。执行轨迹如表九。3)使用Quartus的In-System Memory Content Editor了解CPU运行情况。使用在系统读写工具对模型CPU中的存放微程序的ROM和存放程序与数据的RAM进行观察。实验系统控制选择同上。利用Quartus的In-System Memory Content Editor,将载于FPGA中CPU内RAM/ROM的数据读出。方法是从菜单选择Tool|In-System Memory Content Editor,即可进入在系统存储器读写。对于In-System Memory Content Editor,将读数据选择在循环读数据功能上。按键8,使其低电平,允许程序运行,键2、1输入运算数据56H,连续按键7,即STEP,完成整个程序运行后,可以发现RAM位置“34”数据旁出现“8A”即45H+67H之和,并已经写到RAM中的0BH单元中。表九 机器指令试验程序执行情况STEP下址A微指令MCPCIR说明10001811000OO复位之后,第1条微指令是判断控制台命令SMB,SWA 223018101SMB,SWA=11,转RP 自动执行程序30100800140201ED8201第1个指令周期开始51000C04800取RAM中的第1条试验程序指令,指令是IN60100100102接收键盘输入数据,放到工作寄存器R070201ED82第2个指令周期开始80900C04810取RAM中的第2条试验程序指令,指令是ADD90301ED8303间接寻址,取地址100400E004地址置入AR110500B005从RAM中取数据到DR2 120601A206R0数据送DR11301919A01(DR1) +(DR2)送R0 140201ED8204第3个指令周期开始151200C04820取RAM中的第3条试验程序指令,指令是STA160701ED8705间接寻址取,取地址171500E00D地址置入AR1801038201R0 内容送RAM 190201ED8206第4个指令周期开始201300C04830取RAM中的第4条试验程序指令,指令是OUT第五章 设计总结与体会在这课程设计的几个星期里,作者学会了很多。数字电路、模拟电子技术基础、电路分析是学习计算机硬件的专业基础课程,也是了解计算机硬件的最底层原件的课程。计算机组成原理是直接针对计算机基本组成原理的专业课程。通过一学期的学习,了解了通用微型计算机的组成原理和基本工作原理。在三门专业基础课程的基础上,进一步了解了计算机工作的步骤:取得指令地址->读取指令->翻译指令->执行指令。这一过程即是冯·诺依曼计算机思想的精髓,也是当代计算机的基本工作原理和工作过程。了解这一原理,掌握这一原理,是学习计算机硬件的基本要求。在两周的时间里,我们组分工明确,并且查阅了十篇左右的相关论文和书籍。在充分了解模型计算机的原理的基础上,基本实现了模型计算机的结构。在设计过程中,也出现了很多的问题,主要的设计工作在于微程序控制器的设计上,需利用地址转移逻辑来实现指令的跳转,从而使其能执行完所有的指令。通过这次实践,充分认识到知识的综合运用的重要性,而且任何一个不严谨的地方都有可能导致错误,同时这次实践使自己对计算机的工作原理有了一个系统的认识,也为以后专业课的学习打下了基础。由于对计算机的总体结构仅限于在书本上的知识,并没有那么的熟悉,在之前也没有重点去研究书本上的知识,所以一开始很是茫然。还有主要集中在对计算机原理的掌握不够,不能够将计算机的原理图和模型很好地联系在一起。因而,在I/O接口的设计过程中,多次出现问题,多次调解也没有得到结果,最后在指导老师的帮助下,才借用老师的DSP(DISPLY)实现多部分的连接。在今后的学习中,应该多注意微机原理的学习以及接口技术的研究,致力于在微型计算机的接口应用方面做出突破。参考文献1 白中英计算机组成原理 科学出版社 2008年2 吴军、胡景春计算机组成结构实验教学指导 南昌航空大学出版 2007年3 王静、刘莹 基于FPGA的高可靠接口模块设计 北京大学出版社 2009年4 罗克露、单立平、刘辉 计算机组成原理 电子工业出版社 2004年5 张兴忠、阎宏印、吴淑红 数字逻辑与数字系统 科学出版社 2004年