Hallo, ich habe ein Problem und ich finde einfach keine Lösung.
1 | always @(posedge clkin_150) begin |
2 | |
3 | case(state_square) |
4 | |
5 | IDLE: begin |
6 | if(control_go_square_psd==1'b1)begin |
7 | control_done_square_psd_reg<=0; |
8 | state_square <= COPY; |
9 | |
10 | end
|
11 | else begin state_square <= IDLE; end |
12 | end
|
13 | COPY: begin |
14 | for(int j=0;j<process_steps;j=j+1) begin --// copy new psd values to task |
15 | new_psd_reg_task[j]<=psd[steps_offset_square+j]; |
16 | new_psd_reg_task_temp[j]<=psd[steps_offset_square+j]; |
17 | end
|
18 | |
19 | state_square <= COPY_END; |
20 | end
|
21 | COPY_END: begin |
22 | state_square <= SQUARE; |
23 | end
|
24 | |
25 | SQUARE: begin |
26 | |
27 | square(psd,new_psd_reg_task,new_psd_reg_task_temp,tolerance_delta,maxima); // calling task |
28 | |
29 | state_square <= DELAY; |
30 | end
|
31 | |
32 | DELAY: begin |
33 | |
34 | |
35 | state_square <= SQUARE_END; |
36 | end
|
37 | SQUARE_END: begin |
38 | |
39 | for(int i=0;i<process_steps;i=i+1)begin --// save values |
40 | new_psd_reg[steps_offset_square+i]<=new_psd_reg_task[i]; |
41 | end
|
42 | if(steps_offset_square==steps-process_steps) begin -- // last interval was processed |
43 | state_square <= DONE; |
44 | steps_offset_square<=0; |
45 | end
|
46 | else begin |
47 | steps_offset_square<=steps_offset_square+process_steps; --// increase offset |
48 | state_square<=COPY; |
49 | end
|
50 | |
51 | |
52 | end
|
53 | DONE: begin |
54 | control_done_square_psd_reg<=1; |
55 | if(control_go_square_psd==0) begin |
56 | state_square<=IDLE; |
57 | end
|
58 | else begin |
59 | state_square <=DONE; |
60 | end
|
61 | end
|
62 | |
63 | |
64 | |
65 | |
66 | endcase
|
67 | end
|
Ich habe eine Zustandsmaschine die abhängig von der Anzahl der Werte(steps_offset) den Task square aufrufen soll. Nun passiert es aber das nachdem ausführen auf dem FPGA nur der letzte Aufruf des Tasks das richtige Ergebnis bringt. Die anderen Aufrufe werden nicht bearbeitet. Nun frage ich mich warum immer nur der letzte Aufruf bearbeitet wird in der Simulation funktioniert alles einwandfrei. Ich habe auch schon versucht den task auf automatic zu setzen was aber keine Besserung gebracht hat. Liegt es vielleicht an den Zuweisungen in den for - Schleifen und das mir Quartus die vorherigen Aufrufe wegsynthetisiert?