Ez a panel tartalmazza a számlálót. Az áramkör lelke az XC9572 CPLD. A segéd oszcillátor egy 50 MHz-es modul, annak idején a ChipCAD-tól vettem. 3,3 V-os jelet ad, de ennek ellenére jól illeszkedik az 5 V-os XC9572-hőz. A panelen még található egy analóg stabilizátor, amely 5 V-ból 3,3 V-ot állít elő.
A VHDL forrás a 72 makrócellának csak felét használja, így érdemes lehet kísérletezni az XC9536XL CPLD-vel, a RET-nél kapható. Kár, hogy nagyobb CPLD-ket nem árulnak. Ha már az áruházban vásárolunk akkor érdemes TLC5510i-t is venni. SRAM-jaik is vannak, igaz nagyobb méretben, de ez a számláló lehetőséget ad arra, hogy 64 kB-ig címezzük a SRAM-ot. A számláló módosítható akár nagyobb méretű SRAM-hoz is, de ekkor már XC9572-re lesz szükség. Az XC9536XL 3,3 V-os, ezért busz drivert kell használni hozzá az 5 V környezetben. Én a 74LVX3245QSC-t fogom erre a célra használni. Még nincs tapasztalatom vele.
CPLD modul kapcsolási rajza:
Kattints a képre a nagyobb méretért!
Kép a panelről:
Kattints a képre a nagyobb méretért!
Kattints a képre a nagyobb méretért!
Most pedig következzen a VHDL forrás:
----------------------------------------------------------------------------------
-- Developer:bbatka (Kiss Attila) verzió:2022-01-02
--
-- Create Date: 20:41:19 10/25/2008
-- Design Name:
-- Module Name: villi - Behavioral
-- Project Name:
-- Target Devices:
-- Tool versions:
-- Description:
--
-- Dependencies:
--
-- Revision:2022-01-02
-- Revision:
-- Additional Comments: High 'Z' (DACLK, MCLK, CS1, LED) When GTS1=0 mód:2022-01-02
--
----------------------------------------------------------------------------------
Library ieee;
Use ieee.std_logic_1164.ALL;
Use ieee.STD_LOGIC_ARITH.ALL;
Use ieee.std_logic_unsigned.ALL;
Entity k1 is
port( LED: out std_logic_vector(15 downto 0);--SRAM címzés
CLK: in std_logic;
SCLK: inout std_logic;--Segéd órajel
SCLKI: inout std_logic;--Inverz Segéd órajel
GTS1: in std_logic;--Engedélyező láb
DACLK: inout std_logic;--ADC órajele
ClkSel: in std_logic_vector(3 downto 0);
--CS1: out std_logic;--SRAM Chip Select, nincs kivezetve, dsPIC kezeli, P1 pin ill. P40
--LED_ZOLD: out std_logic;
MCLK: inout std_logic);--Másodlagos órajel,SRAM WE jel, nincs kivezetve, dsPIC kezeli, P27 pin ill. P35
end;
Architecture rtl of k1 is
signal count: std_logic_vector(16 downto 0):="00000000000000000";
signal count2: std_logic_vector(0 downto 0):="0";
signal count3: std_logic_vector(0 downto 0):="0";
signal ADC_div: std_logic_vector(8 downto 0):="000001111";
signal ADCClk: std_logic:='0';
begin
SCLK --LED DACLK MCLK --CS1 SCLKI --LED_ZOLD LED
--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
process(SCLK)
begin
if SCLK'event and SCLK='1' then
if GTS1='1' then
count else
count <= "00000000000000000";-- SRAM Címzés nullázása
end if;
end if;
end process;
--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
process(SCLK)
begin
if SCLK'event and SCLK='1' then --Kettővel való leosztott jel
if GTS1='1' then
count2 else
count2 <= "0";--Másodlagos órajel nullázás
end if;
end if;
end process;
--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
process(SCLK)
begin
if SCLK'event and SCLK='0' then --Kettővel való leosztott jel
if GTS1='1' then
count3 else
count3 <= "0";--Másodlagos órajel nullázás
end if;
end if;
end process;
--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ClkDivP: process(CLK,GTS1)
begin
if GTS1='0' then
ADCClk <= '0';
ADC_div <= "000001001";
elsif CLK='0' and CLK'event then
if ADC_div="000000000" then
ADCClk case ClkSel is
when "0001" => -- Div4 12,5Mhz 50Mhz órajelnél
when "0010" => ADC_div <= "000000001"; -- Div8 (érték+1)*2=osztás érték
when "0011" => ADC_div <= "000000100"; -- Div20
when "0100" => ADC_div <= "000001001"; -- Div40
when "0101" => ADC_div <= "000010011"; -- Div80
when "0110" => ADC_div <= "000110001"; -- Div200
when "0111" => ADC_div <= "001100011"; -- Div400
when "1000" => ADC_div <= "011000111"; -- Div800
when "1001" => ADC_div <= "111110011"; -- Div2000
when others => ADC_div <= "111110011"; -- Div2000 25000Hz 50MHz órajelnél
end case;
else
ADC_div end if;
end if;
end process;
--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
process(CLK,GTS1)
begin
if CLK='0' and CLK'event then
if GTS1='0' then
MCLK <= 'Z';
DACLK <= 'Z';
--CS1 <= 'Z';
LED(0) <= 'Z';
LED(1) <= 'Z';
LED(2) <= 'Z';
LED(3) <= 'Z';
LED(4) <= 'Z';
LED(5) <= 'Z';
LED(6) <= 'Z';
LED(7) <= 'Z';
LED(8) <= 'Z';
LED(9) <= 'Z';
LED(10) <= 'Z';
LED(11) <= 'Z';
LED(12) <= 'Z';
LED(13) <= 'Z';
LED(14) <= 'Z';
LED(15) <= 'Z';
end if;
end if;
end process;
end;
A forrásban benne hagytam korábbi megjegyzéseket, amik a későbbiekben támpontokat nyújthatnak. Figyelmes szemlélő láthatja a megjegyzésben, hogy az SRAM kétféle képen is címezhető. A DACLK szinkronban az MCLK (WE)-val vagy ahhoz képest eltolva. Mind a kétféle mód működött nálam.
Eltolt DACLK:
Kattints a képre a nagyobb méretért!
Szinkron DACLK:
Kattints a képre a nagyobb méretért!
A helyes számláló indítási feltétel: clksel() nullázás, GTS1 nullázás, GTS1 magas értékre állítás, clksel() értékadás.
A cikk még nem ért véget, lapozz!
Értékeléshez bejelentkezés szükséges!