Sida 1 av 1
CPLD, är det rätt val för detta?
Postat: 25 oktober 2012, 16:57:51
av Johan.o
Hej!
Jag har ett problem som jag behöver lösa.
Uppgiften är att övervaka en signal, som är en 50KHz digital signal, med 50% Dutycycle.
Jag vill kunna detektera om signalen avviker mer än uppsatta gränsvärden, vad gäller ton resp. toff.
Tänken är om detta händer behöver en logisk utgång aktiveras, så snabbt som möjligt.
typ inom 50ns från det att avvikelsen upptäcktes.
Önskvärt är att den har internt minne, robust (Får inte "hänga" upp sig utan måste alltid fungera) ,
kräver så lite kringkretsar som möjligt. Och är billig (<10kr).
Skulle en CPLD vara ett passande val för detta?
Re: CPLD, är det rätt val för detta?
Postat: 25 oktober 2012, 17:28:52
av adent
Jaaa, det tror jag nog. Tiderna låter klart rimliga för en CPLD. En liten MCU får ju tufft
med 50ns-kravet.
//Mikael
Re: CPLD, är det rätt val för detta?
Postat: 25 oktober 2012, 17:50:59
av Andax
Definitivt skulle det funka med en CPLD. Det blir nog mindre än 30 rader vhdl kod (under förutsättning att toleransgränserna är konstanta och inte behöver uppdateras dynamiskt).
Vet inte om priser dock. 10 kr är inte mycket. Gissar att det är totalkostnaden du menar.
Re: CPLD, är det rätt val för detta?
Postat: 25 oktober 2012, 18:54:39
av guckrum
50kHz med 50% duty cycle blir 10us per halvperiod.
Samplar du detta i till exempel 20MHz har du en
samplingsperiod på 50ns, dvs 200 sampel per halvperiod.
Det är den upplösningen du har att spela med om du inte
väljer att klocka fortare (vilket i och för sig är helt rimligt.)
Det låter som en eller ett par räknare med komparator,
en typisk CPLD applikation. Skicka insignalen genom några
extra flipflopar för att minimera risken för latch-up om du
latchar en asynkron signal.
10:- är inte mycket pengar, du måste ha oscillator osv också?
Re: CPLD, är det rätt val för detta?
Postat: 25 oktober 2012, 19:00:54
av victor_passe
En liten µC borde väll klara detta tror jag.
Anta 20-30MIPS och att man pollar sina räknare så man slipper interrupt overheaden.
Lär räcka med ca 5st asm instruktioner eller så för att avgöra om pulsen är inom intervall eller inte.
Det blir iof en stund. 5/25MIPS=0.2µS. Det är ju faktiskt 4 gånger ifrån dina krav.
Så 50nS blir nog svårt. Men en CPLD/FPGA lär det inte vara några problem med.
Re: CPLD, är det rätt val för detta?
Postat: 25 oktober 2012, 21:03:20
av Johan.o
Andax: Du verkar ha insikt, har du sysslat mycket med CPLD'er?
Med kostnaden menar jag vad själva CPLD'en får kosta. Den ska in på ett större kort med andra saker på..
Sedan är jag inte så medveten vad som behöver finnas runt den, bortsett från bra reglerad matningsspänning.
Brukar enklare CPLD'er ha mer än en spännings-rail, startar dom upp av sig själva utan krångel?
guckrum: Jag antar att dom flesta modernare CPLD'er har en inbyggd oscillator?
Re: CPLD, är det rätt val för detta?
Postat: 25 oktober 2012, 21:11:36
av 13th.Marine
En räknare som nollas varje gång du går från hög till låg, och hinner den räkna tillräckligt långt så hissar den en flagga?
Re: CPLD, är det rätt val för detta?
Postat: 25 oktober 2012, 21:19:54
av Johan.o
13th.Marine: Jag har redan byggt upp en "diskret" lösning med 10ns komperatorer och en hög grindar, för att testa principen som fungerar. Men det blir väldigt stort och dyrt. Dessutom är det svårt att realisera uppgiften till 100% med "diskreta"
grindar, för det blir väldigt komplext, och timingproblem då 74HCT inte alltid är så snabba.
Men din ide var lite annorlunda än min, fast den upptäcker inte för korta pulser..(?)
Så någon form av programmerbar logik är det som gäller.
Får man ner något på en så liten yta blir det även mer robust och störtåligt.
Re: CPLD, är det rätt val för detta?
Postat: 26 oktober 2012, 01:22:58
av Andax
Mycket är ett mycket relativt ord. Jag har gjort projekt med CPLDer (Xilinx). Nu är det några år sedan, och jag håller inte på med så extremt kostnadskänsliga konstruktioner, så priset vet jag inte.
Ansätt att du kör en CPLD på 40 MHz => 25 ns cykeltid
Du har en insignal: "input"
en signal prev_input
en signalvektor counter (9 bitar borde räcka)
en utsignal error
(sedan ska du kanske ha kört input genom några vippor så att man blivit av med ev metastabilitet)
Koden blir ju väldigt enkel, här i vhdl kod. (obs har inte syntat den så det kan finnas syntaktiska fel mm)
Kod: Markera allt
process (clk)
begin
if rising_edge(clk) then
if reset = '1' then
prev_input <= input;
error <= '0';
counter <= 0;
else
if prev_input = input then
if counter > MAX_ALLOWED
error <= '1';
else
counter <= counter + 1;
end if;
else --prev_input != input
if counter < MIN_ALLOWED or counter > MAX_ALLOWED then
error <= '1';
else
error <= '0';
end if;
counter <= 0;
end if; --if prev_input = input then
prev_input <= input;
end if; --if reset = '1' then
end if; --if rising_edge(clk) then
end process;
Första if-satsen med MAX_ALLOWED kan tas bort om man vet att räknaren alltid räcker till, dvs att man aldrig riskerar få överslag i räknaren.
EDIT: kompletterade koden med lite process och clk grejer
Re: CPLD, är det rätt val för detta?
Postat: 26 oktober 2012, 22:06:03
av Johan.o
Intressant, tack för tipsen!
Det blir en CPLD. Men jag måste nog undersöka prisbilden lite mer.
Visade sig att en på jobbet också hade lite koll på VHDL programmering.
Re: CPLD, är det rätt val för detta?
Postat: 27 oktober 2012, 10:14:31
av ds77
De mindre coolrunner II kommer (precis) under din gräns, iaf på digikey.