




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机组成原理课程设计说明书题 目: 设计求负数平方和的cisc模型计算机 院 (系): 计算机科学与工程学院 专 业: 计算机科学与技术 学生姓名: 莫兴伟 学 号: 0900310321 指导教师: 陈智勇 1、课程设计的题目和内容:设计一台嵌入式cisc模型计算机(采用定长cpu周期、联合控制方式),并运行能完成一定功能的机器语言程序进行验证。 要求连续输入5个有符号整数(用8位二进制补码表示,十六进制数输入)求所有负数的平方和并输出显示。说明:5个有符号数从外部输入; 一定要使用符号位(比如说sf),并且要使用负的时候转移(比如 说js)或不为负的时候转移(比如说jns)指令。课程设计完成的内容 1.完成系统的总体设计,画出模型机数据通路框图; 2.设计微程序控制器(cisc模型计算机)的逻辑结构框图; 3.设计机器指令格式和指令系统; 4.设计时序产生器电路; 5.设计所有机器指令的微程序流程图; 6.设计操作控制器单元;在cisc模型计算机中,设计的内容包括微指令格式(建议采用全水平型微指令)、微指令代码表(根据微程序流程图和微指令格式来设计)和微程序控制器硬件电路(包括地址转移逻辑电路、微地址寄存器、微命令寄存器和控制存储器等。具体电路根据微程序控制器的逻辑结构框图、微指令格式和微指令代码来设计)。 7.设计模型机的所有单元电路,并用vhdl语言(也可使用gdf文件-图形描述文件)对模型机中的各个部件进行编程,并使之成为一个统一的整体,即形成顶层电路或顶层文件; 8.由给出的题目和设计的指令系统编写相应的汇编语言源程序; 9.根据设计的指令格式,将汇编语言源程序手工转换成机器语言源程序,并将其设计到模型机中的rom中去; 10.使用eda软件进行功能仿真,要保证其结果满足题目的要求;(其中要利用eda软件提供的波形编辑器,选择合适的输入输出信号及中间信号进行调试。)2、 系统的总体设计:整个系统数据通路如下所示:本模型机中的指令系统中共有9条基本指令,下表列出了每条指令的格式、汇编符号和指令功能。1、 模型机的指令系统和所有指令的指令格式1)i/o指令输入指令(in1)格式:7 6 5 43 21 0操作码x xrd输入指令(out1)格式:7 6 5 43 21 0操作码rsx x2)转移指令条件转移指令(jb)和无条件跳转指令(jmp)格式:7 6 5 43 2 1 0操作码x x x x地址3)比较指令和相加指令比较指令(cmp)和相加指令(add)的格式:7 6 5 43 21 0操作码rsrd4)mov指令mov指令格式:7 6 5 43 21 0操作码x xrd立即数5)乘法指令乘法指令mul格式:7 6 5 43 21 0操作码rsrd6)自减指令自减1指令(dec)格式:7 6 5 43 21 0操作码x xrd助记符号指令格式功 能in1 rd 1 0 0 0rd将数据存到rd寄存器out1 rs1 1 1 1rs(rs)ledadd rs,rd1 1 0 0rsrd(rs)+(rd)rdcmp rs,rd1 0 1 0rsrd(rs)-(rd),锁存cy和zidec rd0 1 1 1rd(rd)-1rdmov rd,data1 0 0 1rddatadatardjmp addr1 1 1 0addraddrpcjb addr1 0 1 1addr若小于,则addrpcmul rs rd1 1 0 1rd其中,对rs和rd的规定:rs或rd选定的寄存器0 0r00 1r11 0r2模型机规定数据的表示采用定点整数补码表示,单字长为8位,其格式如下:76 5 4 3 2 1 0符号位尾数t1、t2、t3、t4与clr、q之间的关系图qclrt1t2t3t4一个cpu周期现在,我们开始微程序控制器的设计,它包括以下几部分工作:(1)根据指令格式和指令系统设计所有机器指令的微程序流程图,并确定每条微指令的微地址和后继微地址;(2)设计微指令格式和微指令代码表;(3)设计地址转移逻辑电路;(4)设计微程序控制器中的其它逻辑单元电路,包括微地址寄存器、微命令寄存器和控制存储器;(5)设计微程序控制器的顶层电路。 首先做第一步,根据指令格式和指令系统设计所有机器指令的微程序流程图.对于我设计的模型机,对应的指令流程图如下所示: 第二步,指令流程图设计完成后,开始设计微指令格式和微指令代码表,按照要求,cisc模型机系统使用的微指令采用全水平型微指令,字长为25位,其中微命令字段为17位,p字段为2位,后继微地址为6位,其格式如下: 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0load ldpc ldar ldir ldri rd_b rs_b s1 s0 alu_b ldac lddr wr cs sw_b led_b ldfr p1 p2 后继微地址按照这个格式,再根据我设计的指令流程图,可以得到:由微指令格式和微程序流程图编写的微指令代码表如下所示,在微指令的代码表中微命令字段从左边到右代表的微命令信号依次为:load、ldpc、ldar、ldir、ldri、rd_b、rs_b、s1、s0、alu_b、ldac、lddr、wr、cs、sw_b、led_b、ldfr。微地址微命令字段p1p2后继微地址0000001110011001001111000000010000001100011100000111100000000000001010010110010010110100010000000111000111001001011000000000000100100000100101111100000000100010110000110110011111000000000001101000001001011111000000001000111100000100110111100001010000100010001110010011010000000000010011110011001001111000000011001010100001000110111100000010000101111100110010011110011000000011001000010001101111000000110001101100001000110111100001001000111011100110010011110000100110011111000010001000110000000000010010100000100101111100001010101001101000110010010110000000000101001000111100001111000000000010101100011111000111100000000010000001000110010010110000000001100001000011001001111000000000第三步:设计好了微指令代码表之后,我们可以开始设计地址转移逻辑电路地址转移逻辑电路是根据微程序流程图3-2中的棱形框部分及多个分支微地址,利用微地址寄存器的异步置“1”端,实现微地址的多路转移。由于微地址寄存器中的触发器异步置“1”端低电平有效,与a4a0对应的异步置“1”控制信号se5se1的逻辑表达式为:(a5的异步置“1”端se6实际未使用)se5=(fc+fz)p(2)t4se4=i7p(1)t4se3=i6p(1)t4se2=i5p(1)t4se1=i4p(1)t4需要注意的是:地址转移逻辑电路中异步置“1”信号se5se1表达式的确定与p字段测试时转移微地址的确定密切相关.地址转移逻辑电路的实现代码如下:library ieee;use ieee.std_logic_1164.all;entity addr is port( i7,i6,i5,i4:in std_logic; fz,fc,t4,p1,p2:in std_logic; se6,se5,se4,se3,se2,se1:out std_logic);end addr;architecture a of addr isbegin se6=1; se5=not (not fc or fz ) and p2 and t4); se4=not(i7 and p1 and t4); se3=not(i6 and p1 and t4); se2=not(i5 and p1 and t4); se1=not(i4 and p1 and t4);end a;编译通过之后生成图形符号,我们的地址转移逻辑电路就完成了。接下来继续生成微控制器里面的其他器件和电路:我们先看看微地址寄存器aa的设计,它的内部电路图如下所示: 可以看得出,aa中带有异步清“0”和异步置“1”功能的触发器mmm,它的实现代码如下:library ieee;use ieee.std_logic_1164.all;entity mmm is port( se:in std_logic; t2:in std_logic; d:in std_logic; clr:in std_logic; ua:out std_logic );end mmm;architecture a of mmm isbegin process(clr,se,t2) begin if(clr=0) then ua=0; elsif(se=0)then ua=1; elsif(t2event and t2=1) then ua dataout dataout dataout dataout dataout dataout dataout dataout dataout dataout dataout dataout dataout dataout dataout dataout dataout dataout dataout dataout dataout dataout dataout=1110011001001111000000010; end case; ua(5 downto 0)=dataout(5 downto 0); d(18 downto 0)=dataout(24 downto 6); end process;end a; 程序中的25位控制信号就是按照上面确定的微指令代码表确定的。编译通过后生成了控制存储器,接下来该生成微命令寄存器mcommand,同样也是通过vhdl来描述即可,它的实现代码如下所示:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity mcommand isport( t2,t3,t4,i3,i2,i1,i0:in std_logic; o:in std_logic_vector(18 downto 0); p1,p2,load,ldpc,ldar,ldir,ldr0,ldr1,ldr2,ldr3,r0_b,r1_b,r2_b,r3_b,s1,s0,alu_b,ldac,lddr,wr,cs,sw_b,led_b,ldfr:out std_logic );end mcommand;architecture a of mcommand issignal dataout:std_logic_vector(18 downto 0);begin process(t2) begin if(t2event and t2=1)then dataout(18 downto 0)=o(18 downto 0); end if; p2=dataout(0); p1=dataout(1); ldfr=dataout(2) and t4; led_b=dataout(3); sw_b=dataout(4); cs=dataout(5); wr=dataout(6)or(not t3); lddr=dataout(7) and t4; ldac=dataout(8) and t4; alu_b=dataout(9); s0=dataout(10); s1=dataout(11); r3_b=(dataout(13)or(not i1)or (not i0)and(dataout(12)or(not i3)or (not i2); r2_b=(dataout(13)or(not i1)or i0)and(dataout(12)or(not i3)or i2); r1_b=(dataout(13)or(not i0)or i1)and(dataout(12)or(not i2)or i3); r0_b=(dataout(13)or i1 or i0)and(dataout(12)or i3 or i2); ldr3=t4 and dataout(14)and i1 and i0; ldr2=t4 and dataout(14)and i1 and (not i0); ldr1=t4 and dataout(14)and (not i1) and i0; ldr0=t4 and dataout(14)and (not i1) and (not i0); ldir=dataout(15)and t3; ldar=dataout(16)and t3; ldpc=dataout(17)and t4; load=dataout(18); end process;end a;编译成功后创建图形文件即可以生成微命令寄存器mcommand,然后再分别生成微地址转换器f1、f2、f3,三个器件代码分别如下所示:f1:library ieee;use ieee.std_logic_1164.all;entity f1 is port( ua5,ua4,ua3,ua2,ua1,ua0: in std_logic; d:out std_logic_vector(5 downto 0);end f1;architecture a of f1 isbegin d(5)=ua5; d(4)=ua4; d(3)=ua3; d(2)=ua2; d(1)=ua1; d(0)=ua0;end a;f2:library ieee;use ieee.std_logic_1164.all;entity f2 is port( d:in std_logic_vector(5 downto 0); ua5,ua4,ua3,ua2,ua1,ua0: out std_logic );end f2;architecture a of f2 isbegin ua5=d(5); ua4=d(4); ua3=d(3); ua2=d(2); ua1=d(1); ua0=d(0);end a;f3:library ieee;use ieee.std_logic_1164.all;entity f3 is port( d:in std_logic_vector(7 downto 0);ua7,ua6,ua5,ua4,ua3,ua2,ua1,ua0: out std_logic );end f3;architecture a of f3 isbeginua7=d(7);ua6=d(6);ua5=d(5);ua4=d(4);ua3=d(3);ua2=d(2);ua1=d(1);ua0=d(0);end a;这些器件都生成玩后,可以进行下一步设计,也就是设计顶级电路,顶层电路是这样的:我们已经生成了crom,我们还需要:算数逻辑单元alu;状态条件寄存器ls74;暂存器ls273;通用寄存器ls273;1:2分配器fen2;3选1数据选择器mux3;5选1数据选择器mux5;程序计数器pc;地址寄存器ls273;rom芯片rom16;指令寄存器ir;时序产生器counter。各个部件对应的vhdl语言描述如下所示:alu:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity alu isport(a:in std_logic_vector(7 downto 0);b:in std_logic_vector(7 downto 0);s1,s0:in std_logic;bcdout:out std_logic_vector(7 downto 0);cy,zi:out std_logic);end alu;architecture a of alu issignal aa,bb,temp:std_logic_vector(8 downto 0);beginprocess(s1,s0)beginif(s1=0 and s0=0)then aa=0&a;bb=0&b;temp=aa+bb;bcdout=temp(7 downto 0);cy=temp(8);if(temp=100000000or temp=000000000)then zi=1;elsezi=0;end if;elsif(s1=0 and s0=1)then bcdout=a-b; if(ab)then cy=1; zi=0;elsif(a=b)then cy=0; zi=1;else cy=0; zi=0;end if;elsif(s1=1 and s0=1)then aa=0&a;bb=0&b;temp=aa*bb;bcdout=temp(7 downto 0);cy=temp(8);if(temp=100000000or temp=000000000)then zi=1;elsezi=0;end if;elsif(s1=1 and s0=0)then aa=0&a; temp=aa+1;bcdout=temp(7 downto 0);cy=temp(8);if(temp=100000000or temp=000000000)then zi=1;elsezi=0;end if;elsebcdout=00000000;cy=0;zi=0;end if;end process;end a;状态条件寄存器ls74:library ieee;use ieee.std_logic_1164.all;entity ls74 isport(ldfr:in std_logic;cy,zi:in std_logic;fc,fz:out std_logic);end ls74;architecture a of ls74 isbeginprocess(ldfr)beginif(ldfrevent and ldfr=1)then fc=cy; fz=zi; end if;end process;end a;暂存器、通用寄存器、地址寄存器ls273:library ieee;use ieee.std_logic_1164.all;entity ls273 isport( d:in std_logic_vector(7 downto 0); clk:in std_logic; o:out std_logic_vector(7 downto 0) );end ls273;architecture a of ls273 isbegin process(clk) begin if(clkevent and clk=1) then o=d; end if; end process;end a;1:2分配器fen2:library ieee;use ieee.std_logic_1164.all;entity fen2 isport( x:in std_logic_vector(7 downto 0); wr,led_b:in std_logic; w1,w2:out std_logic_vector(7 downto 0) );end fen2;architecture a of fen2 isbegin process(led_b,wr) begin if(led_b=0 and wr=0) then w2=x; else w1=x; end if; end process;end a;3选1数据选择器mux3:library ieee;use ieee.std_logic_1164.all;entity mux3 isport(id:in std_logic_vector(7 downto 0);sw_b,cs:in std_logic;n1,n2:in std_logic_vector(7 downto 0);ew:out std_logic_vector(7 downto 0);end mux3;architecture a of mux3 isbegin process(sw_b,cs) begin if(sw_b=0) then ew=id; elsif(cs=0)then ew=n2; elseew=n1;end if; end process;end a;5选1数据选择器mux5:library ieee;use ieee.std_logic_1164.all;entity mux5 isport(c,d,e,f,g: in std_logic;x1,x2,x3,x4,x5: in std_logic_vector(7 downto 0);w: out std_logic_vector(7 downto 0);end mux5;architecture a of mux5 issignal sel: std_logic_vector(4 downto 0);begin sel=g&f&e&d&c; process(sel) begin if(sel=11110) then -r0_out w=x1; elsif(sel=11101) then -r1_out w=x2; elsif(sel=11011) then -r2-out w=x3; elsif(sel=10111) then -r3_out w=x4; elsif(sel=01111) then -alu_out w=x5; else null; end if; end process;end a;程序计数器pc:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity pc isport( load,ldpc,clr: in std_logic; d: in std_logic_vector(7 downto 0); o: out std_logic_vector(7 downto 0) );end pc;architecture a of pc issignal qout: std_logic_vector(7 downto 0);begin process(ldpc,clr,load) begin if(clr=0) then qout=00000000; elsif(ldpcevent and ldpc=1) then if(load=0) then qoutpc else qout=qout+1; -pc+1 end if; end if; end process; o=qout;end a;rom芯片rom16:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity rom16 is port(dout:out std_logic_vector(7 downto 0);addr:in std_logic_vector(7 downto 0);cs:in std_logic);end rom16;architecture a of rom16 isbegindout=10010010 when addr=00000000 and cs=0 else - 00000000 when addr=00000001 and cs=0 else 10000000 when addr=00000010 and cs=0 else - 10010011 when addr=00000011 and cs=0 else - 00000000 when addr=00000100 and cs=0 else 10100011 when addr=00000101 and cs=0 else - 10110000 when addr=00000110 and cs=0 else 00001010 when addr=00000111 and cs=0 else - 00010000 when addr=00001000 and cs=0 else - 11000001 when addr=00001001 and cs=0 else 11010010 when addr=00001010 and cs=0 else - 10010011 when addr=00001011 and cs=0 else 00000101 when addr=00001100 and cs=0 else - 10101011 when addr=00001101 and cs=0 else - 10110000 when addr=00001110 and cs=0 else 00000010 when addr=00001111 and cs=0 else 11110100 when addr=00010000 and cs=0 else 00000000;end a;时序产生器counter:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity counter isport( q,clr: in std_logic; t1, t2,t3,t4: out std_logic );end counter;architecture a of counter issignal x: std_logic_vector(1 downto 0);begin process(q,clr) begin if(clr=0) then t1=0; t2=0; t3=0; t4=0; x=00; elsif(qevent and q=1) then x=x+1; t2=(not x(1) and x(0); t3=x(1) and (not x(0); t4=x(1) and x(0); end if; end process; end a;各个器件生成后,开始用自己设计的指令编写汇编程序,程序如下所示: mov r1,0 ;寄存器r1用来存放最后的结果 mov r2,0 ;寄存器r2放了一个立即数0,用来做是否负数判读以及做输入是 ;否达到5次的比较标准 mov r3,5 ;记录输入次数,从5开始递减input:in1 r0 ;寄存器r0用来存放输入的数据dec r3 ;每输入一次则r3递减1,递减到0说明刚好输入5个数据cmp r0,r2 ;判断输入的数据是否是负数jb l1 ;如果是负数,则转到标号l1执行cmp r2,r3 ;如果不是负数,则判断输入是否够5次jb input ;若不够5次则跳转到inputjmp l2 ;若够5次就跳转到l2执行l1:mul r0,r0 ;负数球平方和add r0,r1 ;求得的平方放入r1中cmp r2,r3 ;比较是否够5次输入jb input ;若不够则跳转到inputl2:out1 r1 ;若输入够5次,则结束输入,输出最后结果end机器语言源程序根据设计的指令格式,将汇编语言源程序手工转换成机器语言源程序,并将其设计到模型机中的rom中去:助记符 地址(十六进制) 机器代码 mov r1,0 0010010001 0100000000 mov r2,002100100100300000000 mov r3,504100100110500
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年建筑工地抹灰安全题库解析集
- 2025年康复训练面试高频题
- 2025年机械工程师初级面试模拟题及答案全解
- 2025年AI主播入门初级题库解析
- 2025年卡丁车教练员考试通关秘籍模拟题集与答题技巧
- 2025年化学初级工无机题解
- 2025年市委党校教师招聘面试问题解答
- 2025年高压电工模拟题及答案
- 2025年AI智能语音技术实战指南及考试题库
- 2025年汽车工程师专业技术资格考试试题及答案解析
- 工地建筑钢板租赁合同范本
- 光传输业务配置课件
- (标准)便利店转让合同协议书带烟证
- 2025年辽宁省地质勘探矿业集团有限责任公司校园招聘笔试备考题库带答案详解
- 2025年青海辅警招聘考试题及答案
- 2025新外研版初中英语八年级上全册课文原文翻译
- 钢结构安装安全操作规程
- 流程优化活动方案
- 消防装备认识课件
- 2025年山西中考道德与法治真题解读及答案讲评课件
- 上消化道穿孔护理教学查房
评论
0/150
提交评论