CPLD:n sielunelämä ja ISE projektin luonti

Näköjään tälläiselle artikkelille, joka käsittelee ohjelmoitavia logiikkapiirejä oli jonkinverran kysyntää. Eli tässä ekassa osassa käsittelen lähemmin Xilinx valmistamia CPLD piirejä. Piiriperheenä Coolrunner II ja XC9500. Ekat esimerkit teen käyttäen VHDL kovon kuvauskiltä. Ehkä tulevassa artikkelissä voisin paneutua Alteran CPLD piirisarjaan MAX II. Kaiken kaikkiaan mietiskelin 4 artikkelista. Kahtoo miten onnistuu.

Muutamia käytetyimpiä lyhenteitä
FPGA (Field Programmable Gate Array)
CPLD (Complex Programmable Logic Device)
MC (Macrocell) Logiikka lohko
FB (Functional Block) Toiminnallinen lohko
PLA (Programmable Logic Array)
IO (Input Ouput logic) IO pinnin ohjaus logiikka

Kehitysympäristö:
Tarkoituksena on käydä tässä ja tulevassa jutuissa läpi Xilinxin ISE10.1 ja Alteran Quartus II 10.0 kehitys ympäristöä. Xilinxin ISE 10.1 on ilmainen, mutta vaatii rekisteröimisen (elinikäinen lisenssifile) ja Alteran Quartus II Web edition on myös ilmainen ja ei vaadi 10.0 version jälkeen lisenssi fileä. Nämä softat on kohtuu isoja. Asennus paketti liikkuu noin 2 - 4 GB välillä.

Näissä ilmaisissa versioissa ongelmana on muutamia rajoituksia. Esim Xilinxiltä on jätetty pois piirin sisäinen logiikka-analysaattori Chipscope Pro ja Alterallakin sama ominaisuus Signal Tap II sallittu vain talkback päällä. Tosin CPLD koossa eivät välttämättä mahtuisi edes piirille, mutta FPGA kokoluokassa erittäin käytännöllisiä työkaluja bugien metsästyksessä. Chipscope Pro ja Signal Tap II työkalut vaativat myös valmistajilta niitten omat JTAG työkalut.

Työkaluja ja täyden ohjelmiston hinta
Piirien ohjelmointi tehdään yleensä JTAGin kautta. Nämä JTAG työkalut maksaa yleensä noin 200 euroa. Tämä ei oo mikään pahempi hinta firmalle, kun vertaa täyden ohjelmiston hintaan, joka liikkuu siinä 2000 - 5000 euroa välillä ilman kunnollista simulaattoria. Kunnollisten simulaattorien hinnat on sitte eri luokkaa. Näitä yleensä vain piirisuunnittelua tekevät firmat käyttää.

Piirin ohelmointi
Piirien ohjelmointi kuitenkin onnistuu esim. FT2232 pohjaisella piirillä ja SVF playerilla. Jos kyseessä on FPGA piiri, niin se voidaan ohjelmoida kortilla olevalla prossalla, jos kortin suunnitelussa tämä on otettu huomioon. Tässä kuitenkin kannattaa muistaa ohjelmointi tiedoston koko. FPGA:t kuitenkin vaativat erillisen configurointi piirin, jos asiaa ei ole muuten hoidettu.

Joskus kortin suunnittelussa on otettu huomioon, että FPGA pitää päästä ohjelmoimaan tai päivittämään ilman erillisiä työkaluja. Esimerkkinä käy KNJN Xylo-L kortti, jossa Cypressin FX2 piiri hoitaa FPGA:n (Spartan 3E) ja sen configurointi muistin ohjelmoinnin. Samalta piiriltä on myös JTAG yhteys kortilla olevaan ARM7 kontrolleriin.

CPLD piirit:
Käsittelen tässä lähinnä Xilinxin Coolrunner II sarjaa, joka on 1.5 V - 3.3 V käyttäjännite alueella. Coolrunner II sarjalaisia on kooltaan 32 - 324 pinnisiä ja logiikka tilavuudeltaan 32 - 512 macrocelliä. Nämä piirit ovan kaikki pintaliitos tekniikkalla toteutettuja.

