Verilog硬件描述语言(9)cpu设计实例.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
3 写总线操作 每个指令周期的第3.5个时钟周期处,写的地址就建立了,第4个时钟周期输出数据,第5个时钟周期输出写信号。至第6个时钟结束,数据无效,第7.5时钟地址输出为PC地址,为下一个指令周期做好准备 CPU对存储器或端口写数据的时序 RISC_CPU寻址方式和指令系统 RISC_CPU的指令格式一律为: ? 它的指令系统仅由8条指令组成 1)??HLT停机操作。该操作将空一个指令周期,即8个时钟周期。 2)??SKZ为零跳过下一条语句。该操作先判断当前alu中的结果是否为零,若是零就跳过下一条语句,否则继续执行。 3)??ADD相加。该操作将累加器中的值与地址所指的存储器或端口的数据相加,结果仍送回累加器中。 4)??AND相与。该操作将累加器的值与地址所指的存储器或端口的数据相与,结果仍送回累加器中。 5)??XOR异或。该操作将累加器的值与指令中给出地址的数据异或,结果仍送回累加器中。 6)??LDA读数据。该操作将指令中给出地址的数据放入累加器。 7)??STO写数据。该操作将累加器的数据放入指令中给出的地址。 8)??JMP无条件跳转语句。该操作将跳转至指令给出的目的地址,继续执行。? RISC_CPU是8位微处理器,一律采用直接寻址方式,即数据总是放在存储器中,寻址单元的地址由指令直接给出。这是最简单的寻址方式。 moduleadr(addr,fetch,ir_addr,pc_addr); output [12:0] addr; input [12:0] ir_addr, pc_addr; input fetch; ? assign addr = fetch? pc_addr : ir_addr; ? endmodule 7.程序计数器 程序计数器用于提供指令地址。以便读取指令,指令按地址顺序存放在存储器中。有两种途径可形成指令地址:其一是顺序执行的情况,其二是遇到要改变顺序执行程序的情况,例如执行JMP指令后,需要形成新的指令地址。复位后,指令指针为零,即每次CPU重新启动将从ROM的零地址开始读取指令并执行。每条指令执行完需2个时钟,这时pc_addr已被增2,指向下一条指令。(因为每条指令占两个字节。)如果正执行的指令是跳转语句,这时CPU状态控制器将会输出load_pc信号,通过load口进入程序计数器。程序计数器(pc_addr)将装入目标地址(ir_addr),而不是增2。 module counter ( pc_addr, ir_addr, load, clock, rst); output [12:0] pc_addr; input [12:0] ir_addr; input load, clock, rst; reg [12:0] pc_addr;? always @( posedge clock or posedge rst ) begin if(rst) pc_addr=13b0_0000_0000_0000; else if(load) pc_addr=ir_addr; else pc_addr = pc_addr + 1; end endmodule 状态控制器由两部分组成: ? 1.状态机(图中的MACHINE部分) 2.状态机控制器(图中的MACHINECTL部分) ? 状态机控制器接受复位信号RST,当RST有效时通过信号ena使其为0,输入到状态机中停止状态机的工作。 8.状态控制器 module machinectl( ena, fetch, rst); output ena; input fetch, rst; reg ena; always @(posedge fetch or posedge rst) begin if(rst) ena=0; else ena=1; end endmodule 状态机是CPU的控制核心,用于产生一系列的控制信号,启动或停止某些部件。CPU何时进行读指令读写I/O端口,RAM区等操作,都是由状态机来控制的。状态机的当前状态,由变量state记录,state的值就是当前这个指令周期中已经过的时钟数(从零计起)。 指令周期是由8个时钟周期组成,每个时钟周期都要完成固定的操作 1)第0个时钟,因为CPU状态控制器的输出:rd和load_ir为高电平,其余均为低电平。指令寄存器寄存由ROM送来的高8位指令代码。 2)第1个时钟,与上一时钟相比只是inc_pc从0变为1故PC

文档评论(0)

676200 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档