CPLD för den absoluta nybörjaren

Här skriver vi inga frågor. Här finns svaren.
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9216
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

CPLD för den absoluta nybörjaren

Inlägg av AndersG »

Bifogas. Kommentarer mottages tacksamt!
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
Oskar
Inlägg: 1943
Blev medlem: 6 september 2005, 15:11:36
Ort: Storsjö, Sorsele

Re: CPLD för den absoluta nybörjaren

Inlägg av Oskar »

En bra guide tycker jag, snudd på att jag skulle lyckas själv med denna som hjälp, trots att det här verkligen inte är mitt område :)
Har varit sugen att prova dock.
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9216
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: CPLD för den absoluta nybörjaren

Inlägg av AndersG »

Tack! :)
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9216
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: CPLD för den absoluta nybörjaren

Inlägg av AndersG »

Jag behöver uppdatera den. Det har kommit nya versioner av både LittleATF Programmer och Digital. Dock har jag en litet irriterande sak:

Skulle behöva en RS-vippa, men tar jag den i digital så gnäller Digital att den inte kan analysera den och försöker jag skapa en vippa med två grindar klagar den oxå.

Jag skall nu testa med den gamla gratisversionen av Quintus, en nätt liten sak som behöver 10Gb disk...
guckrum
Inlägg: 1963
Blev medlem: 19 juni 2012, 09:04:27
Ort: Lund

Re: CPLD för den absoluta nybörjaren

Inlägg av guckrum »

Jag tror att du skall skriva RS-vippan som en tillståndsmaskin bestående av en D-vippa + lite logik. Så brukar man tänka i CPLD/FPGA/ASIC-världen.
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9216
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: CPLD för den absoluta nybörjaren

Inlägg av AndersG »

OK. Tror jag förstår, men blir det inte väldigt mycket flera makroceller då?
guckrum
Inlägg: 1963
Blev medlem: 19 juni 2012, 09:04:27
Ort: Lund

Re: CPLD för den absoluta nybörjaren

Inlägg av guckrum »

Nu är jag ignorant och har inte alls tittat på hur kretsarna du använder ser ut, så jag vet inte vad en macrocell är i detta fallet.

I klassiska CPLD är det vippor kopplade till matriser av AND-OR-grindar eller ekvivalent. De är byggda för tillståndsmaskiner, så det skall matcha bra. Om det är mer FPGA-liknande med SRAM-baserade macroblock så brukar dessa innehålla både sekventiella och kombinatoriska element, så det blir en bra match där också.

Försöker du bygga vippor med kombinatoriska element blir det sannolikt både varningar och odeterministiskt beteende. Gör bara det om du verkligen vet vad du gör:-) Men det går. Jag har byggt asynkrona tillståndsmaskiner i vanliga PAL-liknande kretsar, och det går finfint, men där är också komplexiteten begränsad och kretslösningen väldigt reguljär så jag inbillade mig att jag hade full kontroll. (Men för asynkrona maskiner behöver man realisera logiken hasardfritt också, och då går logikoptimeraingar bort.)
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9216
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: CPLD för den absoluta nybörjaren

Inlägg av AndersG »

Det är ATF1504 och ATF1508.

5V eftersom jag tänkte ersätta en del av logiken i GPIB/HPIB med en sådan, om det går.
guckrum
Inlägg: 1963
Blev medlem: 19 juni 2012, 09:04:27
Ort: Lund

Re: CPLD för den absoluta nybörjaren

Inlägg av guckrum »

Kollade väldigt snabbt. Det verkar som varje macrocell kan ta in ett antal globala signaler _samt_ fem produktsignaler (dvs fem AND-grindar med stort antal inputs) till en stor MUX, och på utgången av den sitter en fet OR som kan lägga ihop varianter av dessa inputs. Så en SR skall bara ta ett enda macroblock.

Spännande krets.

Vad programmerar du i för språk?
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9216
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: CPLD för den absoluta nybörjaren

Inlägg av AndersG »

Det lilla jag testat med är inte programmering, utan jag har designat i Digital med logiska element, lika som jag annars skulle bygga med diskreta kretsar. Annars programmerar jag i C/C++ så hela VHLD/Verilog känns extremt främmande. Om jag skall implementera en GPIB mottagning så vill jag fånga det i ett register och så långt har jag kommit, men sedan vill jag naturligtvis trigga en vippa som dels signalerar på bussen att sändaren måste vänta, dels indikerar till min MPU att det finns ett byte att hämta. Digital är annars enkelt och bra och kan exportera till Verilog/VHDL.

Men som sagt var, en RS vippa går inte, däremot en JK:
JKVippa.jpg
Antingen får jag derivera en klocka från signalen, eller så ha en..

