Gast
#1618861
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