Hallo zusammen,
Ich habe folgenden Code zurecht gebastelt, um abwechselnd in zwei
FiFo_Speicher zu schreiben. Nun sagt mir die ISE 10.1, dass die wait
Anweisung innerhalb des Prozesses nicht synthetisierbar ist.
Im Buch VHDL-Synthese hies es nur "die Synthese von Prozessen mit dem
while konstrukt" sei "noch nicht einheitlich implementiert".
Hat jemand nen Denk Anstoß für mich wie ich die while Schleife umgehen
kann? Hab da grad irgendwie ne Denk-Blockade ... denk glaub ich ohnehin
noch zu nahe an einer Hochsprache orientiert.
Meine vhdl source dazu:
1 | CWRSLCT_proc : process
|
2 | begin
|
3 | wait until (rising_edge(WR_Clk));
|
4 | if ((FFlag_A0 = '0') and (RDC_active_A0 = '0')) then
|
5 | while (FFlag_A0 = '0') loop
|
6 | WRC_active_A0 <= '1';
|
7 | WRC_active_A1 <= '0';
|
8 | FIFOWR_ERR <= '0';
|
9 | DIN_A0 <= DIN;
|
10 | DIN_A1 <= (others => '0');
|
11 | WR_EN_A0 <= WR_EN;
|
12 | WR_EN_A1 <= '0';
|
13 | wait until (rising_edge(WR_Clk)); -- not accepted!?
|
14 | end loop;
|
15 | WRC_active_A0 <= '0';
|
16 | WRC_active_A1 <= '0';
|
17 | elsif ((FFlag_A1 = '0') and (RDC_active_A1 = '0')) then
|
18 | while (FFlag_A1 = '0') loop
|
19 | WRC_active_A0 <= '0';
|
20 | WRC_active_A1 <= '1';
|
21 | FIFOWR_ERR <= '0';
|
22 | DIN_A0 <= (others => '0');
|
23 | DIN_A1 <= DIN;
|
24 | WR_EN_A0 <= '0';
|
25 | WR_EN_A1 <= WR_EN;
|
26 | wait until (rising_edge(WR_Clk));
|
27 | end loop;
|
28 | WRC_active_A0 <= '0';
|
29 | WRC_active_A1 <= '0';
|
30 | else
|
31 | WRC_active_A0 <= '0';
|
32 | WRC_active_A1 <= '0';
|
33 | FIFOWR_ERR <= '1';
|
34 | DIN_A0 <= (others => '0');
|
35 | DIN_A1 <= (others => '0');
|
36 | WR_EN_A0 <= '0';
|
37 | WR_EN_A1 <= '0';
|
38 | end if;
|
39 | end process CWRSLCT_proc;
|
Gruß und Dank,
Stefan