Hallo,
ich habe folgendes Problem: Ich versuche PWM-Werte aus den always
Blöcken den jeweiligen Outputs MTRR_P usw. mit innerhalb der
Bedingungsoperatoren zuzuweisen. Jedoch erhalte ich laut der Simulation
dauernd eine 1 an jedem Ausgang.
Wo kann der Fehler liegen?
Schätze CNT1 und 2 werden nie anders als xxxx oder so..
Register entweder so initialisieren:
--
reg [15:0] CNT1 = 0;
--
Oder syncron oder asyncron resetten:
--
always @ ( posedge CLK_50 [or posedge reset]) begin
if (reset) then
NT1 <= 0;
else
CNT1 <= CNT1 + 1;
if (CNT1 > 16'h64 ) PWM_O_R <= 0;
else PWM_O_R <= 1;
end
--
Und/Oder der Takt lebt nicht, weil 1 ja für die "niedrigen" Zählerstände
gilt.
Zum ternären Operator kann man ja stehen wie man will, aber das hier ist
schon fast geeignet als Scherzfrage im Vorstellungsgespräch:
assign MTRL_N = (!1)?1: ((0)?0 : PWM_O_L);
Bernhard K. schrieb:> Schätze CNT1 und 2 werden nie anders als xxxx oder so..
Dann schätz mal weiter. Das Ding ist, dass die always Blöcke schon
getrennt getestet wurden und beide erwartungsgemäß funktionieren ;)
Solltest wohl lieber bei einem Schätzspiel mitmachen
Robert P. schrieb:> Zum ternären Operator kann man ja stehen wie man will, aber das hier ist> schon fast geeignet als Scherzfrage im Vorstellungsgespräch:>> assign MTRL_N = (!1)?1: ((0)?0 : PWM_O_L);
Dafür, dass du anscheinend nicht wirklich viel Ahnung hast, nimmst du
den Mund ganz schön voll
@Bernhard K
ich möchte mich für meine Aussage gegenüber dir entschuldigen. Ich hatte
übersehen, dass zwei verschiedene Personen geantwortet haben. Dachte du
bist dieser Robert P. mit seiner dummen Aussage.
Ich danke dir für dein Tipp. Werde ich ausprobieren
Robert P. schrieb:> assign MTRL_N = (!1)?1: ((0)?0 : PWM_O_L);
Ich arbeite noch nicht so wirlich lange mit Verilog, aber dieses
Statement hat mich jetzt auch überrascht. Kann das jemand erklären?
Vancouver schrieb:> Robert P. schrieb:>> assign MTRL_N = (!1)?1: ((0)?0 : PWM_O_L);>> Ich arbeite noch nicht so wirlich lange mit Verilog, aber dieses> Statement hat mich jetzt auch überrascht. Kann das jemand erklären?
Es weist PWM_O_L an MTRL_N zu, IMMER.
Vancouver schrieb:> So hätte ich das auch interpretiert, aber warum tut man das auf diese> Weise?
Ach das ergibt sich manchmal so.
Wenn ursprünglich eine Bedingung da war, die man nicht mehr will, aber
nicht sicher ist ob man sie dann doch wieder will.
Das ganze wird sowieso weg optimiert, insofern einfach Faulheit des
Autor, es so stehen zu lassen.
Ah, ok. Ich dachte es gäbe da noch eine Besonderheit, die ich nicht
kenne.
Ich hätte für die Conditions symbolische Namen eingesetzt und die auf
einen festen Wert geklemmt, oder das ganze Statement auskommentiert
stehen gelassen.
Danke.
In den Bedingungsoperatoren waren selbstverständlich Input als Bedingung
angeklemmt worden. Ich habe den Bedingungen erstmal durch feste Zahlen
ersetzt, um die Abfragen zu überprüfen.
Ja, und diesen sinnlosen Kram stelle ich dann auch unbedingt in ein
Forum von dem ich Hilfe erwarte...
Etwa die Hälfte des Codes besteht daraus!
Mag dir klar sein, aber sicher nicht jedem auf den ersten Blick der das
ankuckt um zu helfen.
Im übrigen lag Berhnhard völlig richtig, es fehlt nur der init Wert,
weil sonst auf X gewechselt wird beim ersten Hochzählen.
Mit Init Wert läuft alles, siehe Anhang.