LUT för CPLD
Postat: 12 juni 2019, 10:32:45
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:
Min Verilog-fil har just inget mer än enbart deklarationen, längre än så har jag inte kommit:
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å.
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:
Min Verilog-fil har just inget mer än enbart deklarationen, längre än så har jag inte kommit:
Kod: Markera allt
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å.