Tak jsem včera narychlo tvořil změnu pinu pro 7i76e tak to sem hodim, protože už sem to vymýšlel podruhý tak at nemusim potreti.
Nejakej mamlas, kterej si hraje na počítači s kdejakym softem jsem dostal pecko s Linuxem do takového stavu, že puvodni data byla fuč.
Potřeboval jsem udělat nový firmware pro 7i76e tak že místo posledního pátého stepgenu bude PWM, který by řidilo laser.
step/dir ma sice dva draty a pwm tři, ale postačej i dva, protože laser tak nejak nepotřebuje vědět směr. Ti padem, jsem vytahl jenom PWM-P a PWM-enable.
PWM-D mizi někde v černé diře uvnitř karty.
Z mě neznámých duvodu není ve vzorovem souboru pro kompilaci ani zminka o tehle karte a co vic, není o ni zminka v souboru cards.py kde je definovano co použít pro samotnou kompilaci, Jaka karta to je, jaky ma procesor, kam davat hotove soubory atd.
takže jako první je potřeba přidat do scripts/cards.py
Kód: Vybrat vše
class i76e(TopEth, DBx4, Spartan6_16_256, BitgenCanFallback):
path = "7i76e"
name = "i76e_x16"
card = "7i76e"
humanname = "Mesa 7i76E"
A potom provezt samotnou zmenu pinu a komponent ve firmware.
nejbližší a vlastně jediný hotovy firware pro 7i76e je PIN_7I76E_51.vhd
ten jsem prekopiroval do PIN_7I76E_51_PWM.vhd a tim padem je potřeba přejmenovat sekci PACKAGE aby odpovídala jmenu souboru
Kód: Vybrat vše
package PIN_7I76E_51_PWM is
.....
.
.
.
.
end package PIN_7I76E_51_PWM;
A ted samotne komponenty
v sekci constant ModuleID : ModuleIDType přidáme záznam pro PWM
(PWMTag, x"00", ClockHighTag, x"01", PWMValAddr&PadT, PWMNumRegs, x"00", PWMMPBitMask),
a odmazneme jeden řádek
(NullTag, x"00", NullTag, x"00", NullAddr&PadT, x"00", x"00", x"00000000"),
tak aby celkový počet zaznamu v sekci zůstal nezmenen.
samozrejme ze z hlavy to psat je nesmysl, takže jsem tento řádek okopiroval z jiného vhdl souboru kde se vyskytuje.
Dál je potřeba snížit počet stepgenu o jeden.
(StepGenTag, x"02", ClockLowTag,
x"04", StepGenRateAddr&PadT, StepGenNumRegs, x"00", StepGenMPBitMask),
tim jsme si zaměnili komponentu stepgen za pwm, ale ještě nam nikde nelezou ven draty.
to udelame v nasledujici sekci constant PinDesc : PinDescType
je to docela dobře citelne a okomentovane. takže staci najit poslední stepgen a nahradit.
IOPortTag & x"00" & StepGenTag & StepGenDirPin, -- I/O 00 embedded 7I76
IOPortTag & x"00" & StepGenTag & StepGenStepPin, -- I/O 01
IOPortTag & x"01" & StepGenTag & StepGenDirPin, -- I/O 02
IOPortTag & x"01" & StepGenTag & StepGenStepPin, -- I/O 03
IOPortTag & x"02" & StepGenTag & StepGenDirPin, -- I/O 04
IOPortTag & x"02" & StepGenTag & StepGenStepPin, -- I/O 05
IOPortTag & x"03" & StepGenTag & StepGenDirPin, -- I/O 06
IOPortTag & x"03" & StepGenTag & StepGenStepPin, -- I/O 07
IOPortTag & x"04" & StepGenTag & StepGenDirPin, -- I/O 08
IOPortTag & x"04" & StepGenTag & StepGenStepPin, -- I/O 09
IOPortTag & x"00" & SSerialTag & SSerialTX0Pin, -- I/O 10
IOPortTag & x"00" & SSerialTag & SSerialRX0Pin, -- I/O 11
IOPortTag & x"00" & SSerialTag & SSerialTX1Pin, -- I/O 12
IOPortTag & x"00" & SSerialTag & SSerialRX1Pin, -- I/O 13
IOPortTag & x"00" & QCountTag & x"03", -- I/O 14
IOPortTag & x"00" & QCountTag & x"02", -- I/O 15
IOPortTag & x"00" & QCountTag & x"01", -- I/O 16
IOPortTag & x"00" & StepGenTag & StepGenDirPin, -- I/O 00 embedded 7I76
IOPortTag & x"00" & StepGenTag & StepGenStepPin, -- I/O 01
IOPortTag & x"01" & StepGenTag & StepGenDirPin, -- I/O 02
IOPortTag & x"01" & StepGenTag & StepGenStepPin, -- I/O 03
IOPortTag & x"02" & StepGenTag & StepGenDirPin, -- I/O 04
IOPortTag & x"02" & StepGenTag & StepGenStepPin, -- I/O 05
IOPortTag & x"03" & StepGenTag & StepGenDirPin, -- I/O 06
IOPortTag & x"03" & StepGenTag & StepGenStepPin, -- I/O 07
IOPortTag & x"00" & PWMTag & PWMAOutPin, -- I/O 08
IOPortTag & x"00" & PWMTag & PWMCEnaPin, -- I/O 09
IOPortTag & x"00" & SSerialTag & SSerialTX0Pin, -- I/O 10
IOPortTag & x"00" & SSerialTag & SSerialRX0Pin, -- I/O 11
IOPortTag & x"00" & SSerialTag & SSerialTX1Pin, -- I/O 12
IOPortTag & x"00" & SSerialTag & SSerialRX1Pin, -- I/O 13
IOPortTag & x"00" & QCountTag & x"03", -- I/O 14
IOPortTag & x"00" & QCountTag & x"02", -- I/O 15
IOPortTag & x"00" & QCountTag & x"01", -- I/O 16
a jak už jsem psal PWMBOutPin není použit.
7i76e ma sice diferencialni vystupy pro step/dir, ale to nam nevadi. když budete merit napeti proti zemi pripadne proti 5V tak na PWM vystupu najdete co potrebujete.
no a ted uz staci jenom vytvořit soubor firmwares-local.txt a napsat do nej
i76e 7I76E_51_PWM
první položka je typ karty a druhej pinout
pinout se pise bez predpony PIN_ a bez přípony.
a ted uz jenom make a za 10-15 minut vypadne hotovej BIT file.
ještě upozornim na to, ze výsledkem kompilace je sice i xml soubor s popisem pinu pro ostatní programy, ale třeba pncconf ho pro tuto kartu neumi pouzit. jina situace je u PCI karet, tam funguje. Ale u ethernetovejch karet proste ne, tam je popis pinu natvrdo zakomponovanej do pnccocnfu. takže to nase nove PWM nejde naklikak do konfigurace,a le je potřeba ho do hal souboru dopsat rucne. Ale to pro nekoho kdo se prokousal az ke kompilaci firmware snad nebude problém.
Preju peknej den.
Martin