1 | if (State_counter=8) then
|
FSM werden in VHDL aber anders gemacht...
Hier sind ein paar Latches:
1 | if (SPI_EN='0') then
|
2 | State_counter<=0;
|
3 | Adr_Ready<='0';
|
4 | Data_Ready<='0';
|
5 | Adr_Data_Out<=x"00";
|
6 | SPI_Data_OUT <=x"00000000";
|
7 | CRC_Data<=x"0000000000";
|
8 | end if;
|
Oder doch nicht? Du hast mich jetzt genauso durcheinander gebracht wie
den Synthesizer. Das hier ist z.B. ziemlich, naja, unüblich:
1 | process(CLK,SPI_EN,State_counter,Data_buffer)
|
2 | begin
|
3 | if(CLK'event and CLK='1') then
|
4 | if (SPI_EN='1') then -- was sollte SPI_EN denn sonst sein ausser '0'
|
5 | :
|
6 | end if;
|
7 | end if;
|
8 |
|
9 | if (SPI_EN='0') then -- ein Wolf im Schafspelz: der Reset hat einen anderem Namen bkommen
|
10 | :
|
11 | end if;
|
12 |
|
13 | end process;
|
Bitte integer Bereiche sinnvoll einschränken. Sonst findest du einen
Überlauf hier nie:
1 | signal State_counter : integer := 0;
|
Und der ist auch nicht schlecht:
Da wird ein Zustand zugewiesen, der aber sonst nirgends auftaucht...
Und deine Idents bringen mich ganz durcheinander:
1 | if ((State_counter=12))then
|
2 | Spi_MISO_En<='0';
|
3 | State_counter<=13;
|
4 | end if;
|
Das end if hier gehört m.E. zwei Leerzeichen Richtugn Zeilenanfang, denn
es gehört zum if und schließt dieses gleichberechtigt ab.
Ich würde sagen, dass dich der Synthesizer mit seiner Warnung einfach
darauf hinweist, dass du mal die Synthese-Guidelines (das Handbuch zum
Synthesizer) mal genauer anschauen solltest...