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 :)