W
woutput
Guest
J'espère que vous pourrez m'aider sur ce problème, j'ai travaillé dessus depuis quelques jours.
Lorsque je simule le code suivant VHDL, je reçois pas d'erreurs et les résultats sont bons.
Une partie de mon code:
library ieee;
utilisation ieee.std_logic_1164.all;
utilisation ieee.numeric_std.all; - d'utiliser to_integer ()
...
génériques
(
AXI_ADDR_DATA_BITS: integer: = 32;
VPAGE_BITS: integer: = 12;
VPAGE_SETTING_BITS: integer: = 3;
VPAGE_SETTING_OFFSET: integer: = 10
)
port
(
PAGE_SIZE_SETTING: in std_logic_vector (VPAGE_SETTING_BITS - 1 downto 0);
VIR_ADDRESS_PAGE: out std_logic_vector (VPAGE_BITS - 1 downto 0);
VIR_ARAW_ADDR: in std_logic_vector (AXI_ADDR_DATA_BITS - 1 downto 0);
)
...
VIR_ADDRESS_PAGE <=
VIR_ARAW_ADDR
(
VPAGE_BITS
to_integer
(
unsigned
(
PAGE_SIZE_SETTING
)
)
VPAGE_SETTING_OFFSET
--
1
downto
to_integer
(
unsigned
(
PAGE_SIZE_SETTING
)
)
VPAGE_SETTING_OFFSET
);
Mais quand je le synthétiser, j'obtiens l'erreur suivante: HDL-27 valeur constante requise
Quand je regarde la description d'erreur (2nd hit: Google pour la «valeur constante requise" VHDL), il n'est pas clair pour moi pourquoi ce n'est pas possible.Je pourrais l'image d'un circuit combinatoire (avec beaucoup de multiplexeurs) qui pourrait résoudre ce problème.
Lorsque je remplace "to_integer (non signé (PAGE_SIZE_SETTING))» par «3», il synthétise aussi.Comme ceci:
VIR_ADDRESS_PAGE <=
VIR_ARAW_ADDR
(
VPAGE_BITS
3
VPAGE_SETTING_OFFSET
--
1
downto
3
VPAGE_SETTING_OFFSET
);
Pour résoudre ce problème, j'ai essayé le code suivant:
CORRECTIF: for i in (to_integer (non signé (PAGE_SIZE_SETTING)) VPAGE_SETTING_OFFSET) à (VPAGE_BITS to_integer (non signé (PAGE_SIZE_SETTING)) VPAGE_SETTING_OFFSET - 1) Loop
(VIR_ADDRESS_PAGE I - (to_integer (non signé (PAGE_SIZE_SETTING)) VPAGE_SETTING_OFFSET)) <= VIR_ARAW_ADDR (I);
boucle de la fin FIX;
mais j'obtiens la même erreur à nouveau.Lors de l'application de la remplacer, elle «travaille» à nouveau.Comme ceci:
CORRECTIF: for i in (3 VPAGE_SETTING_OFFSET) à (VPAGE_BITS 3 VPAGE_SETTING_OFFSET - 1) Loop
VIR_ADDRESS_PAGE (I - (3 VPAGE_SETTING_OFFSET)) <= VIR_ARAW_ADDR (I);
boucle de la fin FIX;
Pouvez vous me donner un indice pour résoudre mon problème s'il vous plaît?
Je pense que mon problème est "juste" l'indexation d'une std_logic_vector avec un signal que l'indice.
Nous vous remercions à l'avance,
Wouter
Simulation: ModelSim SE 6.3a
Synthèse: Synopsys Design Analyzer
Lorsque je simule le code suivant VHDL, je reçois pas d'erreurs et les résultats sont bons.
Une partie de mon code:
library ieee;
utilisation ieee.std_logic_1164.all;
utilisation ieee.numeric_std.all; - d'utiliser to_integer ()
...
génériques
(
AXI_ADDR_DATA_BITS: integer: = 32;
VPAGE_BITS: integer: = 12;
VPAGE_SETTING_BITS: integer: = 3;
VPAGE_SETTING_OFFSET: integer: = 10
)
port
(
PAGE_SIZE_SETTING: in std_logic_vector (VPAGE_SETTING_BITS - 1 downto 0);
VIR_ADDRESS_PAGE: out std_logic_vector (VPAGE_BITS - 1 downto 0);
VIR_ARAW_ADDR: in std_logic_vector (AXI_ADDR_DATA_BITS - 1 downto 0);
)
...
VIR_ADDRESS_PAGE <=
VIR_ARAW_ADDR
(
VPAGE_BITS
to_integer
(
unsigned
(
PAGE_SIZE_SETTING
)
)
VPAGE_SETTING_OFFSET
--
1
downto
to_integer
(
unsigned
(
PAGE_SIZE_SETTING
)
)
VPAGE_SETTING_OFFSET
);
Mais quand je le synthétiser, j'obtiens l'erreur suivante: HDL-27 valeur constante requise
Quand je regarde la description d'erreur (2nd hit: Google pour la «valeur constante requise" VHDL), il n'est pas clair pour moi pourquoi ce n'est pas possible.Je pourrais l'image d'un circuit combinatoire (avec beaucoup de multiplexeurs) qui pourrait résoudre ce problème.
Lorsque je remplace "to_integer (non signé (PAGE_SIZE_SETTING))» par «3», il synthétise aussi.Comme ceci:
VIR_ADDRESS_PAGE <=
VIR_ARAW_ADDR
(
VPAGE_BITS
3
VPAGE_SETTING_OFFSET
--
1
downto
3
VPAGE_SETTING_OFFSET
);
Pour résoudre ce problème, j'ai essayé le code suivant:
CORRECTIF: for i in (to_integer (non signé (PAGE_SIZE_SETTING)) VPAGE_SETTING_OFFSET) à (VPAGE_BITS to_integer (non signé (PAGE_SIZE_SETTING)) VPAGE_SETTING_OFFSET - 1) Loop
(VIR_ADDRESS_PAGE I - (to_integer (non signé (PAGE_SIZE_SETTING)) VPAGE_SETTING_OFFSET)) <= VIR_ARAW_ADDR (I);
boucle de la fin FIX;
mais j'obtiens la même erreur à nouveau.Lors de l'application de la remplacer, elle «travaille» à nouveau.Comme ceci:
CORRECTIF: for i in (3 VPAGE_SETTING_OFFSET) à (VPAGE_BITS 3 VPAGE_SETTING_OFFSET - 1) Loop
VIR_ADDRESS_PAGE (I - (3 VPAGE_SETTING_OFFSET)) <= VIR_ARAW_ADDR (I);
boucle de la fin FIX;
Pouvez vous me donner un indice pour résoudre mon problème s'il vous plaît?
Je pense que mon problème est "juste" l'indexation d'une std_logic_vector avec un signal que l'indice.
Nous vous remercions à l'avance,
Wouter
Simulation: ModelSim SE 6.3a
Synthèse: Synopsys Design Analyzer