LOGIN   :::   RECOVER PASS   :::   GET ACCOUNT    
Browse
  • Projects
  • Code (CVS)
  • Forums
  • News
  • Articles
  • Polls
  •  
    OpenCores
  • FAQ
  • CVS HowTo
  • Mission
  • Media
  • Tools
  • Advertise
  • Mirrors
  • Logos
  • Contact us
  • Find Resources
  • Job Opportunity
  •  
    Tools
  • Search
      
  • Download Cores (CVSGet)
  •  
    More
  • Wishbone
  • Perlilog
  • EDA tools
  • OpenTech CD
  •  
    Navigation: All forums > Openrisc > Message List > Message Post

    Message

    Reply | Reply all
    Date Prev | Date Next | Thread Prev | Thread Next Date Index | Thread Index

    From: "Damjan Lampret" <lampret@o...>
    Date: Wed, 12 Nov 2003 14:34:49 +0100
    Subject: Re: [openrisc]
    Top

    Thanks. I'll look at these and if it has any implications for the other
    configurations. I'm thinking to reduce number of configurations as it seems
    there is always a leak in one of the configuration. Fix one bug and it works
    for most but opens an bug in an completely third configuration. I'm working
    to have a better set of test cases covering more configurations but maybe
    the quick way to reduce amount of configurability, at least temporarily.
    
    regards,
    Damjan
    
    ----- Original Message ----- 
    From: "Ian Buckley" <ibuckley@r...>
    To: <openrisc@o...>
    Sent: Wednesday, November 12, 2003 1:47 AM
    Subject: [openrisc]
    
    
    I ran into problems with the OR1200 data cache last week where an
    illegal Wishbone
    bus transaction locked up my memory controller design. I traced the
    problem to a bus
    cycle that had no SEL_O bits asserted, and hence to the data cache where
    I believe I
    found the problem.
    In file or1200_dc_top.v the line:
    
    assign dcsb_sel_o = (dc_en & dcfsm_biu_read & !dcfsm_biu_write &
    !dcdmmu_ci_i ) ? 4'b1111 : dcpu_sel_i;
    
    causes the first DWORD fetched as part of a line refill to use 4'b1111
    as SEL_O but afterwards on subsequent fetches
    to complete the line refill, state changes in the CPU cause spurious bus
    value changes in the DMMU which can
    (should you happen to have them as part of the dcache_inhibit logic
    defined in or1200_config.v) cause incorrect
    values (i.e NOT 4'b1111) as the SEL_O for these transactions.
    
    For reference I fixed the problem for our specific configuration and
    application as follows:
    I brought the 'cache_inhibit' signal up through the hierarchy from
    or1200_dc_fsm.v into
    or1200_dc_top.v and modified the offending line as shown:
    
    assign dcsb_sel_o = (dc_en & dcfsm_biu_read & !dcfsm_biu_write &
    !cache_inhibit) ? 4'b1111 : dcpu_sel_i;
    
    For reference we had the following definition for data cachability in
    or1200_defines.v when this cropped up:
    
    `define OR1200_DMMU_CI ~((dcpu_adr_i[31:28] == 4'b1111) ||
    (dcpu_adr_i[31:28] == 4'b0000))
    
    Whilst so far my fix has verified and held solid, I have not thought it
    through for other possible OR1200 configurations,
    Ian
    
    
    Ian Buckley, Architect, Rosum.
    ibuckley@r... <mailto:ibuckley@r...> , (408) 412 4012
    
    
    
    
    

    ReferenceAuthor
    [openrisc]Ian Buckley

     
    Copyright (c) 1999 OPENCORES.ORG. All rights reserved.