Witam
Problem który tu opiszę miałem już wielokrotnie, pewne jest że jest jakaś zasada/metoda opisu której nie znam. Najpierw przedstawię kod:
Drugi proces generuje mi impulsy i kierunek. W zmiennej sSTEPCNT mam licznik impulsów. Tam wszystko chodzi bez zarzutu. Błąd mam w pierszym procesie. Mam tam sygnał sHOMINGcnt, który muszę zerować na zmianę sygnału sHomPin . Oprócz tego dla procesu sygnałem zegarowym jest sSTEPCNT bo na jego zmianę ma się zmieniać też sHOMINGcnt. I niby w symulacji wszystko działa ale w układzie już nie, raz działa raz nie. DZiwne rzeczy tam się dzieją, czasami to wygląda jakby wogóle nie wykrył zmiany tego pinu, czasami jakby z opóźnieniem. Nie wiem jak to porządnie napisać. Zrobiłem teraz tak : if (sHomPin /= sHomPrev) a poniżej jest zatrzaskiwana poprzednia wartość zbocza (w C bym tak zrobił tu mi się to średnio podoba). Nie wiem czy sekwencyjność procesu tu dobrze działa. XST generuje mi warning:
WARNING:Xst:646 - Signal <sHomPrev> is assigned but never used. This unconnected signal will be trimmed during the optimization process.
a Synplify:
@W: CL169 :"E:\Proj\Xilinx\stepdir\stepdir.vhd":70:2:70:3|Pruning Register sHomPrev
@W: CL159 :"E:\Proj\Xilinx\stepdir\stepdir.vhd":30:5:30:13|Input HOMING_ST is unused
Nie wiem jak to zrobić żeby syntezator wiedział o co mi chodzi, i co mu się nie podoba w moim zapisie. Proszę bardziej doświadczonych kolegów o pomoc.
Pozdrawiam
Problem który tu opiszę miałem już wielokrotnie, pewne jest że jest jakaś zasada/metoda opisu której nie znam. Najpierw przedstawię kod:
sHomPin <= HOMING_ST;
process (sRST,sSTEPCNT(0),sHomPrev,sHomPin,sDIR)
begin
if (sRST = '1') then
sHOMINGcnt <= (others => '0');
sHomPrev <= not sHomPin;
elsif (sSTEPCNT(0)'event and sSTEPCNT(0) = '1') then
if (sHomPin /= sHomPrev) then
sHOMINGcnt <= (others => '0');
end if;
if (sDIR = '0') then
sHOMINGcnt <= sHOMINGcnt + '1';
else
sHOMINGcnt <= sHOMINGcnt - '1';
end if;
sHomPrev <= sHomPin;
end if;
end process;
process (sRST,CLK)
begin
if (sRST = '1') then
...
elsif (CLK'event and CLK = '1') then
...
sSTEP <= not sSTEP;
if (sDIR = '0') then
sSTEPCNT <= sSTEPCNT + '1';
else
sSTEPCNT <= sSTEPCNT - '1';
end if;
end if;
...
end if;
end if;
end process;Drugi proces generuje mi impulsy i kierunek. W zmiennej sSTEPCNT mam licznik impulsów. Tam wszystko chodzi bez zarzutu. Błąd mam w pierszym procesie. Mam tam sygnał sHOMINGcnt, który muszę zerować na zmianę sygnału sHomPin . Oprócz tego dla procesu sygnałem zegarowym jest sSTEPCNT bo na jego zmianę ma się zmieniać też sHOMINGcnt. I niby w symulacji wszystko działa ale w układzie już nie, raz działa raz nie. DZiwne rzeczy tam się dzieją, czasami to wygląda jakby wogóle nie wykrył zmiany tego pinu, czasami jakby z opóźnieniem. Nie wiem jak to porządnie napisać. Zrobiłem teraz tak : if (sHomPin /= sHomPrev) a poniżej jest zatrzaskiwana poprzednia wartość zbocza (w C bym tak zrobił tu mi się to średnio podoba). Nie wiem czy sekwencyjność procesu tu dobrze działa. XST generuje mi warning:
WARNING:Xst:646 - Signal <sHomPrev> is assigned but never used. This unconnected signal will be trimmed during the optimization process.
a Synplify:
@W: CL169 :"E:\Proj\Xilinx\stepdir\stepdir.vhd":70:2:70:3|Pruning Register sHomPrev
@W: CL159 :"E:\Proj\Xilinx\stepdir\stepdir.vhd":30:5:30:13|Input HOMING_ST is unused
Nie wiem jak to zrobić żeby syntezator wiedział o co mi chodzi, i co mu się nie podoba w moim zapisie. Proszę bardziej doświadczonych kolegów o pomoc.
Pozdrawiam