mikrocontroller.net

Forum: FPGA, VHDL & Co. Makrozellen für rein kombinatorische Logik


Autor: Martin Laabs (mla)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe ein Design für einen CPLD XC9500 welches alle Makrozellen 
braucht. Nun will ich noch etwas rein kombinatorische Logik hinzubasteln 
und nun meint ISE, dass die Makrozellen nicht mehr reichen.
Dabei habe ich die Logik nicht mal als Prozess sondern in dieser Form 
geschrieben:
constant Backup_TX: boolean := (CS_INHIB = '0' and LNA_EN='1' and PA_EN='0');  --Backup TRX - TX
constant Backup_STBY: boolean := (CS_INHIB = '0' and LNA_EN='1' and PA_EN='1'); --Backup TRX - standby/RX without LNA
constant Backup_LNA: boolean :=(CS_INHIB = '0' and LNA_EN='0' and PA_EN='1');    --Backup TRX - RX with LNA
constant Main_RX: boolean := (CS_INHIB = '1' and EN_MAINTX_CPU='0');         --MainTX - standby/with LNA-select
constant Main_TX: boolean := (CS_INHIB = '1' and EN_MAINTX_CPU='1');          --MainTX - TX

constant EN_BTX_ENABLED: STD_LOGIC := '0';
constant EN_BTX_DISABLED: STD_LOGIC := '1';
constant EN_LNA1A_ENABLED:  STD_LOGIC := '0';
constant EN_LNA1A_DISABLED:  STD_LOGIC := '1';
constant EN_LNA1B_ENABLED:  STD_LOGIC := '0';
constant EN_LNA1B_DISABLED:  STD_LOGIC := '1';
constant EN_TXSWITCH_ENABLED: STD_LOGIC := '0';
constant EN_TXSWITCH_DISABLED: STD_LOGIC := '1';


EN_LNA1B <= EN_LNA1B_ENABLED when Backup_TX or Backup_LNA or Main_TX else
        EN_LNA1B_ENABLED when Main_RX and EN_LNA1_CPU='1' else
        EN_LNA1B_DISABLED;

Das sollte sich doch prinzipiell ohne Makrozelle rein in den PTerms 
synthetisieren lassen. Oder sind es zu viele "Eingänge", dass mehrere 
PTerms durch ein als Puffer misbrauchtes FlipFlop zusammengeschaltet 
werden müssen?

Danke Euch,
 Martin

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin Laabs schrieb:
> Das sollte sich doch prinzipiell ohne Makrozelle rein in den PTerms
> synthetisieren lassen.
Ja, wo sind denn die Produktterme?
Richtig: IN den Makrozellen...

> constant EN_TXSWITCH_ENABLED: STD_LOGIC := '0';
> constant EN_TXSWITCH_DISABLED: STD_LOGIC := '1';
Wozu sowas? VHDL ist eh schon eine geschwätzige Sprache, aber das 
schießt den Vogel ab... :-o

Autor: Martin Laabs (mla)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Lothar Miller schrieb:
> Martin Laabs schrieb:
>> Das sollte sich doch prinzipiell ohne Makrozelle rein in den PTerms
>> synthetisieren lassen.
> Ja, wo sind denn die Produktterme?
> Richtig: IN den Makrozellen...

OK. Das stimmt. Aber was mir eigentlich ausgegangen ist, sind die 
Flipflops in den Makrozellen. Und nun kann jede Makrozelle so 
programmiert werden, dass das Flipflop umgangen wird und somit von 
anderen Makrozellen über die Switch-Matrix "mitbenutzt" werden kann.
Somit wäre es, da ja noch genug PTerms frei sind, durchaus möglich, 
diese ohne Umweg über das Flipflop auf den Ausgang zu legen.