Coolrunner II piirit koostuvat FB-lohkoista, joissa on 16 kappaletta macrocellejä ja näille yhteinen PLA-lohko. Periaatteessa macrocell vastaa signaalia, joka voidaan kytkeä takaisin logiikkamatriisiin tai pinnin ohjauslogiikalle. Macrocell sisältää myös D-kiikun ja ohjauslogiikkaa tälle. FB:n PLA-lohkon logiikka-osuus sisältää 40 tuloa ja näistä on tehty myös käänteiset signaalit. Näistä luodaan 56 kappaletta p-termejä. P-termillä tarkoitetaan yhtä AND operaatiolla luotua signaalia PLA-lohkon tuloista. Näistä p-termeistä macrocell muodostaan halutun datan yhdellä OR operaatiolla.

Tarkemmin tietoa Coolrunner II piireistä ds090.pdf dokusta Xilinxiltä.
xilinx.com/support/documenta … /ds090.pdf

Projektin luominen ISE työkalussa
Tässä esittelen projektin luomisen ja siinä valittavia asetusarvoja projektille. Näitä arvoja pääsee kyllä myöhemminkin muokkaamaan. Quick start oppaaseen kannattaa tutustua, joka löytyy help valikon alta kohdasta tutorials ja sieltä ISE Quick Start. Eli kun ollaan saatu ISE Web asennettua ja käynnistettyä työkalu työpöydän Xilinx ISE 10.1 (minun versio) linkistä.

Projektin luonti aloitetaan valitsemalla file valikosta new project.
Tämän jälkeen annetaan projektille nimi ja kansio minne se tallennetaan. Alempana valitaan top tason kuvaus tyyppi. Valittavana HDL (kovon kuvauskieli esim VHDL tai Verilog), Piirikaavio, EDIF ja NGC/NGO. Näistä EDIF ja NGC/NGO ovat importattavia projekteja.
PACE.jpg

Jos valitaan top tasoksi HDL, niin seuraava vaihe näyttää tältä. Tässä valitaan käytettävä piiri, synteesi työkalu ja simulaattori.
ISE_Project_2.jpg

Piiriksi valitsin Spartan 3E FPGA:n, koska iteltä löytyy kyseiselle piirille valmis kehityskortti. Eli voin testata suoraan tuon synteesin toimivuuden.

Tässä luodaan kyseiselle piirille Päätaso. Päätasolla on tarkoitus kytkeä kaikki käytettävät lohkot. Kun ikkuna avautuu ekaa kertaan, niin luodaan uusi päätaso painamalla New source painiketta.
ISE_Project_3.jpg

Tämä on perus tiedoston luonti wizard. Tästä valitaan, että halutaan tehdä VHDL moduuli ja annetaan sille nimi.
ISE_Project_4.jpg

Seuraavassa vaiheessa määritellään moduulin liitännät. Esimerkinä tein 2 lediä käyttävän kytkennän, mistä saa ulos laskurin ylimmät 8 bittiä.
ISE_Project_5.jpg

Seuraavaksi wizardi kyselee onko annetut tiedot oikein ennen kuin se luo tuon tiedoston. Tässä vaiheessa voi tulla ilmoitus, että tehdäänkö projekti kansio. Tämä ilmoitus tulee, jos sitä ei ole olemassa.
ISE_Project_6.jpg

Tässä vaiheessa voidaan syöttää valmiita moduuleita, jos niitä on olemassa.
ISE_Project_7.jpg

Tässä viimeisessä projektin luonnin vaiheessa kysellään, että onko kaikki tiedot oikein. Asetuksia kyllä pystyy muuttamaan jälkikäteenkin.
ISE_Project_8.jpg

Wizard loi päätason koodipohjan, jossa on määritelty aiemmin taulukkoon lisätyt linjat.

