16位精简指令集cpu设计
介绍一个我用VHDL写的RISC-CPU程序,这个程序实现一个16位CPU。该CPU使用精减指令集,是一个五段流水线的结构。包括取指令(IF)、读寄存器(RD)、运算器(ALU)、内存读写(MEM)和写回(WB)。系统时序图如下:

各段的功能和完成的操作如下:
1、IF段把PC值送地址位,并读出指令。该还完成PC修改,加1或者跳转,受RD段结构冲突信号和MEM跳转信号控制。
2、RD段把指令中的寄存器读出,负责寄存器重命名,并把操作数准备好的指令送ALU。这个过程可以实现指令乱续执行。
3、ALU完成计算。
4、MEM段只有lode-store指令和跳转指令动作,其它指令直接通过。把需要写结果的指令送往下一站。
5、WB段把结果写回。该段没有做成一个专门的部件,而是和RD段做在一起。寄存器对其它段是“不可见的”。
所有操作过程都是先准备好数据和控制操作码,等时钟信号到来然后再执行。可以把图中虚线当作时钟下降沿。关于时序设计的注意点:
1、提高CPU性能的问题可归结为如何规划系统时序以获得尽可能小的CPI和尽量大的稳定工作频率。
2、混合时钟沿电路是指一部分部件在时钟上升沿动作,另一部分部件在时钟下降沿动作。在控制器的设计中,可以将控制信号的发出与执行部件的动作隔开半个时钟周期,即控制信号在时钟下降沿发出,而执行部件在下个时钟上升沿动作。
3、在数字系统中,时序规划往往决定了系统性能,设计时应尽可能满足同步原则。一方面要尽可能使整个系统同步于单一时钟,即使不得不涉及多时钟域也应做到局部同步,避免使用门控时钟;另一方面要避免使用混合时钟沿电路,而改用满足同步原则的单一时钟沿电路代替。
4、对于如CPU这样的复杂逻辑系统,时序设计的好坏成为影响系统性能的一个重要因素。在设计具体电路前,必须对系统时序做一个整体规划,才能避免因对信号间时序关系理解不充分而导致设计错误的危险。基于上述理由,甚至可以说RTL级设计实际上只是一场时序的游戏。
下面提供程序的下载。该程序多数FPGA都能通过,低端FPGA需要使用更低的电钟频率,根据存储器的速度也要调整时钟频率。目前大部分结构冲突和数据冲突都测试正确,只在控制冲突下可能出现一个小BUG,还没有进行严格测试(控制冲突时不一定会出错)。
cpu16

@beta, 应该是网站地址吧,我不记得了。