Forum: FPGA, VHDL & Co. BlockRAM Primitive Spartan 3E gegen Spartan 6


von Steffen Hausinger (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich habe in meinem Design einen SJA1000-Core (CAN-Controller) von 
OpenCores.org eingesetzt. Er lief auf meinem Spartan 3E wunderbar. Jetzt 
möchte ich aber auf einen Spartan 6 wechseln und stelle fest, dass es 
Probleme mit dem BlockRAM gibt: Der Core verwendet die RAMB Primitive 
RAMB4_S8_S8, RAMB4_S4_S4 und RAMB4_S1_S1. Diese existieren auf dem 
Spartan 6 aber nicht mehr. Stattdessen gibt es dort nur noch die 
Primitive RAMB8BWER und RAMB16BWER.

Also versuche ich jetzt, bspw. das RAMB4_S8_S8 auf das BWER Primitiv 
umzumappen:

Funktionierendes Mapping für Spartan 3E Primitive:
1
RAMB4_S8_S8 fifo
2
(
3
   .DOA(),
4
   .DOB(data_out),
5
   .ADDRA({3'h0, wr_pointer}),
6
   .CLKA(clk),
7
   .DIA(data_in),
8
   .ENA(1'b1),
9
   .RSTA(1'b0),
10
   .WEA(wr & (~fifo_full)),
11
   .ADDRB({3'h0, read_address}),
12
   .CLKB(clk),
13
   .DIB(8'h0),
14
   .ENB(1'b1),
15
   .RSTB(1'b0),
16
   .WEB(1'b0)
17
);


Mein neues Mapping für Spartan 6 Primitive:
1
RAMB8BWER fifo
2
(
3
   .DIADI({8'h0, data_in}),
4
   .DIPADIP(2'b0),
5
   .ADDRAWRADDR({7'b0, wr_pointer}),
6
   .WEAWEL({wr&(~fifo_full), wr&(~fifo_full)}),
7
   .ENAWREN(1'b1),
8
   .REGCEA(1'b0),
9
   .RSTA(1'b0),
10
   .CLKAWRCLK(clk),
11
   .DOADO(),
12
   .DOPADOP(),
13
   
14
   .DIBDI(16'h0),
15
   .DIPBDIP(2'b0),
16
   .ADDRBRDADDR({7'b0, read_address}),
17
   .WEBWEU(2'b00),
18
   .ENBRDEN(1'b1),
19
   .REGCEBREGCE(1'b0),
20
   .RSTBRST(1'b0),
21
   .CLKBRDCLK(clk),
22
   .DOBDO(data_out),
23
   .DOPBDOP()
24
);


Mein neues Mapping lässt sich einwandfrei synthetisieren. Nur leider 
funktioniert das Design beim späteren Test der CAN-Verbindung nicht. Mit 
wird immer der gleiche Wert als Empfangsnachricht angezeigt (was nicht 
stimmt).


Wo liegt mein Fehler?

Grüße
Steffen

von Steffen Hausinger (Gast)


Lesenswert?

Ich vermute, dass ich dem Primitive irgendwie seine Parameter mitteilen 
muss. Ich habe nur leider überhaupt keine Ahnung, wie das in Verilog 
geht.

Offensichtlich wird die Kommentarzeile nach dem Schlüsselwort "synthesis 
attribute" geparst - kann das sein?

von Steffen Hausinger (Gast)


Lesenswert?

Steffen Hausinger schrieb:
> Offensichtlich wird die Kommentarzeile nach dem Schlüsselwort "synthesis
> attribute" geparst - kann das sein?

Aha, "defparam" ist das Zauberwort! Das werde ich gleich ausprobieren!

von Harald F. (hfl)


Lesenswert?

Hallo Stefan,

ich könnte mir vorstellen, dass es sinnvoll ist, wenn Du das neue 
RAM-Modul RAMB8BWER so mit einem Wrapper umwickelst, dass die Ports und 
die Funktion des alten RAMB4_S8_S8 dabei rauskommen. Und dann lässt man 
die Quelldatei so wie sie ist.

Grüße,
Harald

von Uwe Bonnes (Gast)


Angehängte Dateien:

Lesenswert?

Wie waere es mit Code, der das Ram "infered" und nicht "instanziiert?

Im angehaengten Code als "write first"

PS: Gibt es einen deutschen Begriffe fuer "infered" ?

von D. I. (Gast)


Lesenswert?

Uwe Bonnes schrieb:
> PS: Gibt es einen deutschen Begriffe fuer "infered" ?

Inferieren

von Harald F. (hfl)


Lesenswert?

Uwe Bonnes schrieb :
> PS: Gibt es einen deutschen Begriffe fuer "infered" ?

Ich würde sagen "ableiten" im Sinne von "aus der Beschreibung ableiten".

von Uwe Bonnes (Gast)


Lesenswert?

Eine "Instanz" kenne ich, und daraus kann man "nstanziieren" ableiten, 
aber was ist ein "Infer" aus dem Du "Inferieren" ableitest. Da ist das 
gleich Denglich wie "gedownloadet"...

"Ableiten" finde ich in dem Kontext auch nicht so prickelnd...

von Christian R. (supachris)


Lesenswert?

Hm, naja, die korrekte Übersetzung wäre "schlussfolgern", was ja auch 
treffend ist. Eine direkte deutsche Entsprechung gibts aber da wohl 
nicht.

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.