[code]----------------------------------------------------------------------------------
– Company:
– Engineer:

– Create Date: 18:13:27 02/14/2011
– Design Name:
– Module Name: Top - Behavioral
– Project Name:
– Target Devices:
– Tool versions:
– Description:

– Dependencies:

– Revision:
– Revision 0.01 - File Created
– Additional Comments:


library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
–library UNISIM;
–use UNISIM.VComponents.all;

entity Top is
Port ( Clk : in STD_LOGIC;
Rst : in STD_LOGIC;
Led_1 : out STD_LOGIC;
Led_2 : out STD_LOGIC;
BUS : out STD_LOGIC_VECTOR (7 downto 0));
end Top;

architecture Behavioral of Top is

begin

end Behavioral;

[/code]

Lisätään tuonhon luotuun päätason koodiin laskuri ledin vilkutusta varten. Laskuri saa olla aika leveä johtuen korkeasta kellotaajuudesta (12 MHz), joka tulee piirille FX2:lta. Tässä taidan käyttää 50 bit laskuria mistä johdan muutaman bitin eri ledeille. Ledit otan biteistä 25 ja 20.

Seuraavaksi päivitetty koodi. Jouduin poistamaan Rst signaalin, kun en löytänyt kortilta sitä pikasesti tutkimalla kyseisiä dokumentteja.

[code]----------------------------------------------------------------------------------
– Company:
– Engineer:

– Create Date: 18:13:27 02/14/2011
– Design Name:
– Module Name: Top - Behavioral
– Project Name:
– Target Devices:
– Tool versions:
– Description:

– Dependencies:

– Revision:
– Revision 0.01 - File Created
– Additional Comments:


library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
–library UNISIM;
–use UNISIM.VComponents.all;

entity Top is
Port ( Clk : in STD_LOGIC;
Led_1 : out STD_LOGIC;
Led_2 : out STD_LOGIC;
BUS_Out : out STD_LOGIC_VECTOR (7 downto 0));
end Top;

architecture Behavioral of Top is
signal Timer_Cnt: STD_LOGIC_VECTOR (49 downto 0);
begin

process (Clk)
begin
	if rising_edge(Clk) then
		Timer_Cnt <= Timer_Cnt + "1";
	end if;
end process;

Led_1 <= Timer_Cnt(20);
Led_2 <= Timer_Cnt(25);
BUS_Out <= Timer_Cnt(49 downto 42);

end Behavioral;

[/code]

Ohjelmointi tiedoston generointiin piti tehä muutoksia KNJN Xylo-L korttia varten. Me halutaan bit file syötettäväksi KNJN:n omalle konsoli ohjelmalle. Tällä ohjelmalla pystyy ohjelmoimaan kortilla olevan FPGA piirin ja debuggaamaan kortilla olevaa prossaa.
ISE_Generating_ProgramminFile_Properties.jpg

Pinnien mappaus onnistuu kun valitsee päätason koodi tiedoston aktiiviseki sources ikkunasta ja tämän jälkeen tupla klikkaa Floorplan työkalua “User constraints” alta Processes ikkunasta. Tämä käynnistää Xilinx PACE työkalun, jolla pystyy ainakin mappaan pinnit Drag&Drop tyylillä. Kuvan näkymä saa esille, kun valitsee view alalaidasta “Package View” välilehden. “Architecture View” on defaulttina valittu.
PACE.jpg

PACE työkalu luo .ucf tiedoston, joka näyttää tältä. Periaatteessa tämän voi luoda käsinkin.

[code]#PACE: Start of Constraints generated by PACE

#PACE: Start of PACE I/O Pin Assignments
NET “BUS_Out(0)” LOC = “P140” ;
NET “BUS_Out(1)” LOC = “P139” ;
NET “BUS_Out(2)” LOC = “P138” ;
NET “BUS_Out(3)” LOC = “P137” ;
NET “BUS_Out(4)” LOC = “P135” ;
NET “BUS_Out(5)” LOC = “P134” ;
NET “BUS_Out(6)” LOC = “P133” ;
NET “BUS_Out(7)” LOC = “P132” ;
NET “Clk” LOC = “P181” ;
NET “Led_1” LOC = “P147” ;
NET “Led_2” LOC = “P146” ;

