1. Avalon_Microsequencer(以下简称为Avalon_us)没有寄存器堆(Register File),仅有一个32位的数据寄存器(DATA_REG[31:0]); riple
2. Avalon_us的指令集中包含Load和Store指令,可以和Avalon-MM总线上的设备交换数据。 riple
3. 由于没有寄存器堆,也就省去了访存(MEM)和写回(WB)这两个流水阶段; riple
4. 由于指令集很小(共有15条指令),指令译码(ID)电路简单,可以和执行阶段(EXE)合并为一级,不需要单独占用一个流水阶段; riple
5. 这样一来,Avalon_us共包含两级流水线:取指(IF)、译码兼执行(EXE)(图一)。 riple
6. 为了解决跳转指令带来的控制相关问题,需要编译器采用NOP指令填充分支延迟槽。也就是在跳转指令后面添加一条NOP指令填充流水线。其实,如果手工编写指令,也可以在分支指令后面添加一条有用的指令(图二)。 riple
7. 由于两级流水的存在,对数据寄存器操作的指令只需要一个时钟周期;对Avalon-MM总线访问的指令会引入一个到多个周期的额外延迟(图三)。 riple
图一、复位后流水线操作 riple
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
图二、有跳转指令的流水线操作和分支延迟槽指令填充 riple
图三、Avalon-MM总线同步操作对流水线操作的影响 riple
8. Avalon_us的数据指针(INST_PTR)根据指令存储器的容量动态扩充,最多16位,最大可以访问64K的指令地址范围。 riple
9. Avalon_us以32位数据和地址宽度访问Avalon-MM总线,支持Dynamic Bus Sizing地址对齐方式。 riple
10. Avalon_us指令字长36位,高4位是操作码(OPCODE[3:0]),低32位是操作数。 riple
11. Avalon_us仅有一个特殊状态位(COND_BIT),作为条件跳转指令的判断条件。 riple
12. Avalon_us的IF流水阶段是利用altsyncram的输入端口寄存器和输出端口寄存器配合时钟使能实现的。在altsyncram Megafunction中,输出端口寄存器是可选的。加入这一寄存器会引入ram输出时序一个时钟周期的延时,但是可以给ram的输出逻辑提供更大的时序余量,提高系统的Fmax。从这一点看,IF和EXE两级流水线的逻辑分配是均衡的。 riple
背景资料:Avalon_uS 简介,Avalon_uS使用手册,
Avalon MicroSequencer Reference Design riple
文章评论(0条评论)
登录后参与讨论