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 h00BBAAAAfin: 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 seinallerdings 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' thenram(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