|
发表于 2013-11-23 21:08:17
|
显示全部楼层
回复 9# leishangwen
我对 IC 的前端和后端都有一些经验. 我可以帮忙找出性能的瓶颈, 及优化流水线的安排等.
如 or1200_genpc.v 中
assign icpu_adr_o = !no_more_dslot & !except_start & !spr_pc_we
& (icpu_rty_i | genpc_refetch) ?
icpu_adr_i : {pc[31:2], 1'b0, ex_branch_taken|spr_pc_we};
icpu_adr_o 是用 icpu_rty_i 做出来的. 也就是说 从 rty 从 cache 出来后必须在
一个时钟内到达 cpu 再折回到 cache 模块的 adr. 信号在一个时钟内跑个往返, 这
不是流水线的作法, 链太长, 速度上不去.
我认为造成这个组合逻辑 loop back 的原因应该是 or1200 作者试图在此处作出 wishbone
时序, 可是 wishbone 时序和 CPU 想要的流水线的形式并不兼容.
如 wishbone 的突发形式为 (大写为命令,小写为对应的ack,需用等宽字体对齐来看对应关系)
AABCDEF
abcdef
而让 CPU 舒服的形式应为
ABCDEF
abcdef
LSU 模块中存在同样的 loop back.
我还在思考这问题背后的原因.
我个人更倾向将 or1200 打造的更精致, 快速.
闲聊... |
|