CPLD - trochem v tom plavu

balu@home daniel.valuch@orange.fr
Neděle Červen 14 09:46:45 CEST 2009



j.Krajinka@seznam.cz wrote:

> Neproslo mi asynchroni zpracovani ani  krystal na vstupu, zkusim dalsi "spek"
> 2.  Co tak realizace EXOR fazoveho detektoru v CPLD?
> V CPLD je realizovano EX-OR hradlo na jeho vstupy jsou privedeny nejake TTL signaly, vystup jde na RC a vystupem je napeti primo umerne posunu signalu 0 - 2Pi. 
> Je to pro CPLD dobry napad?
> Jak to bude vypadat s casovanim  u takoveho Ex-OR, pokud se napriklad realizuje v XC9536XL?

v tomtopripade, kedze ide o realizaciu logickej funkcie problem nebude. 
Nadratujete si vstupy a vystup, pouzijete externy RC clanok a malo by to 
fungovat. S jednoduchym XOR detektorom ale rozsah 2 pi neobsluzite, pac 
vystupne napatie je paran funkcia, t.j. dostanete rovnake napatie pre 
fazu v oblasti 0- +pi ako aj 0- -pi. To ale nema nic spolocne s CPLD 
samozrejme.
Vo VHDL je funkcia xor priamo definovana
  VYSTUP <= ( VSTUP1) xor ( VSTUP2);


> 
> 3. Jak se realizuje napriklad toto. 
> Do CPLD lezou 50MHz hodiny  a na vystupu chci mit prvni takt Log1 , dalsi 4 takty Log0 a tak porad dokola?

Jednoducho, napisete si citac, ktory bude pocitat a do vnutra si date 
podmienky pri ktorych ma byt vystup aktivny. Pokial ide o pulz dlzky 
jedneho hodinoveho cyklu, tato technika sa nazyva clock enable a pouziva 
sa ak potrebujete v ramci jedneho dizajnu viacero hodinovych frekvencii 
ktore su navzajom synchronne.
Mate napriklad hodiny 50MHz pre rychlu logiku a 1kHz pre vonkajsie 
obvody a tieto navzajom spolupracuju. Nedoporucuje sa vydelit 50MHz na 
1kHz so striedou 1:1 a toto pouzit ako hodiny, ale prave so striedou 1 
pulz kazdych 49 999 pulzov 50MHz. To je presne vas pripad.
V priklade je dany obvod realizovany ako 16 bitovy ale ked sa clovek 
posnazi da sa to napisat aj uplne univerzalne a pocet bitov sa definuje 
ako konstanta, ale nma to som moc lenivy :-)
Vstup su hodiny, 16 bitova konstanta delitela a enable (umoznuje dalsie 
zretazenie) a vystup je 1 pulz za x hodinovych cyklov.


------------------------------------------
library ieee;
use ieee.std_logic_1164.all;
use IEEE.Numeric_std.all;


entity  CLK_GENERATOR  is
port (CLK : in std_logic ;
       RESET : in std_logic ;
       CLK_ENABLE : in std_logic;
       DIVIDER : in std_logic_vector (15 downto 0);
       CLK_SLOW : out std_logic );
end;

------------------------------------------


architecture  CLK_GENERATOR  of  CLK_GENERATOR  is
    signal LOC_COUNT: unsigned(15 downto 0);
begin
    process (CLK, RESET)
    begin
      if RESET = '1' then
        LOC_COUNT<=UNSIGNED(DIVIDER);
        CLK_SLOW<='0';
      elsif Rising_Edge(CLK) and CLK_ENABLE = '1' then
        if LOC_COUNT = X"0000" then
          LOC_COUNT<=UNSIGNED(DIVIDER);
          CLK_SLOW<='1';
        else
          LOC_COUNT<=LOC_COUNT-1;
          CLK_SLOW<='0';
        end if;
      end if;
    end process;
end;







Další informace o konferenci Hw-list