[CALU] stb bug

  • From: Martin Elshuber <e9825286@xxxxxxxxxxxxxxxxxxxx>
  • To: calu-ss2010-tuwien@xxxxxxxxxxxxx
  • Date: Tue, 25 May 2010 07:14:29 +0200

folgendes programm liefert falsche ergebnisse:
es scheint das beim stb immer das high und das low byte beschrieben wird

modelsim liefert folgendes (siehe kommentare)
------------------------------------------------------------
       ldc r0,hAA
       ldc r1,hBB
       xor r2,r2,r2

       stb r2+0,r0             ; schreibe ein hAA auf @0
       stb r2+1,r1             ; schreibe ein hBB auf @0
       st  r2+4,r2             ; lösche @4 (DWORD)

       ldw r3,r2+0             ; r3 should be h0000BBAA but is h0000BBBB
       ldb r4,r2+0             ; r4 should be h000000AA but is h000000BB
       ldb r5,r2+1             ; r5 should be h000000BB and is correct

       stb r2+4,r0             ; schreibe hAA auf @4
       ld  r6,r2+4             ; r6 should be h000000AA but is h0000AAAA
       stw r2+6,r1             ; schreibe h00BB auf @6
       ld  r7,r2+4             ; r7 should be h00BB00AA but is h00BBAAAA

fin: bp fin ------------------------------------------------------------
binsim ergebniss (das passt)
r0=000000aa
r1=000000bb
r2=00000000
r3=0000bbaa
r4=000000aa
r5=000000bb
r6=000000aa
r7=00bb00aa

weitere recherche hat folgendes ergeben:
die signale von sram_arch scheinen korrekt zu sein
allerdings denke ich das sram_sim nur ganze wörter schreiben kann, war hat das gemacht, oder wurde das aus dem jop projekt übernommen?
im 'io' process gibt es nur einen schreibe befehl auf die daten
 ram(to_integer(unsigned(addr))) <= data;
und der schreibt beide bytes.

wenn das ding aus dem jop project übernommen wurde, dann stellt sich die frage ob das sram byte access überhaupt kann? wenn das ding eine eigene creation ist bitte ich den jenigen das problem zu beheben?
vorschlag

------------------------------------------------------------
 for i in nbe'range loop
   if nbe(i)='0' then
ram(to_integer(unsigned(addr)))(8*i+7 downto 8*i) <= data(8*i+7 downto 8*i); end if;
 end loop;
------------------------------------------------------------
anstatt
------------------------------------------------------------
 ram(to_integer(unsigned(addr))) <= data;
------------------------------------------------------------

lg martin


Other related posts:

  • » [CALU] stb bug - Martin Elshuber