>> constant EN_TXSWITCH_ENABLED: STD_LOGIC := '0';
>> constant EN_TXSWITCH_DISABLED: STD_LOGIC := '1';
> Wozu sowas? VHDL ist eh schon eine geschwätzige Sprache, aber das
> schießt den Vogel ab... :-o

Naja - ich bin mir mit der Polarität nicht 100% sicher und will dann die 
nicht an 3 Stellen im Programm ändern. Ausserdem wird es besser lesbar 
weil '1' bei den meisten Signalen disabled bedeutet was nicht besonders 
intuitiv ist.

Viele Grüße,
 Martin L.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin Laabs schrieb:
> Ausserdem wird es besser lesbar
Sicher?
Meine Meinung:
EIN TEXT NUR AUS GROSSBUCHSTABEN IST GRUNDSÄTZLICH SCHLECHTER LESBAR.

Ein Text nur aus Grossbuchstaben ist grundsätzlich schlechter lesbar.

ein text nur aus grossbuchstaben ist grundsätzlich schlechter lesbar.

Autor: Martin Laabs (mla)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich verwende für Konstanten sehr oft Bezeichner aus Großbuchstaben. Das 
habe ich so aus diversen C-Projekten übernommen wo #defines ebenfalls 
oft durchgehend groß geschrieben werden.
Aber das ist Geschmackssache.

Viele Grüße,
 Martin L.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin Laabs schrieb:
> Aber das ist Geschmackssache.
Richtig... ;-)

Aber was ist hier der Unterschied:
constant EN_LNA1A_ENABLED:  STD_LOGIC := '0';
constant EN_LNA1B_ENALBED:  STD_LOGIC := '0';

Martin Laabs schrieb:
> Naja - ich bin mir mit der Polarität nicht 100% sicher und will dann die
> nicht an 3 Stellen im Programm ändern.
Ich mache das etwas anders:
Meine internen Signale sind bei '1' aktiv. Und wenn das externe Signal 
Low-Aktiv ist, dann wird es beim Einlesen umgepolt.

Autor: Martin Laabs (mla)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Lothar,

Lothar Miller schrieb:

> Aber was ist hier der Unterschied:
> constant EN_LNA1A_ENABLED:  STD_LOGIC := '0';
> constant EN_LNA1B_ENALBED:  STD_LOGIC := '0';

Das eine ist für LNA1A und das andere für LNA1B. Oder war die Frage 
rhetorisch :-) ?

Viele Grüße,
 Martin L.

PS: Problem ist gelöst. Ich habe an einer anderen Stelle 8 FFs 
eingespart und jetzt komme ich hin. Wobei ich immer noch nicht verstehe 
warum der Code unbedingt die FFs braucht. Aber vermutlich durch 
irgendwelche Nebeneffekte die die FFs dann für andere PTerms unnutzbar 
machen.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin Laabs schrieb:
> Das eine ist für LNA1A und das andere für LNA1B. Oder war die Frage
> rhetorisch :-) ?
Nein, es war eine Fangfrage:  _ENABLED --> _ENALBED  ;-)

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin Laabs schrieb:
> constant EN_BTX_ENABLED: STD_LOGIC := '0';
> constant EN_BTX_DISABLED: STD_LOGIC := '1';
> constant EN_LNA1A_ENABLED:  STD_LOGIC := '0';
> constant EN_LNA1A_DISABLED:  STD_LOGIC := '1';
> constant EN_LNA1B_ENABLED:  STD_LOGIC := '0';
> constant EN_LNA1B_DISABLED:  STD_LOGIC := '1';
> constant EN_TXSWITCH_ENABLED: STD_LOGIC := '0';
> constant EN_TXSWITCH_DISABLED: STD_LOGIC := '1';

Jetzt, wo ich da gerade nochmal draufgucke: Warum alles doppelt 
gemoppelt?

constant ENABLED  : STD_LOGIC := '0';
constant DISABLED : STD_LOGIC := '1';
Das sollte für gute Lesbarkeit ausreichen.

Duke

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.