Ich habe einen ADC, bei dem ich ihm 20 Taktimpulse senden muss, wenn ich Daten aus seinem internen Register lesen möchte (nachdem ich ihn ausgelöst habe, um Daten von meinem Sensor zu lesen).
Ich konnte dies in ModelSim gut simulieren, aber ich bin neu bei Verilog und wusste nicht, dass ich während der Synthese auf Probleme stoßen würde, wenn ich die Impulsfolge wie folgt erstelle:
reg [4:0] counter = 5'b10100;
parameter counter = 0;
always (posedge clk and negedge clk)
begin
if (counter > 0)
begin
counter <= counter - 1;
serial_out <= ~serial_out;
end
end
Ich habe versucht, dies in 2 Always-Blöcke aufzuteilen: einen, der serial_out bei einem Posedge-Clk auf 1 setzt, und einen anderen, der Serial_out während eines Negedge-Clk auf 0 setzt, wobei beide prüfen, ob der Zähler größer als 0 ist. Das ist problematisch, weil ich versuche zu fahren Zähler an zwei Stellen und erhalte Fehlermeldungen, die besagen, dass mehrere Konstantentreiber für Netzzähler nicht aufgelöst werden können.
Vielleicht gibt es einen besseren Weg, dies zu tun?
Ich habe einige Posts gesehen, die vorschlagen, die clk-Frequenz zu verdoppeln, um die Daten von der Position der Uhr abzulesen. Dies würde funktionieren, aber ich muss den Takt auf 30 MHz halten (kann aus anderen Gründen nicht auf 60 MHz gehen).
Wie würden Sie vorschlagen, dass ich 20 Impulse meines immer eingeschalteten periodischen 30-MHz-Eingangstakts bedingt an einen Ausgangspin weiterleite / repliziere?
Jede Hilfe wird sehr geschätzt.
Ich würde vorschlagen, ein Ausgabe-DDR-Flip-Flop zu verwenden. Wie Sie das implementieren, hängt davon ab, welches FPGA Sie verwenden. Für Xilinx wäre es ein ODDR- oder ODDR2-Grundelement. Für Altera ist es ALTDDIO_OUT.
'1'
sollen High-Übergang und '0'
nach einem High→Low-Übergang).
Alter Furz
Reacher33