Register Wert einem Wire zuweisen in Verilog

Gast #6013027
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?
1
module PWM  (
2
input        CLK_50, 
3

4
output       MTR_Sleep_n,
5

6
  output MTRL_P,
7
  output MTRL_N,
8
  output MTRR_N,
9
  output MTRR_P
10

11
);
12

13
reg   PWM_O_R ; 
14
reg  PWM_O_L ;
15

16
reg [15:0] CNT1 ; 
17
reg [15:0] CNT2 ; 
18

19

20
assign MTR_Sleep_n = 1'b1;
21

22

23
//----     
24
//L_EMOTOR 
25
assign   MTRL_N = (!1)?1:  ((0)?0   : PWM_O_L); 
26
assign   MTRL_P = (!1)?1:  ((0)?PWM_O_L : 0  ); 
27
//R_EMOTOR          
28
assign   MTRR_P = (!1)?0:  ((0)?0  : PWM_O_R ); 
29
assign   MTRR_N = (!1)?1:  ((0)?PWM_O_R: 0   ); 
30

31
//assign   MTRL_N = ~1?1:  ((1)?0   : 1); 
32
//assign   MTRL_P = (~1)?0:  ((0)?1 : 0  ); 
33
////R_EMOTOR          
34
//assign   MTRR_P = ~1?0:  ((0)?0  : 1 ); 
35
//assign   MTRR_N = ~1?1:  ((0)?1: 0   ); 
36

37
//assign   MTRL_N = (!1)?1: 0; 
38
//assign   MTRL_P = (1)?0:1; 
39
////R_EMOTOR          
40
//assign   MTRR_P = !1?0:1; 
41
//assign   MTRR_N = 1?1:0; 
42

43

44
always @ ( posedge CLK_50 ) begin 
45
    CNT1 <=  CNT1 + 1;  
46
   if (CNT1 > 16'h64 )  PWM_O_R <= 0; 
47
    else  PWM_O_R <= 1;  
48
end 
49

50
always @ ( posedge CLK_50 ) begin 
51
    CNT2 <=  CNT2 + 1;  
52
   if (CNT2 > 16'h64 )  PWM_O_L <= 0; 
53
    else  PWM_O_L <= 1;  
54
end 
55

56
endmodule
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
--
Gast
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
Gast
@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
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.
Gast
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.
Gast
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.
Persönliche Seite
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.
Angehängte Dateien:

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 7 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.