Hi ich habe aktuell ein Problem das ich nicht ganz nachvollziehen kann, da ich das bereits in einem anderen Projekt genau auf die selbe Art gelöst hatte. ich arbeite auf einem Altera NEEK Board und möchte den Altera Avalon Slave nutzen. Hierzu habe ich ein eigene Verilogfile als Altera Avalon Slave eingebunden, mit WRITE,READ,ADDRESS, WRITEDATA und READDATA. vom NIOS C++ in die Verilogfile schreiben funktioniert einwandfrei, nur lesen geht irgendwie nicht :( hier mal mein C++ Code //PICREADANDFIND_0_BASE ist die Base Adresse des eigenen HDL Blockes. #define SCREENSHOT (0x02*4) #define GRAY (0x03*4) #define THRESH (0x04*4) #define READOBJEKTX (0x06*4) #define READOBJEKTY (0x07*4) #define STARTFOUND (0x08*4) #define START (0x09*4) IOWR_32DIRECT(PICREADANDFIND_0_BASE,SCREENSHOT,0x00000001); IOWR_32DIRECT(PICREADANDFIND_0_BASE,GRAY,0x00000001); IOWR_32DIRECT(PICREADANDFIND_0_BASE,THRESH,0x00000001); IOWR_32DIRECT(PICREADANDFIND_0_BASE,START,0x00000001); do{ printf("|"); start_found=IORD_32DIRECT(PICREADANDFIND_0_BASE,STARTFOUND); printf("startfound: %d\n",start_found); //nothing }while(start_found == 0); BildX = IORD_32DIRECT(PICREADANDFIND_0_BASE,READOBJEKTX); BildY = IORD_32DIRECT(PICREADANDFIND_0_BASE,READOBJEKTY); im HDL habe ich in Verilog geschrieben: (alles andere hab ich mal rausgelassen.) module( MYADDR, MYWRITEDATA, MYREADDATA, MYWRITE, MYREAD ); input [7:0] MYADDR; input [31:0] MYWRITEDATA; input MYWRITE; input MYREAD; output reg [31:0] MYREADDATA; parameter RGB_ADDR = 32'h00000001; parameter SCREENSHOT = 32'h00000002; parameter GRAY = 32'h00000003; parameter THRESH = 32'h00000004; parameter READOBJEKTX = 32'h00000006; parameter READOBJEKTY = 32'h00000007; parameter STARTFOUND = 32'h00000008; parameter START = 32'h00000009; always@ (posedge CLK50) begin : AVALON_INTERFACE begin if(MYWRITE == 1'b1) begin case(MYADDR) SCREENSHOT: screenshotreg <= MYWRITEDATA[0]; START: getStart <= MYWRITEDATA[0]; GRAY: Grayreg <= MYWRITEDATA[0]; THRESH: Threshreg <= MYWRITEDATA[0]; default:; endcase end else if((MYREAD == 1'b1) )// && (MYDATAISREADY == 1'b1)) begin case(MYADDR) READOBJEKTX: begin MYREADDATA <= {StartAdressX}; end READOBJEKTY: begin MYREADDATA <= {32'hFFFFFFFF}; end STARTFOUND: begin MYREADDATA <={31'h00,SetStart}; end default: MYREADDATA <= 32'hFFFFFFFF; endcase end was mich so extrem wundert selbst die daten von READOBJEKTY die ja ein fester wert sind werden nicht zugewiesen :( alle anderen Daten werden von einem anderem Block integriert, laut SignalTap sind diese auch korrekt. aber es werden wie gesagt garkeine Daten gelesen! geschrieben werden alle Daten einwandfrei! hat jemand da nen Tipp ??? in der neuen Komponente die ich erstellt habe sind die MYXXX natürlich auch auf die entsprechenden Avalon_Slave gesetzt
Was passiert denn, wenn du den Code ausführst? Bekommst du eine Endlosschleife? Hast du mal das Disassembly angeschaut, ob der Compiler da nicht etwas wegoptimiert? Ist der ReadWait Wert in der Component Description in SOPC Builder korrekt? Funktioniert ein einfaches Register mit lesen und schreiben?
ja er findet nie start found, auch wenn diese gesetzt wurde. jetzt hab ichs hinbekommen das er ließt dafür schreibt er nimmer oder nur noch teilweise ... kapier das problem nicht ... hatte genau das gleiche bereits in einem anderen Projekt gemacht und da lief alles einwandfrei ... konnte lesen UND schreiben ... jetzt gehts nur noch teilweise... aktuell kann ich zumindest den Wert von RGB_ADDR (der steht da nicht drin) wieder auslesen. .. und kann GRAY und THRESH setzt dafür aber kein Screenshot und start mehr -.- kapier das alles net totalverwirrt bin
Ich vermute mal sehr stark, dass Du einfach Avalon-Slave TCL falsch gemacht hast. Also die Timings bzw. wann die DAten übernommen werden. Kontrollier doch mal bitte im SOPC-Builder, was bei dir drin steht (waitstates, ...) Deshalb klappt "WRITE" immer und lesen nicht, oder nur ab und zu. Vermutlich hast Du da zu wenige Waitstates eingefügt. Grüße, Kest
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.