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, 22 Oct 2003 16:03:30 +0200
    Subject: Re: [openrisc] OR1200 store instruction bug?
    Top

    So when you got the "unexpected" result you store data 0x2 to location 0x2
    with l.sw? Now that is again unaligned access.
    
    This is unaligned access:
    > l.addi r1,r0,0x0002
    > l.sw 0(r1),r1
    
    regards,
    Damjan
    
    ----- Original Message ----- 
    From: <lzg@g...>
    To: <openrisc@o...>
    Sent: Wednesday, October 22, 2003 3:26 PM
    Subject: Re: [openrisc] OR1200 store instruction bug?
    
    
    > I got the same unexpected result in modelsim.
    > Here is a part of my testbench:
    >
    > reg[31:0] mem;
    > always @(iwb_adr_o)
    > begin
    > case(iwb_adr_o)
    > 32'h00000100:mem=32'h9c200002;//l.addi
    > r1,r0,0x0002
    > 32'h00000104:mem=32'hd4010800;//l.sw 0
    > (r1),r1 (l.sw not l.sh)
    > endcase
    > end
    > always @(iwb_stb_o)
    > begin
    > if(iwb_stb_o)
    > begin
    > iwb_ack_i<=#1 1;
    > iwb_dat_i<=#1 mem;
    > end
    > else
    > begin
    > iwb_ack_i<=#1 0;
    > iwb_dat_i<=#1 iwb_dat_i;
    > end
    > end
    >
    > The result is 0x00020002 on dwb_dat_o,and 0000 on dwb_sel_o.
    > But when I change to:
    > 32'h00000100:mem=32'h9c200010;//l.addi
    > r1,r0,0x0004
    > 32'h00000104:mem=32'hd4010800;//l.sw 0
    > (r1),r1
    > The result is as I expected:
    > 0x00000004 on dwb_dat_o,and 1111 on dwb_sel_o.
    > The following got wrong result when I changed:
    > l.addi r1,r0,0x0001
    > l.addi r1,r0,0x0002
    > l.addi r1,r0,0x0003
    > l.addi r1,r0,0x0005
    > l.addi r1,r0,0x0006
    > l.addi r1,r0,0x0007
    > l.addi r1,r0,0x0008
    > l.addi r1,r0,0x0009
    >
    > And others got the correct result,such as:
    > l.addi r1,r0,0x0010
    > l.addi r1,r0,0x0011
    > ..
    > l.addi r1,r0,0x1234
    > ..
    > It made me puzzled.I do not know where I am wrong.
    >
    > Regards
    >
    >
    >
    > ----- Original Message ----- 
    > From: "Damjan Lampret" <lampret@o... >
    > To: <openrisc@o... >
    > Date: Wed, 22 Oct 2003 12:52:59 +0200
    > Subject: Re: [openrisc] OR1200 store instruction bug?
    >
    > >
    > >
    > > Ups yes that explains it. Many RISC architectures today only allow
    > > aligned
    > > accesses including or1k. Compiler will always generate aligned
    > > accesses. You
    > > (the assembly programmer) should also.
    > >
    > > regards,
    > > Damjan
    > >
    > > ----- Original Message ----- 
    > > From: "Marko Mlinar" <markom@o... >
    > > To: <openrisc@o... >
    > > Sent: Wednesday, October 22, 2003 12:02 PM
    > > Subject: Re: [openrisc] OR1200 store instruction bug?
    > >
    > >
    > > > Note that you are doing word access to unaligned location. It
    > > depends on
    > > your
    > > > memory controller what will actually happen.
    > > > Usually you would get e.g. 0x02020202, if you byte access to
    > > one location.
    > > >
    > > > Marko
    > > >
    > > > On Wednesday 22 October 2003 09:41, lzg@g...  wrote:
    > > > > Hi all,
    > > > > I had the RTL test of l.sw instruction with Active
    > > HDL6.1.
    > > > > But found the output was not as I expect.
    > > > > The simple asm program is the following.
    > > > >        l.addi r1,r0,0x0001
    > > > >        l.addi r2,r0,0x0002
    > > > >        l.sw 0(r1),r2
    > > > > and the binary code is
    > > > > 9c200001
    > > > > 9c400002
    > > > > d4011000
    > > > > I think that waveform shows 0x00000001 on dwb_adr_o,and
    > > 0x00000002
    > > > > on dwb_dat_o.
    > > > > But In fact the waveform shows 0x00000001 on
    > > dwb_adr_o,and
    > > > > 0x00020002 on dwb_dat_o(not 0x00000002).
    > > > > I am puzzled.Is it a bug?l.sh,l.sb have the similar
    > > question!
    > > > >
    > > > > Regards
    > > >
    > > >
    > > >
    > >
    > 
    
    
    
    

    ReferenceAuthor
    Re: [openrisc] OR1200 store instruction bug?Lzg

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