www.mikrocontroller.net

Forum: FPGA, VHDL & Co. verolog: vergleich auf alle 1


Autor: Daniel (root) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Wenn die Bitbreite variirt dann macht man es in VHDL zb
if sig = (sig'range => '1') then
    --
end if;

Wie kann ich es in Verilog machen?
    parameter WIDTH = 8;
    reg [WIDTH-1:0] sig;

    // in sequentual block
    if(sig == ~0) begin
        //
    end

~ ist Bitweise Negation.
! ist logische Negation.

Also dachte ich ~0 wird soviele 1 erzeugen wieviel der andere
Operand benötigt .. scheint aber nicht so zu sein, denn
in der Simulation mit Modelsim wird der in if-statement
anvisierte Zustandsübergang nicht gemacht.

Vollständigkeithalber folgt der Testcode
  localparam idle = 3'b000;
  localparam start = 3'b001;
  localparam work1 = 3'b010;
  localparam work2 = 3'b011;
  localparam stop = 3'b100;
  reg [2:0] state = idle;
  
  reg [2:0] cnt = 0;
  
  always @(posedge clk) begin
    case(state)
      idle : begin
        if(x)
          state <= start;
      end
      start : begin
        if(y)
          state <= work1;
      end
      work1 : begin
        if(z)
          cnt <= cnt + 1;
        if(cnt == 7) begin
          cnt <= 0;
          state <= work2;
        end
      end
      work2: begin
        if(z)
          cnt <= cnt + 1;
        if(cnt == ~0) begin
          cnt <= 0;
          state <= stop;
        end
      end
      stop : begin
        state <= idle;
      end
    endcase
  end
  
  assign a = (state == start) ? 1'b1 : 1'b0;
  assign b = (state == work1 || state == work2) ? 1'b1 : 1'b0;
  assign c = (state == stop) ? 1 : 0;


Autor: bko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
z.B. so:

[verilog]
if(sig == {8{1'b1}} ) begin
[/verilog]

irgendwie werden meine geschweiften Klammern in der Vorschau
eckig, also nochmal so dargestellt:

Autor: Uwe Bonnes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Z.b. mit bitweisen UND
[verilog]
if (&sig)
[/verilog]

Autor: Daniel (root) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, werde direkt ausprobieren ;-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.