mikrocontroller.net

Forum: FPGA, VHDL & Co. Verilog Bits umkopieren


Autor: Jonas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bin Anfänger in Sachen Verilog:

Ich habe ein
reg [20:0) x   und ein
reg [10:0] y   .

Ich will, dass Bit 11, 12, ...,21 in das reg y gepeichert werden.

Wie geht das am einfachsten?

Danke,
Jonas

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich will, dass Bit 11, 12, ...,21 in das reg y gepeichert werden.

Du hast x so deklariert, dass dessen Bits nur von 0 bis 20 gehen. Was 
soll Bit 21 sein?

Ich geh daher mal davon aus, dass du eigentlich die elf bits 10 bis 20 
meintest. Das geht so:

assign y = x[10:20];

oder auch:
always @(posedge bla)
  y <= x[10:20];

Autor: Christoph Kessler (db1uq) (christoph_kessler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
always@posedge clock
y[10:0] <= {x[11],x[12],undsoweiter}
mit geschweiften Klammern
wenn die Reihenfolge wirklich umgekehrt werden soll,  sonst einfach

y[10:0] <= x[21:11]

oder kann man auch zum Umdrehen x[11:21] schreiben, das weiß ich nicht ?

Autor: Jonas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, stimmt.
Danke.


Ich habe noch eine Frage:
Angenommen ich habe ein MOdul, das zwei andere Module instanziert und 
ich möchte die Ausgabe des einen Moduls als EIngabe des anderen Moduls 
verwenden. Als was muss ich dann die Variable deklarieren? Als reg oder 
als wire?

Jonas

Autor: Günter -.. (guenter)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit Variable meinst du die Verbindung der beiden Instanzen? Das soll ein 
wire sein, da ja die Signaltreiber irgendwo in den Modulen sind.

Autor: Jonas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe den folgenden Code geschrieben.
Mein Compiler gibt den Fehler "Bounds of part-select into 'x' are 
reversed." aus.

Es wäre sehr nett, wenn ihr mir sagen könntet wo der Fehler liegen 
könnte.

Danke,
Jonas



input [10:0] x;

reg [5:0] y;

@always(posedge clock)
begin
y<=x[6:10];
end

Autor: Günter -.. (guenter)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beim definieren ist msb > lsb (10 > 0):

  input [10:0] x;

Dann aber beim Zugriff msb < lsb (6 < 10):

  y<=x[6:10];

Ich glaube das geht nicht. Wenn es dir zu viel Arbeit ist die einzelnen 
bits in einen Verkettung zu schreiben, kannst du auch eine for-Schleife 
dazu nehmen. Also so etwa:

integer i;

for(i=6; i<=10; i=i+1)
  y[10-i] <= x[i];

Beim sythesieren wir das dann aufgerollt und es stehen die einzelnen 
Zuweisungen da.

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.