#PACE: Start of PACE Area Constraints

#PACE: Start of PACE Prohibit Constraints

#PACE: End of Constraints generated by PACE
[/code]

Tässä on kehitysympäristö onnistuneen käännöksen jälkeen. Raportin alimmilta riveiltä näkee minkä nimisiä tiedostoja se on luonut ohjelmointia varten. Tuli muuten huomattua, että FPGA käännöksissä toi ISE Web soittelee takasi ja antaa varmaan jotain statistiikka tietoa tuotteen kehitystä varten. Tuota takasi soittelua en huomannut CPLD piirien kohtiilla.
ISE.jpg

Tuosta KNJN Xylo-L kortin ohjelmoinnista kirjoitan toisella kertaa, kun teen FPGA piirin, joka juttelee jotain järkevää ARM prossalle. Seuraavaksi muutama aikasemmin tehdyt esimerkit Coolrunner II piireille.

Esimerkki CPLD projekteja
Muutana yksinkertainen ja ehkä käytännöllisiä esimerkkejä. Esimerkki projektit on kirjoitettu VHDL:llä ja projekti file on ISE 10.1:lle

ATMega 128:lle osoitelinjojen muksaus ja chip enable signaalien luonti.
Piiri: X2C32 44 pinninen versio. 30(max 33) IO:ta käitetty.
Piirin toiminta:
Tämä piiri ottaa 16 bit osoitteen sisään, josta alimmat 8 on osoite + data linjoja. Tämä piiri erottelee alimmat 8 osoite linjaa ALE signaalin mukaan ja muodostaa CE signaalit seuraavin osoite avaruksiin.
CE0 = 0x0000 - 0xFCFF -> Rammia varten
CE1 = 0xFD00 - 0xFDFF -> 256B omaa laitetta varten
CE2 = 0xFE00 - 0xFEFF -> 256B omaa laitetta varten
CE3 = 0xFF00 - 0xFFFF -> 256B omaa laitetta varten

Zippi projektifilestä liitteenä ISE_Generating_ProgramminFile_Properties.jpg

Toinen esimerkki:
Paranneltu versio käyttäen X2C128 (100 pin). Kyktentä pohjautuu edelliseen esimerkkiin, johon lisätty 16 outputtia ledille ja 16 inputtia dip kytkimelle. Nämä on mapattu muistialueen ylimpiin osoitteisiin. Listattu muuttuneet ja uudet osoitteet.
CE3 = 0xFF00 - 0xFFFB
Leds1 = 0xFFFE
Leds2 = 0xFFFF
Dips1 = 0xFFFC
Dips2 = 0xFFFD

Zippi projekti filestä ISE.jpg

Hyviä sivustoja ohjelmoitaviin logiikkapiireihin liittyen.
fpga4fun.com/index.html
opencores.org/

Notes:
Aika väsyneenä osa kirjoitettu. Koitin vähän siistiä tuota, mutta toivon, että tuosta saa selvää. Kohtuullisen painavaa pelkkänä tekstinä.
Pitää miettiä miten noita muita tähän liittyviä artikkeleita teen. Ideana itellä

  • FT2232 pohjainen ohjelmointilaite (JTAG)
  • ARM7 ja FPGA yhdistäminen ja FPGA:n hyödyt
  • Alteran MAX II piirien esittely
    Saa ehottaa muitakin CLPD ja FPGA piireihin liittyviä ideoita.
    Pitää varmaan noita käyttötarkoituksia kopioida toisesta ketjusta, missä oli tästä puhetta.

Edit:
Siistimistä
ISE_Project_1.jpg
ATM_MuxAndReg.zip (766 KB)
ATM_MuxAndCE.zip (850 KB)