[verilog] vector or verknüpfen

OP #5972398
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
Angehängte Dateien:
Gast #5972449
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.
Gast #5973041
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;
OP #5973186
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
Angehängte Dateien:
Gast #5973342
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
OP #5974818
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren