Generic - Constant - Record - Package - Problem

OP #1747209
Lesenswert?
• ▲
▼
Hi,

habe mal wieder eine Frage an die VHDL-Profis:

Ich möchte exemplarisch ein std_logic_vector in einem Package möglichst 
dynamisch für eine Testbench benutzen.
In diesem Fall könnte ich zunächst eine Konstante (bzw. ein constant) 
definieren, in dem die Breite für den std_logic_vector drin steht.
Wenn ich jedoch im Beispiel unten das Generic der Testbench ändere 
stimmt die Busbreite des Records nicht mehr überein und ich muss auch 
die Konstante im Package ändern.
Gibt es hierzu eine sinnvolle Möglichkeit dieses Dilema zu lösen,
sodass man nur an einer Stelle ändern muss?
Ich möchte eigentlich nur ungern auf die Records verzichten,
da ich im eigentlichen Design sehr viele Signale enthalten sind,
die ich somit sehr einfach durch verschiedene Module durchschleifen 
kann.
1
-- -----------------------------------------------------
2
library IEEE;
3
use IEEE.std_logic_1164.all;
4
use IEEE.numeric_std.all;
5

6
library work;
7
use work.test_pkg.all;
8

9
entity test_tb is
10
    generic ( C_WIDTH : natural := 7 ); -- Mit diesem Generic soll die Simulation ausgeführt werden.
11
end test_tb;
12

13
architecture Behavioral of test_tb is
14

15
   component test
16
      generic (C_WIDTH : natural); -- (Mit diesem Generic soll die Synthese ausgeführt werden.)
17
      port (
18
         test1_o : std_logic_vector(C_WIDTH-1 downto 0);
19
         test2_o : test_type;
20
      );
21
   signal test1_w: std_logic_vector(C_WIDTH-1 downto 0);
22
   signal test2_w: std_logic_vector(C_WIDTH-1 downto 0);
23
begin
24
   DUT: test
25
   generic map ( C_WIDTH => C_WIDTH)
26
   port map(
27
      test1_o => test1_w,
28
      test2_o.a => test2_w );
29
end architecture;
30
-- -----------------------------------------------------
31

32
--Package declaration for the above program
33
library IEEE;
34
use IEEE.std_logic_1164.all;
35
use IEEE.numeric_std.all;
36

37
package test_pkg is
38
   constant C_WIDTH : natural := 7; -- wie bekommt man die Konstante hier dynamisch angepasst???
39
   type test_type is record
40
        a :std_logic_vector(C_WIDTH-1 downto 0);
41
   end record;
42
end test_pkg;   
43
--end of package.
44
-- -----------------------------------------------------

Im voraus vielen Dank :)
Gast #1747296
Lesenswert?
• ▲
▼
Generics können nicht dynamisch während eines simulationslaufs geändert 
werden. Es ist aber möglich generics beim Simulatoraufruf zu definieren.

vsim -gC_WIDTH=7 test_tb
vsim -gC_WIDTH=8 test_tb
vsim -gC_WIDTH=9 test_tb
OP #1747330
Lesenswert?
• ▲
▼
Ottmar schrieb:
> Generics können nicht dynamisch während eines simulationslaufs geändert
> werden.

Ja, das ist klar, brauche ich auch nicht.

> Die Lösung nutzt natürlich nichts wenn es in einem package steht. :-)

Ja, leider. Ist auch echt blöd.
Ich finde Records eigentlich schon gut und das Package ist dafür
doch auch der richtige Ort dafür, da nur so diese nur einmalig
definiert werden müssen.

In der Entity dies zu definieren geht ja einerseits nicht und 
andererseits würde dies dort blöd aussehen.

Wie macht Ihr das denn so?
Gast #1750777
Lesenswert?
• ▲
▼
VHDL-2008:


One of the main changes to composite types (array and record types) is 
that now you can use unconstrained array and record elements. For 
instance the following declarations are now legal:
1
type myArrayT is array (natural range <>) of std_logic_vector;
2

3
type myRecordT is
4
record
5
  a : std_logic_vector;
6
  b : std_logic_vector;
7
end record;

Gruß,
SuperWilly

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren