今のところ自作CPUは面積が大きすぎる。Vivadoでの論理合成結果をもっと詳細に見ていくことにする。
LSUのパイプラインにおいて、出力側のデータのブロードキャストを抑えるためにブロードキャストバスを改造したが、再論理合成しても改善されなかった。
+-----------------------------------------------+------------------------------------------------+------------+------------+---------+------+--------+--------+--------+------+--------------+ | Instance | Module | Total LUTs | Logic LUTs | LUTRAMs | SRLs | FFs | RAMB36 | RAMB18 | URAM | DSP48 Blocks | +-----------------------------------------------+------------------------------------------------+------------+------------+---------+------+--------+--------+--------+------+--------------+ | u_lsu_top | scariv_lsu_top | 163127 | 162215 | 912 | 0 | 24696 | 128 | 0 | 0 | 0 | | (u_lsu_top) | scariv_lsu_top | 0 | 0 | 0 | 0 | 5 | 0 | 0 | 0 | 0 | | lsu_loop[0].u_scariv_lsu | scariv_lsu | 42912 | 42816 | 96 | 0 | 4725 | 0 | 0 | 0 | 0 | | lsu_loop[1].u_scariv_lsu | scariv_lsu__parameterized0 | 24523 | 24427 | 96 | 0 | 4732 | 0 | 0 | 0 | 0 | | u_l1d_mshr | scariv_l1d_mshr | 17814 | 17814 | 0 | 0 | 4679 | 0 | 0 | 0 | 0 | | u_ldq | scariv_ldq | 3073 | 3073 | 0 | 0 | 1467 | 0 | 0 | 0 | 0 | | u_lrsc | scariv_lsu_lrsc | 0 | 0 | 0 | 0 | 57 | 0 | 0 | 0 | 0 | | u_scariv_dcache | scariv_dcache | 38824 | 38104 | 720 | 0 | 2459 | 128 | 0 | 0 | 0 | | u_scariv_store_requester | scariv_store_requestor | 1077 | 1077 | 0 | 0 | 1191 | 0 | 0 | 0 | 0 | | u_st_buffer | scariv_st_buffer | 9373 | 9373 | 0 | 0 | 1755 | 0 | 0 | 0 | 0 | | u_stq | scariv_stq | 25531 | 25531 | 0 | 0 | 3626 | 0 | 0 | 0 | 0 |
+-----------------------------------------------+------------------------------------------------+------------+------------+---------+------+--------+--------+--------+------+--------------+ | Instance | Module | Total LUTs | Logic LUTs | LUTRAMs | SRLs | FFs | RAMB36 | RAMB18 | URAM | DSP48 Blocks | +-----------------------------------------------+------------------------------------------------+------------+------------+---------+------+--------+--------+--------+------+--------------+ | u_lsu_top | scariv_lsu_top | 161548 | 160636 | 912 | 0 | 24624 | 128 | 0 | 0 | 0 | | (u_lsu_top) | scariv_lsu_top | 0 | 0 | 0 | 0 | 5 | 0 | 0 | 0 | 0 | | lsu_loop[0].u_scariv_lsu | scariv_lsu | 43552 | 43456 | 96 | 0 | 4730 | 0 | 0 | 0 | 0 | | lsu_loop[1].u_scariv_lsu | scariv_lsu__parameterized0 | 27012 | 26916 | 96 | 0 | 4652 | 0 | 0 | 0 | 0 | | u_l1d_mshr | scariv_l1d_mshr | 17769 | 17769 | 0 | 0 | 4679 | 0 | 0 | 0 | 0 | | u_ldq | scariv_ldq | 3095 | 3095 | 0 | 0 | 1467 | 0 | 0 | 0 | 0 | | u_lrsc | scariv_lsu_lrsc | 0 | 0 | 0 | 0 | 57 | 0 | 0 | 0 | 0 | | u_scariv_dcache | scariv_dcache | 38785 | 38065 | 720 | 0 | 2459 | 128 | 0 | 0 | 0 | | u_scariv_store_requester | scariv_store_requestor | 1067 | 1067 | 0 | 0 | 1191 | 0 | 0 | 0 | 0 | | u_st_buffer | scariv_st_buffer | 9385 | 9385 | 0 | 0 | 1753 | 0 | 0 | 0 | 0 | | u_stq | scariv_stq | 20883 | 20883 | 0 | 0 | 3631 | 0 | 0 | 0 | 0 |
よく見てみるとSynthesisのオプションでflatten_hierarchy
がrebuild
になっていたので、Noneに再設定して信号がやたらとDupulicateされるのを防いでみる。
| u_lsu_top | scariv_lsu_top | 122264 | 121352 | 912 | 0 | 25489 | 128 | 0 | 0 | 0 | | (u_lsu_top) | scariv_lsu_top | 111 | 111 | 0 | 0 | 5 | 0 | 0 | 0 | 0 | | lsu_loop[0].u_scariv_lsu | scariv_lsu | 9731 | 9635 | 96 | 0 | 4156 | 0 | 0 | 0 | 0 | | lsu_loop[1].u_scariv_lsu | scariv_lsu__parameterized0 | 9413 | 9317 | 96 | 0 | 4124 | 0 | 0 | 0 | 0 | | u_l1d_mshr | scariv_l1d_mshr | 13292 | 13292 | 0 | 0 | 4711 | 0 | 0 | 0 | 0 | | u_ldq | scariv_ldq | 7783 | 7783 | 0 | 0 | 1468 | 0 | 0 | 0 | 0 | | u_lrsc | scariv_lsu_lrsc | 135 | 135 | 0 | 0 | 57 | 0 | 0 | 0 | 0 | | u_scariv_dcache | scariv_dcache | 33997 | 33277 | 720 | 0 | 4525 | 128 | 0 | 0 | 0 | | u_scariv_l2_req_arbiter | l2_if_arbiter | 293 | 293 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | u_scariv_store_requester | scariv_store_requestor | 1075 | 1075 | 0 | 0 | 1197 | 0 | 0 | 0 | 0 | | u_st_buffer | scariv_st_buffer | 13425 | 13425 | 0 | 0 | 1735 | 0 | 0 | 0 | 0 | | u_stq | scariv_stq | 33009 | 33009 | 0 | 0 | 3511 | 0 | 0 | 0 | 0 |
うーん、ネットリストの数だけで言うと多少改善された。次に見えるのはデータキャッシュの付近に見えるパスだな、これはフォワーディングパスも混ざってややこしくなっている。どうにか改善できんかな。