CPLD, är det rätt val för detta?
CPLD, är det rätt val för detta?
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?
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?
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
med 50ns-kravet.
//Mikael
Re: CPLD, är det rätt val för detta?
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.
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?
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å?
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å?
-
victor_passe
- Inlägg: 2436
- Blev medlem: 28 januari 2007, 18:45:40
- Ort: Kungsbacka
Re: CPLD, är det rätt val för detta?
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.
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?
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?
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?
- 13th.Marine
- EF Sponsor
- Inlägg: 7311
- Blev medlem: 31 december 2004, 16:26:37
- Ort: Trelleborg
Re: CPLD, är det rätt val för detta?
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?
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.
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?
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)
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
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;
EDIT: kompletterade koden med lite process och clk grejer
Re: CPLD, är det rätt val för detta?
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.
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?
De mindre coolrunner II kommer (precis) under din gräns, iaf på digikey.
