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


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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.