Electrokit Buggfix Plus
Aktuellt datum och tid: 09.33 2019-09-16

Alla tidsangivelser är UTC + 1 timme




Svara på tråd  [ 4 inlägg ] 
Författare Meddelande
 Inläggsrubrik: LUT för CPLD
InläggPostat: 09.32 2019-06-12 

Blev medlem: 23.29 2007-02-24
Inlägg: 2025
Ort: Grängesberg
Jag köpte två utvecklingskort (Altera Cyclone 4 FPGA samt Xilinx Coolrunner CPLD) för några år sen men de har bara samlat damm på hyllan sen dess, i brist på testprojekt att pula med. Nu har jag dock hittat ett projekt som jag faktiskt Behöver, och försöker därför dyka ner i träsket. Jag kommer att använda Xilinx CoolRunner XC2C32A (CPLD), ISE 14.1, samt Verilog. Eftersom jag inte kan något av dessa tre har jag en väldig hög tröskel att kliva över, så jag måste bryta ner allt till väldigt små delmål om jag ska komma någon vart.

Det jag vill göra är att återskapa funktionaliteten som finns i en MT8812 (länk: https://www.microsemi.com/document-port ... eet-sept11) , som är en 8x12 Switch Array. Sju ingångar bestämmer exakt en utgång som signalen DATA ska hamna på när STROBE pulsas hög. Det här borde, tycker min humla, inte vara ogenomförbart med en CPLD. Jag vet bara inte riktigt hur ännu.

I mitt fall har jag också sju ingångar, fördelat på en 4-bit AX[3-0] samt en 3-bit AY[2-0]. Utgångar är två 8-bit YA[7-0] samt YB[7-0]. Beroende av alla kombinationer på AX och AY ska exakt en bit i vardera PA/PB påverkas, när och endast när STROBE pulsas. Om RESET sätts ska samtliga utgångar nollas.

Ungefärlig sanningstabell för AX/AY kontra YA/YB:

Bilaga:
CPLD-table.png


Min Verilog-fil har just inget mer än enbart deklarationen, längre än så har jag inte kommit:

Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
module Main(
    output [7:0] PA,
    output [7:0] PB,
    input [3:0] AX,
    input [2:0] AY,
    input STROBE,
    input DATA,
    input RESET
);

endmodule



Frågor:

Vilket är lämpligt sätt att implementera en uppslagstabell enligt den sanningstabell jag har tagit fram för det aktuella projektet? En hord med if-satser? (Jag är i detta begynnelsestadie mer intresserad av fullt läsbar kod jämfört med superkomprimerade quick-n-dirty-hack)

STROBE pulsas externt av en microcontroller. Utöver denna signal, behöver jag en klocksignal till CPLD-kretsen? Databladet för XC2C32A är lite vagt skriven, pinne 1 sägs vara "Global clock" men mer information om klocka hittar jag inte. Jag vet alltså inte om kretsen måste klockas (som en microcontroller), eller om den kan köras ändå.


Logga in för att visa de filer som bifogats till detta inlägg.


Upp
 Profil  
 
 Inläggsrubrik: Re: LUT för CPLD
InläggPostat: 21.40 2019-06-12 
Användarvisningsbild

Blev medlem: 06.56 2009-03-28
Inlägg: 7465
Ort: Göteborg
CASE WHEN och en lång lista med inkombinationerna? Jag tror du kan ha flera omdirigeringar för utsignaler under varje alternativ.


Upp
 Profil  
 
 Inläggsrubrik: Re: LUT för CPLD
InläggPostat: 06.11 2019-06-13 
EF Sponsor
Användarvisningsbild

Blev medlem: 21.43 2006-11-06
Inlägg: 4256
Ort: Munkedal, Sverige (Sweden)
Är inte tröskeln lägre om du ritar ett schema i Xilinx utvecklingssystem
istället för att skriva koden manuellt

Swech


Upp
 Profil  
 
 Inläggsrubrik: Re: LUT för CPLD
InläggPostat: 08.43 2019-06-13 

Blev medlem: 21.06 2011-01-29
Inlägg: 869
Om du hade valt samma logik som MT-kretsen hade det varit ganska enkel kod. Två muxar, två register, och lite klocklogik. Men din sanningstabell verkar ganska konstig och har ingen simpel lösning. Dessutom har du en X-ingång för mycket.

Citera:
Vilket är lämpligt sätt att implementera en uppslagstabell enligt den sanningstabell jag har tagit fram för det aktuella projektet? En hord med if-satser? (Jag är i detta begynnelsestadie mer intresserad av fullt läsbar kod jämfört med superkomprimerade quick-n-dirty-hack)

Använd absolut inte if/else if. Du kommer få extremt långa logikkedjor och hög latency. Använd case istället om du måste ha den där sanningstabellen.

Citera:
STROBE pulsas externt av en microcontroller. Utöver denna signal, behöver jag en klocksignal till CPLD-kretsen? Databladet för XC2C32A är lite vagt skriven, pinne 1 sägs vara "Global clock" men mer information om klocka hittar jag inte. Jag vet alltså inte om kretsen måste klockas (som en microcontroller), eller om den kan köras ändå.

Strobe-signalen blir din klocka. Beroende på hur snabbt du vill köra kan det gå att använda en vanlig IO-pinne, eller så måste du använda en klockpinne. Skriv färdigt koden och simulera innan du du bygger hårdvaran och blir låst med ditt pinval.


Upp
 Profil  
 
Visa inlägg nyare än:  Sortera efter  
Svara på tråd  [ 4 inlägg ] 

Alla tidsangivelser är UTC + 1 timme


Vilka är online

Användare som besöker denna kategori: Krille Krokodil och 3 gäster


Du kan inte skapa nya trådar i denna kategori
Du kan inte svara på trådar i denna kategori
Du kan inte redigera dina inlägg i denna kategori
Du kan inte ta bort dina inlägg i denna kategori
Du kan inte bifoga filer i denna kategori

Sök efter:
Hoppa till:  
   
Drivs av phpBB® Forum Software © phpBB Group
Swedish translation by Peetra & phpBB Sweden © 2006-2010