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