mikrocontroller.net

Forum: FPGA, VHDL & Co. [verilog] vector or verknüpfen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Marco S. (masterof)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Ich will für den Analog Device Pluto, den TX-Datenbus alle Leitungen 
miteinander OR-Verknüpfen und das Ergebnis an einen extra Pin ausgeben.
Meine HDL-Kentnisse sind sehr gering. Den Verilog-Artikel habe ich mir 
schon zu gemüte geführt.
Die Buildumgebung läuft, jetzt hänge ich an dem Verilog-Code und zwar 
dass der Verilog-Code ohne Fehler synthetisiert wird.

Die Fehlermeldung lautet:
ERROR: [Synth 8-2576] procedural assignment to a non-register out is not permitted [/home/marco/plutosdr-fw/hdl/projects/pluto/system_top.v:49]
Das gesamte Modul:
module pptlogik (   output      out,
        
  output          tx_clk_out,
  output          tx_frame_out,
  output  [11:0]  tx_data_out,
        
  input          tx_clk_in,
  input          tx_frame_in,
         input  [11:0]  tx_data_in);
  
  always @(posedge tx_clk_in)
ERROR:    assign out = tx_data_in[0]|tx_data_in[1]|tx_data_in[2]|tx_data_in[3]|tx_data_in[4]|tx_data_in[5]|tx_data_in[6]|tx_data_in[7]|tx_data_in[8]|tx_data_in[9]|tx_data_in[10]|tx_data_in[11];
  
  assign tx_clk_out = tx_clk_in;
  
  assign tx_frame_out = tx_frame_in;
  assign tx_data_out = tx_data_in;

endmodule

Im Anhang ist auch die gesamte Verloig-Code in dem das Modul eingebunden 
ist.

Gruß Marco

Autor: Klakx (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
relativ umständlich die OR-Verknüpfung bei dir. Mach einfach:
assign out <= |tx_data_in;

je nach compiler müsste  man "out" noch als reg definieren und die '<=' 
Zuweisung hätte ich hier genommen.

Autor: Marcus H. (mharnisch) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klakx schrieb:
> die '<=' Zuweisung hätte ich hier genommen.

Das geht im Zusammenhang mit assign nicht.

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
assign ist da wo der Error auftritt sowieso falsch.
assign wird verwendet für kombinatorische Logik, also nicht getaktete 
Verknüpfungen.

Innerhalb eines synchronen Prozesses mit always @(posedge ...) werden 
Zuweisungen einfach mit:
reg <= x | y;
gemacht.

Dazu benötigt man aber ein Register als Ziel, wie die Fehlermeldung ja 
auch moniert.

Am einfachsten deklarierst du das out als register:
module pptlogik (   output reg   out,
...
und vereinfachst die OR Verknüpfung zu:
always @(posedge tx_clk_in)
   out <= |tx_data_in;

Autor: Marco S. (masterof)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Andi schrieb:
[..]
> Am einfachsten deklarierst du das out als register:
>
> module pptlogik (   output reg   out,
> ...
> 
> und vereinfachst die OR Verknüpfung zu:
>
> always @(posedge tx_clk_in)
>    out <= |tx_data_in;
> 
 Schon mal vielen Dank für die Hilfe.
Jetzt läuft er deutlich weiter aber steigt noch immer mit einer 
Fehlermeldung aus. :(
 
ERROR: [DRC REQP-127] obuf_loaded: OBUF i_system_wrapper/system_i/axi_ad9361/inst/i_dev_if/i_tx_clk/i_tx_data_obuf pin O drives one or more invalid loads. The loads are: pptlogik/out_reg 
ERROR: [DRC REQP-127] obuf_loaded: OBUF i_system_wrapper/system_i/axi_ad9361/inst/i_dev_if/i_tx_frame/i_tx_data_obuf pin O drives one or more invalid loads. The loads are: pptlogik/out_reg 
ERROR: [Vivado_Tcl 4-23] Error(s) found during DRC. Placer not run.
ERROR: [Common 17-39] 'place_design' failed due to earlier errors.
ERROR: [Common 17-69] Command failed: Run 'impl_1' failed. Unable to open

Gruß Marco

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuch es mal so:
module pptlogik (
  output          out,
  output          tx_clk_out,
  output          tx_frame_out,
  output  [11:0]  tx_data_out,
        
  input          tx_clk_in,
  input          tx_frame_in,
  input  [11:0]  tx_data_in
  );

  reg  orrg;
  
  always @(posedge tx_clk_in)
    orrg <= |tx_data_in;
  
  assign out = orrg;
  assign tx_clk_out = tx_clk_in;
  
  assign tx_frame_out = tx_frame_in;
  assign tx_data_out = tx_data_in;

endmodule


Autor: Marco S. (masterof)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
leider auch nur die selbe Fehlermeldung:
ERROR: [DRC REQP-127] obuf_loaded: OBUF i_system_wrapper/system_i/axi_ad9361/inst/i_dev_if/i_tx_clk/i_tx_data_obuf pin O drives one or more invalid loads. The loads are: pptlogik/orrg_reg 
ERROR: [DRC REQP-127] obuf_loaded: OBUF i_system_wrapper/system_i/axi_ad9361/inst/i_dev_if/i_tx_frame/i_tx_data_obuf pin O drives one or more invalid loads. The loads are: pptlogik/orrg_reg 

Gruß Marco

EDIT: falsche Ausgabe gepostet gehabt.

: Bearbeitet durch User

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.

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