RISC_CPU的结构
1.时钟发生器
时钟发生器clk_generate利用外来的时钟信号clk生成一系列时钟信号。
其中生成的clk信号用作指令寄存器、累加器、状态控制器的时钟信号。
clk的8分频fetch信号。当fetch信号为高电平时,使clk能触发CPU控制器开始执行一条指令。同时fetch信号还将控制地址多路器输出指令地址或者数据地址。
2.指令寄存器
指令寄存器在clk正沿触发下,将数据总线送来的指令存入高8位或低8位寄存器中。是否寄存是收到CPU状态控制器的load_ir信号控制的。
由于每条指令16位(高3位操作码,低13位地址码)即 两个字节。因为本设计的数据总线为8位,所以每条指令需要取两次。先取高8位,后取低8位。定义一个变量state来决定当前是取的高8位还是低8位。
3.累加器
累加器用于存放当前的结果,它也是双目运算中的一个数据来源。当累加器通过ena口收到来自CPU状态控制器load_acc信号时,在clk时钟正跳沿时就收到来自于数据总线的数据。而累加器的数据只有在需要往RAM区或端口写时才允许输出,否则应呈现高阻态。
4.数据控制器
数据控制器的作用是控制累加器的数据输出。由于这个数据总线是各种操作传送数据的公共通道,不同的情况下传送不同的内容。数据总线有时传送RAM区或接口的数据,有时传送指令。累加器不写的时候是高阻态,就可以允许其他部件使用数据总线了。数据控制器何时输出累加器的数据则由状态控制器输出的控制信号datactl_ena决定。
任何部件往总线上输出数据时,都是由CPU状态控制器输出的各信号控制决定。
module datactl(data,in,data_en