Lothar hat da durchaus recht: Nicht jedes Konstrukt, was Verilog oder
VHDL zulässt, kann der Synthesizer in Hardware umsetzen. Gerade bei
FlipFlops gibt es eine Syntax, die einzuhalten ist, damit eben dieser
Typ FF entsteht. Einer davon ist das D-FlipFlop mit asynchronem Reset.
(Siehe auch hier: http://www.asic-world.com/examples/verilog/d_ff.html)
1 | always @ ( posedge clk or negedge reset)
|
2 | if (~reset) begin
|
3 | q <= 1'b0;
|
4 | end else begin
|
5 | q <= data;
|
6 | end
|
Das FF ist asynchron, weil der Reset auch in der Sensitivitätsliste
auftaucht. Und als erstes wird Reset geprüft, und das eigentliche FF im
else-Zweig verarbeitet. Dafür gibt es auch andere Schreibweisen, die das
gleiche FF erzeugen, aber die hier ist verbreitet und schnell lesbar.
In deinem Fall sagt die Sensitivitätsliste, dass du auf clk und ss
reagieren willst. Es soll also ein D-FF mit async. Reset erzeugt werden.
Aber du fragst nicht das Resetsignal 'ss' ab, sondern 'if (rst) begin'.
Das kann der Synthesizer nicht in ein ihm passendes FF umsetzen.
Tipp: Zeichne dir das FF als Symbol mit allen Leitungen auf, evtl. noch
die Wahrheitstabelle dazu. Das hilft evtl. den Fehler zu sehen.