F. Fo schrieb:
> Das mit den Farben ist ja toll!
Das geht so:
1 | [vhdl]
|
2 | VHDL Code
|
3 | [/vhdl]
|
Und noch einen Tipp:
Nimm ausschließlich die numeric_std. Am besten gleich von Anfang an.
Dann wird das zwar länger:
1 | data <= ROM(conv_integer(addr));
|
Aber es ist auch eindeutig klar, dass addr unsigned ist:
1 | data <= ROM(to_integer(unsigned(addr)));
|
Na gut, hier ist es evtl. eh' klar, aber du musst nicht weit denken, bis
dir ein Fall einfällt, wo dich interessieren würde, ob die Operation
signed oder unsigned ist:
Siehe den Beitrag "IEEE.STD_LOGIC_ARITH.ALL obsolete"
Und das da: http://www.lothar-miller.de/s9y/categories/16-Numeric_Std
Man muss sich nur merken: von und nach integer steht ein to_ davor
(to_integer(), to_unsigned(), to_signed()) und zwischen den Vektoren
wird nur gecastet (signed(), unsigned(), std_logic_vector()). Das wars,
alle Konvertierungen erledigt.
Mark W. schrieb:
> Ich habe mir den Stimulus muehselig vorgestern Abend angelegt, war wohl
> schon etwas spaet. :-(
Ich hätte das eher mit einer Schleife gemacht. In Testbenches kann und
darf man die ausgiebig verwenden:
1 | LIBRARY ieee;
|
2 | USE ieee.std_logic_1164.ALL;
|
3 | USE ieee.numeric_std.ALL;
|
4 |
|
5 | ENTITY roms_constant_tb IS
|
6 | END roms_constant_tb;
|
7 |
|
8 | ARCHITECTURE behavior OF roms_constant_tb IS
|
9 |
|
10 | -- Component Declaration for the Unit Under Test (UUT)
|
11 |
|
12 | COMPONENT roms_constant
|
13 | PORT(
|
14 | clk : IN std_logic;
|
15 | en : IN std_logic;
|
16 | addr : IN std_logic_vector(7 downto 0);
|
17 | data : OUT std_logic_vector(15 downto 0)
|
18 | );
|
19 | END COMPONENT;
|
20 |
|
21 |
|
22 | --Inputs
|
23 | signal clk : std_logic := '0';
|
24 | signal en : std_logic := '1';
|
25 | signal addr : std_logic_vector(7 downto 0) := (others => '0');
|
26 |
|
27 | --Outputs
|
28 | signal data : std_logic_vector(15 downto 0);
|
29 |
|
30 | -- Clock period definitions
|
31 | constant clk_period : time := 10 ns;
|
32 |
|
33 | BEGIN
|
34 |
|
35 | -- Instantiate the Unit Under Test (UUT)
|
36 | uut: roms_constant PORT MAP (
|
37 | clk => clk,
|
38 | en => en,
|
39 | addr => addr,
|
40 | data => data
|
41 | );
|
42 |
|
43 | -- Clock
|
44 | clk <= not clk after clk_period/2;
|
45 |
|
46 |
|
47 | -- Stimulus process
|
48 | stim_proc: process
|
49 | begin
|
50 | for i in 0 to 255 loop
|
51 | addr <= std_logic_vector(to_unsigned(addr,8));
|
52 | wait for 40 ns; -- entweder so ...
|
53 | -- ... oder so: wait until falling_edge(clk);
|
54 | end loop;
|
55 |
|
56 | wait;
|
57 | end process;
|
58 | END;
|