Hm...
mal ein vereinfachtes beispiel, ich hab als eingagn 4 bit signal und
länge vom DPRAM 16 ... über coregenerator implementiere ich mir
1 | COMPONENT TESTRAM
|
2 | port (
|
3 | clka: IN std_logic;
|
4 | wea: IN std_logic_VECTOR(0 downto 0);
|
5 | addra: IN std_logic_VECTOR(3 downto 0);
|
6 | dina: IN std_logic_VECTOR(3 downto 0);
|
7 | clkb: IN std_logic;
|
8 | rstb: IN std_logic;
|
9 | addrb: IN std_logic_VECTOR(3 downto 0);
|
10 | doutb: OUT std_logic_VECTOR(3 downto 0));
|
und über PORTMAP HAB ich dann die einzelnen signale zugewiesen..
1 | DP1 : TESTRAM
|
2 |
|
3 | Port Map ( clka => clk_2,
|
4 | wea => "1",
|
5 | addra => ADD1,
|
6 | dina => SAVEY,
|
7 | clkb =>clk_2,
|
8 | rstb => MASTERRESET,
|
9 | addrb =>ADD2,
|
10 | doutb => AUSGANG);
|
Ich denke jetzt müsste ich über addra und addrb diese logik
implementieren
z.B hab ich folgendes probiert
1 | ADD_TAKT:process (clk_A,reset)
|
2 | begin
|
3 |
|
4 | if clk_A = '1' and clk_A'event then
|
5 | if reset = '1' then
|
6 | ADDA1 <= "0000";
|
7 | ADDA2 <= ADDA1 -1;
|
8 | cnt <= 0;
|
9 | elsif (cnt= 16) then
|
10 | cnt<=0;
|
11 | ADDA1 <= "0000";
|
12 |
|
13 | else
|
14 | ADDA1 <= ADDA1 +1;
|
15 |
|
16 | cnt<=cnt+1;
|
17 | end if;
|
18 |
|
19 | end if;
|
20 |
|
21 | end process ADD_TAKT;
|
22 |
|
23 | ADDA <= ADDA1;
|
24 | ADDB <= ADDA1;
|
Als clk verwende ich ein 1 Hz takt, somit müsste ja das signal nach 8
takten am ausgang erscheinen, was es auch tut, nur geht es dann wieder
aus, und dann wieder nach paar takten an, und dann bleibt es auch
dauerhaft an....
Wieso
Gruss