• H
    Sync timing modification of #1681 and #1793 (#1793) · 03efd994
    happy-lx 提交于
    * ldu: optimize dcache hitvec wiring
    
    In previous design, hitvec is generated in load s1, then send to dcache
    and lsu (rs) side separately. As dcache and lsu (rs side) is far in real
    chip, it caused severe wiring problem.
    
    Now we generate 2 hitvec in parallel:
    
    * hitvec 1 is generated near dcache.
    To generate that signal, paddr from dtlb is sent to dcache in load_s1
    to geerate hitvec. The hitvec is then sent to dcache to generate
    data array read_way_en.
    
    * hitvec 2 is generated near lsu and rs in load_s2, tag read result
    from dcache, as well as coh_state, is sent to lsu in load_s1,
    then it is used to calcuate hitvec in load_s2.  hitvec 2 is used
    to generate hit/miss signal used by lsu.
    
    It should fix the wiring problem caused by hitvec
    
    * ldu: opt loadViolationQuery.resp.ready timing
    
    An extra release addr register is added near lsu to speed up the
    generation of loadViolationQuery.resp.ready
    
    * l1tlb: replace NormalPage data module and add duplicate resp result
    
    data module:
    add BankedSyncDataMoudleWithDup data module:
    divided the data array into banks and read as Async, bypass write data.
    RegNext the data result * #banks. choose from the chosen data.
    
    duplicate:
    duplicate the chosen data and return to outside(tlb).
    tlb return (ppn+perm) * #DUP to outside (for load unit only)
    
    TODO: load unit use different tlb resp result to different module.
    one for lsq, one for dcache.
    
    * l1tlb: Fix wrong vidx_bypass logic after using duplicate data module
    
    We use BankedSyncDataMoudleWithDup instead of SyncDataModuleTemplate,
    whose write ports are not Vec.
    Co-authored-by: NWilliam Wang <zeweiwang@outlook.com>
    Co-authored-by: NZhangZifei <1773908404@qq.com>
    Co-authored-by: Ngood-circle <fenghaoyuan19@mails.ucas.ac.cn>
    03efd994
ICacheMainPipe.scala 30.7 KB