VHDL-Forum - Anfänger

Pseudo-Signale

Pseudo-Signale

Hallo! Hab folgendes Problem: Wie kann man in VHDL ein über SIGNAL festgelegtes Pseudo-Signal real erzeugen? Also zur Erklärung: Ich programmiere gerade einen CPLD. In diesem generiere ich ein Chip-Select-Signal aus einer 16Bit-Adresse und benutze dieses CS-Signal um ein internes Steuerregister anzusprechen. Das CS-Signal wird nur intern benutzt. Und genau aus diesem Grund versucht der Compiler dieses Signal wegzuoptimieren, d.h. er führt alle 16 Adressleitungen in jede der 8 Makrozellen des Steuerregisters. Dadurch ist aber der Global-Routing Pool erschöpft. Wie kann ich ihm sagen, dass er das CS-Signal in EINER Makrozelle erzeugen soll und dieses dann für die anderen Makrozellen benutzen soll?

Re: Pseudo-Signale

Hallo Maik,

das hängt von Deinem Synthesetoll ab. Xilinx bietet z.B. ein Attribut "KEEP" an.

Aber vermutlich ist was mit Deiner VHDL-Beschreibung nicht in Ordnung - eigentlich sollte ein solches CS-Signal nicht wegoptimiert werden. Aber ohne Deine Sourcen zu kennen, kann man da nichts Genaueres zu sagen.

Gruß
Ines

Re: Pseudo-Signale

Ich benutze Quartus II von Altera.
Dass er das CS-Signal wegoptimiert, macht deshalb Sinn, dass die Dekodierung dann schneller ist, da eine Gatterstufe umgangen wird. Nützt dann aber auch nix, wenn er das Ganze nicht geroutet bekommt. Er versucht halt in jede einzelne Makrozelle(die das CS-Signal benötigen)über 24 Leitungen zu ziehen, also alle Adress- und Datenbits, obwohl nur die Datenbits und ein CS vonnöten wären.
Das Ganze sieht so aus:

LIBRARY ieee;

USE ieee.std_logic_1164.all;


--BLITZ-ADRESS-DECODER
ENTITY blitz_adress_decoder IS
PORT(
ale : IN STD_LOGIC; --Adress Latch Enable
res : IN STD_LOGIC; --Reset
wr : IN STD_LOGIC; --Write Enable
rd : IN STD_LOGIC; --Read Enable

ad7_0_inout : INOUT STD_LOGIC_VECTOR(7 DOWNTO 0); --Adresse (Low) und Datenbus (Multiplex)
a23_8_in : IN STD_LOGIC_VECTOR(7 DOWNTO 0); --Adressbus (Middle und High)(Multiplex)
in_port : IN STD_LOGIC_VECTOR(7 DOWNTO 0); --Eingangsport

cs_ram : OUT STD_LOGIC; --Ram adressieren
cs_lcd : OUT STD_LOGIC; --LCD adressieren
a16_out : OUT STD_LOGIC; --Adress-Bit 16 (für 128k RAM)

a7_0_out : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); --Adresse (Low)
out_port : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); --Ausgangsport



);
END blitz_adress_decoder;



ARCHITECTURE verhalten OF blitz_adress_decoder IS

--komplettes 24-Bit-Adress-Signal zur Erzeugung der Chip-Selects
SIGNAL adr23_0 : STD_LOGIC_VECTOR(23 DOWNTO 0);
--interne Chip-Select-Signale
SIGNAL cs_outport : STD_LOGIC;
SIGNAL cs_inport : STD_LOGIC;


BEGIN

--Adress-Latch
process(ale,res,adr23_0,a23_8_in)
begin

if res = '0' then
adr23_0 '0');

elsif falling_edge(ale) then
adr23_0(23 downto 16)