Forum: FPGA, VHDL & Co. Schon wieder synchron/asynchron.


von Koblenzer (Gast)


Lesenswert?

An XC2S100 ist ein Z80 andeschlossen.
CPU kriegt Taktsignale (CPUCLK), die synchron mit CLK sind.
Aber Signale von CPU (RD,WR,MREQ) kommen ins FPGA mit verzögerung..
Wie mache ich meine Code (ROM,RAM,VRAM,VRD,VWR) synchron???
1
begin
2
  CPUCLK <= CharColumn(0);                   -- CPU Clock 3.5MHz
3
4
  CPUWAIT <= '0' when VideoRead1 = '1' and VRAM_ACC = '1' else '1';
5
6
  ROM <= '0' when MREQ = '0' and A15 = '0' and A14 = '0' else '1';
7
  RAM <= '0' when MREQ = '0' and A15 = '1' and VRAM_ACC = '0' else '1';
8
9
  VRD <= '0' when (VRAM_ACC = '1' and RD = '0') or VideoRead2 = '1' else '1';
10
  VWR <= '0' when (VRAM_ACC = '1' and WR = '0') and VideoRead = '0' else '1';
11
  VRAM_ACC <= '1' when MREQ = '0' and (RAM5 = '1' or RAM7 = '1') else '0';
12
  VRAM <= '0' when VRAM_ACC = '1' or VideoRead1 = '1' else '1';  
13
14
  process( CLK )                       -- Global Clock 14MHz
15
  begin
16
    if CLK'event and CLK = '1' then
17
      Tick <= not Tick;                  -- 7MHz
18
      .............
19
    end if;
20
  end process;
21
22
  process( CLK )
23
  begin
24
    if CLK'event and CLK = '1' then 
25
      if Paper = '1' then
26
        if CharColumn = 5 and Tick = '0' then
27
          VideoRead <= '1';
28
          VideoRead1 <= '1';
29
        elsif CharColumn = 5 and Tick = '1' then
30
          VideoRead2 <= '1';
31
          VA <= std_logic_vector( "0110" & VerCounter(4 downto 0) & HorCounter(4 downto 0) );
32
        elsif CharColumn = 6 and Tick = '0' then
33
          VA <= std_logic_vector( "0" & VerCounter(4 downto 3) & CharRow & VerCounter(2 downto 0) & HorCounter(4 downto 0) );
34
        elsif CharColumn = 6 and Tick = '1' then
35
          VA <= ( others => 'Z' );
36
          VideoRead1 <= '0';
37
        elsif CharColumn = 7 and Tick = '0' then
38
          VideoRead <= '0';
39
          VideoRead2 <= '0';          
40
        end if;
41
      end if;        
42
    end if;
43
  end process;
44
end Behavioral;

von Falk B. (falk)


Lesenswert?

@ Koblenzer (Gast)

>An XC2S100 ist ein Z80 andeschlossen.
>CPU kriegt Taktsignale (CPUCLK), die synchron mit CLK sind.
>Aber Signale von CPU (RD,WR,MREQ) kommen ins FPGA mit verzögerung..

Das ist normal. Ist in jeder synchronen Schaltung so.

>Wie mache ich meine Code (ROM,RAM,VRAM,VRD,VWR) synchron???

das sind sie doch schon. Wenn die Daten sehr spät am FPGA anliegen 
sollten müssen sie halt nochmal über ein FlipFlop abgetastet werden 
(Retiming), was aber dann halt einen Takt verzögerung reinbringt.Was du 
da machst ist ein derived Clock, das kann ins Auge gehen.

Taktung FPGA/CPLD

MFG
Falk

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Kann man ISE die Verzögerung der externen Signale ggü. dem Takt im UCF 
mitteilen, damit das bei der Synthese berücksichtigt wird?

von Falk B. (falk)


Lesenswert?

@   Andreas Schwarz (andreas)

>Kann man ISE die Verzögerung der externen Signale ggü. dem Takt im UCF
>mitteilen, damit das bei der Synthese berücksichtigt wird?

Ja, mit "input before"  und "output after" im UCF. Genaueres in der 
Doku.

MFg
Falk

von Koblenzer (Gast)


Lesenswert?

Mein Problem ist dass wenn ich bei steigende Flanke von CLK
z.B. /RW von CPU abfrage ist diese noch nicht da.
Es passiert nur mit nächste Flanke weil /RW mit verzögerung
(wenige ns nach CLK) kommt.

Ich verstehe nicht so ganz wie ich das machen soll...
Eine Beispiel wäre hilfsreich... (sorry, bin Anfänger :) )

von Falk B. (falk)


Lesenswert?

@ Koblenzer (Gast)

>Mein Problem ist dass wenn ich bei steigende Flanke von CLK
>z.B. /RW von CPU abfrage ist diese noch nicht da.
>Es passiert nur mit nächste Flanke weil /RW mit verzögerung
>(wenige ns nach CLK) kommt.

????

Wie soll den RW\ SOFORT da sein? Auch ein 1GHz IC hat Verzögerungen. 
Weisst du überhaupt wie synchrone Schaltungstechnik funktioniert?

>Ich verstehe nicht so ganz wie ich das machen soll...

WAS willst du KONKRET machen?

>Eine Beispiel wäre hilfsreich... (sorry, bin Anfänger :) )

Und dann mit nem Grafikcontroller und Z80 hantieren? Gewagt, gewagt.

MFG
Falk

von Jan M. (mueschel)


Lesenswert?

Falk Brunner wrote:
> @   Andreas Schwarz (andreas)
>>Kann man ISE die Verzögerung der externen Signale ggü. dem Takt im UCF
>>mitteilen, damit das bei der Synthese berücksichtigt wird?
> Ja, mit "input before"  und "output after" im UCF. Genaueres in der
> Doku.


Du meinst "offset [in|out] [before|after]". Ausfuehrliche Informationen 
gibts im Whitepaper "What are offset constraints?" WP237

von Koblenzer (Gast)


Lesenswert?

<Weisst du überhaupt wie synchrone Schaltungstechnik funktioniert?

Wenn ich das gewusst hätte........

Also,
soll ich den CPU mit einem Takt versorgen, und alles anderes mit 
verzögertem takt???
Hat jemand Info zu diesem Thema???

von Falk B. (falk)


Lesenswert?

@ Koblenzer (Gast)

>Wenn ich das gewusst hätte........

>Also,
>soll ich den CPU mit einem Takt versorgen, und alles anderes mit
>verzögertem takt???

Nein!

>Hat jemand Info zu diesem Thema???

Ja, ein Grundlagenbuch lesen.

MfG
Falk

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.