Tidigare har jag gjort allt i C-kod och assembler i en 5V kapabel MPU, men jag har även en version där jag använder ALS160/161 kretsar som tyvärr är på utgående så tanken var att fixa översättningen från 5V till 3.3 samt en del av logiken med en ATF150x

Men jag kanske kan lära mig VHDL genom att rita och exportera?

Kod: Markera allt

-- generated by Digital. Don't modify this file!
-- Any changes will be lost if this file is regenerated.

LIBRARY ieee;
USE ieee.std_logic_1164.all;

entity DIG_JK_FF is
  generic (Default : std_logic);  
  port (
    Q: out std_logic;
    notQ: out std_logic;
    J: in std_logic;
    C: in std_logic;
    K: in std_logic );
end DIG_JK_FF;

architecture Behavioral of DIG_JK_FF is
  signal temp: std_logic := Default;
begin
  process (C)
  begin
    if rising_edge(C) then
      if (J='0' and K='1') then
         temp <= '0';
      elsif (J='1' and K='0') then
         temp <= '1';
      elsif (J='1' and K='1') then
         temp <= not (temp);
      end if;
    end if;
  end process;
  Q <= temp;
  notQ <= NOT( temp );
end Behavioral;


LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.numeric_std.all;

entity main is
  port (
    S: in std_logic;
    R: in std_logic;
    Clk: in std_logic;
    Q1: out std_logic;
    Q2: out std_logic);
end main;

architecture Behavioral of main is
begin
  gate0: entity work.DIG_JK_FF
    generic map (
      Default => '0')
    port map (
      J => S,
      C => Clk,
      K => R,
      Q => Q1,
      notQ => Q2);
end Behavioral;
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
guckrum
Inlägg: 1963
Blev medlem: 19 juni 2012, 09:04:27
Ort: Lund

Re: CPLD för den absoluta nybörjaren

Inlägg av guckrum »

Ja, du kanske kan modda den filen.

"entity" specar interfacet
"architecture" specar beteendet, där den första är din vippa och den andra hela konstruktionen som instantierar den.

Det borde finnas en "entity" för toppnivån också tycker jag.

I "architecture" kör alla rader parallellt, så "Q <= temp" körs samtidigt som "notQ <= ..." samtidigt som process-blocket (i vilket koden kör sekventiellt. Egentligen är "<="-rader också processer, och alla processer kör parallellt, men koden inom dem är sekventiell.)

I din process finns ett antal if-rader, och notera att om man INTE definierar en utsignal för alla kombinationer av insignaler skapas ett minneselement, i detta fall en vippa som triggar på stigande flank. Man måste tänka sig för om man gör vanlig logik och ALLTID tilldela ALLA utsignaler ett värde. Man kan tilldela en utsignal värden flera gånger i processen och det är det sista som gäller.

Hur detta sedan syntetiseras ner på en målteknologi beror helt på vilka "komponenter" som finns tillgängliga. Du har ett verktyg som mappar filens beteende och interface mot CPLD-arkitekturen.
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9216
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: CPLD för den absoluta nybörjaren

Inlägg av AndersG »

Japp, det är Atmels "fitter" som skapar en JEDEC-fil som man sedan programmerar.

Jag skall testa litet vidare
tingo
Inlägg: 338
Blev medlem: 17 maj 2017, 17:55:40
Ort: Oslo, Norge

Re: CPLD för den absoluta nybörjaren

Inlägg av tingo »

Ser at hardware nå også er under en fri lisens https://github.com/roscopeco/atfprog-hardware
guckrum
Inlägg: 1963
Blev medlem: 19 juni 2012, 09:04:27
Ort: Lund

Re: CPLD för den absoluta nybörjaren

Inlägg av guckrum »

Ett förtydligande. CPLDer är konstruerade för _synkrona_ designflöden. Designen skall vara klockad, flanktriggad, och det finns bara en klocka.

Det lät som att du ville ha en SR-vippa. Dessa är ju asynkrona, två motkopplade grindar utan klocka. Att bygga en sådan i en CPLD kommer att kräva att man har koll på alla detaljer. Jag avråder från det i detta läget.

Bygg något som är synkront, dvs klockat istället. Typ som kodsnutten du har. Du kan sannolikt INTE hämta klockan ut någon av insignalerna, för man måste ta hänsyn till setup och holdtider mm, och det kan så lätt bli indeterministiskt eller rent av orsaka att vipporna låser sig. Så planera för en extern klocka.

Är själva systemet du skall använda detta i verkligen asynkront?
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9216
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: CPLD för den absoluta nybörjaren

Inlägg av AndersG »

tingo skrev: 15 oktober 2025, 21:05:54 Ser at hardware nå også er under en fri lisens https://github.com/roscopeco/atfprog-hardware
Japp. Bra, för då kan man fixa ev fel. Tidigare version av atfu hade en bugg som gjorde att den inte verifierade OK.
Skriv svar