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.
von Marco S. (masterof)


Angehängte Dateien:

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:
1
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:
1
module pptlogik (   output      out,
2
        
3
  output          tx_clk_out,
4
  output          tx_frame_out,
5
  output  [11:0]  tx_data_out,
6
        
7
  input          tx_clk_in,
8
  input          tx_frame_in,
9
         input  [11:0]  tx_data_in);
10
  
11
  always @(posedge tx_clk_in)
12
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];
13
  
14
  assign tx_clk_out = tx_clk_in;
15
  
16
  assign tx_frame_out = tx_frame_in;
17
  assign tx_data_out = tx_data_in;
18
19
endmodule

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

Gruß Marco

von Klakx (Gast)


Lesenswert?

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

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

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

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

Das geht im Zusammenhang mit assign nicht.

von Andi (Gast)


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:
1
module pptlogik (   output reg   out,
2
...
und vereinfachst die OR Verknüpfung zu:
1
always @(posedge tx_clk_in)
2
   out <= |tx_data_in;

von Marco S. (masterof)


Angehängte Dateien:

Lesenswert?

Andi schrieb:
[..]
> Am einfachsten deklarierst du das out als register:
>
1
> module pptlogik (   output reg   out,
2
> ...
3
>
> und vereinfachst die OR Verknüpfung zu:
>
1
> always @(posedge tx_clk_in)
2
>    out <= |tx_data_in;
3
>
 Schon mal vielen Dank für die Hilfe.
Jetzt läuft er deutlich weiter aber steigt noch immer mit einer 
Fehlermeldung aus. :(
1
 
2
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 
3
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 
4
ERROR: [Vivado_Tcl 4-23] Error(s) found during DRC. Placer not run.
5
ERROR: [Common 17-39] 'place_design' failed due to earlier errors.
6
ERROR: [Common 17-69] Command failed: Run 'impl_1' failed. Unable to open

Gruß Marco

von Andi (Gast)


Lesenswert?

Versuch es mal so:
1
module pptlogik (
2
  output          out,
3
  output          tx_clk_out,
4
  output          tx_frame_out,
5
  output  [11:0]  tx_data_out,
6
        
7
  input          tx_clk_in,
8
  input          tx_frame_in,
9
  input  [11:0]  tx_data_in
10
  );
11
12
  reg  orrg;
13
  
14
  always @(posedge tx_clk_in)
15
    orrg <= |tx_data_in;
16
  
17
  assign out = orrg;
18
  assign tx_clk_out = tx_clk_in;
19
  
20
  assign tx_frame_out = tx_frame_in;
21
  assign tx_data_out = tx_data_in;
22
23
endmodule

von Marco S. (masterof)


Lesenswert?

leider auch nur die selbe Fehlermeldung:
1
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 
2
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]
  • [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.