原创 Avalon_Microsequencer结构浅析

2007-7-15 23:03 5892 8 3 分类: FPGA/CPLD

    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 简介ppt,Avalon_uS使用手册doc


    Avalon MicroSequencer Reference Design riple


    Avalon_uS调试体会 riple


   


文章评论0条评论)

登录后参与讨论
我要评论
0
8
关闭 站长推荐上一条 /2 下一条