问题描述
一般问题描述:
指令缓冲区的宽度和深度是多少?什么是指令缓冲区?
解决/修复方法
指令缓冲区为32位宽,16位深,因为它使用32个SRL16实现。但是,只使用了4-5个单词。指令缓冲区不使用任何BRAM并提高整体性能,尤其是在MicroBlaze中未启用指令缓存时。
您可以将指令缓冲区视为迷你缓存。您可以使用它来存储一些指令,以便可以快速访问多个连续指令。但是,这对分支机构没有帮助;如果发生分支,则刷新指令缓冲区,因为其余指令不再有用。
使用指令缓冲区有两个好处:
1.当MicroBlaze执行多时钟周期指令(如MUL或DIV)时,取指令可以预取指令,以便在通过OPB获取时最小化总线延迟。当只运行LMB时,没有任何优势。
它使管道控制的实现变得更加容易。
如果没有指令缓冲区,除非有新指令进入,否则不能移动管道,并且除非知道可以使用该指令,否则无法启动新的提取。例如,DIV指令需要35个时钟周期。当仅在LMB上运行时,新的提取在时钟周期33开始。但是,当在OPB上运行时,它取决于OPB延迟。这使得管道处理非常复杂。
使用指令缓冲区,如果缓冲区中有空间,则可以进行提取,与当前指令无关。只要缓冲区中有指令,就可以移动管道。不使用缓冲区中所有16个位置的原因是因为实际上在平均5-7条指令之后通常存在分支指令,并且对于每个分支,指令缓冲区无效。获取太多指令会在总线上引入不必要的内存提取,并可能使总线上的其他主器件停顿。
没有回复内容