Nie widze innej metody na zapisanie danych "w locie". Zbocze narastajace nWE musi wystąpić raz na okres zegara przecież. Piszesz, że to twój ulubiony moment walki ?!? A jak walczyć? Jeżeli już wiem, który sygnał powoduje błąd to jak go wyeliminować?
raczej adres NIE moze sie zmieniac na obu zboczach :) musisz zapewnic stabilny adres co najmnie 0ns przed opadajacym zboczem we i co najmniej 0ns po rosnacym zboczem;
optymista jestes; one-hot jest zwykle szybszym kodowaniem, a to sugeruje, ze poprawne dzialanie zalezy od jakis opoznien w fpga, nieprzewidywalnych i co wazniejsze niepowtarzalnych; moze sie zdarzyc, ze na 5 kosciach bedzie dzialac, na szostej nie bedzie; albo odwrotnie;
ta szpilka swiadczy o zlym rozwiazaniu; domyslam sie, ze nWriteEnable to nWR, czyli 'aktywny' jest puls: H-L-H; czyli bardziej pogladowo byloby: !nWriteEnable <= !nWriteToMem AND !Clock AND nReadFromMem; szpilka wynika prawdopodobnie z tego, ze nWriteToMem lub nReadFromMem tez jest zapisywany opadajacym zboczem Clock, a to jest pewnie efektem tego, ze fsm pedzisz odwroconym zegarem; a ten xilinx ma pll w sobie ? JA
Chodzi o to, ze przy logice kombinatoryjnej generujesz opoznienia ktore sa przenoszone 'dalej'. Zmniejsza to Fmax (nie ma duzego znaczenia dla CPLD, ale w fpga to czasem jest 'killer' predkosci).
Jak musi, to o tym wiesz. Jak o tym wiesz, to zrob ladnego if coby dff wygenerowal - 90% ze rozwiazesz sprawe (nawet bez wdawania sie w szczegoly).
Nie masz sygnalu ktory powoduje blad. Masz po prostu blad w projekcie (cos jak memory leak przy pisaniu programow). Po prostu nie zawsze sie objawia.
Nie da rady nic wiecej powiedziec nie widzac kodu - wiec proponuje EOT.
Aha: sprawdz to jeszcze raz zanim zrobisz tego 10.000 sztuk ;-)
ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here.
All logos and trade names are the property of their respective owners.