Prosty model windy

Zdjęcie modelu windy

Zadanie: Napisać kod sterujący prostym modelem windy. Winda ma 3 piętra. Naciśnięcie przycisku powinno spowodować przemieszczenie się windy do odpowiedniego piętra. Na wyświetlaczu należy wyświetlić piętro. Polaryzacje sygnałów opisano w pliku ucf (patrz poniżej).

Wskazówka: Aby zapobiec zawieszaniu się układu, sygnały z czujników i przycisków powinny być odfiltrowane poprzez przynajmniej 2 przerzutniki.

Dodatkowe możliwości ulepszenia projektu (dla chętnych):

  1. Po zaprogramowaniu układu i wyjściu ze stanu reset, układ powinien sam poszukać pozycji początkowej, bez względu na aktualne położenie windy. Należy wziąć pod uwagę, że winda może znajdować się poniżej piętra 0 lub powyżej piętra 2.
  2. Podczas jazdy widny, na wyświetlaczu wyświetla się kierunek jazdy na przemian z aktualnym piętrem.
  3. Można dodać przyciski (sterowane z komputera), które będą symulować klawiaturę wewnątrz windy. Należy wtedy rozwiązać konflikty pomiędzy rozkazami przychodzącymi z przycisków od ludzi czekających na windę a rozkazami z klawiatury od człowieka jadącego windą.

Film pokazujący działanie windy (do odtworzenia filmu potrzebny jest QuickTime 5.0 firmy Apple).

Prosty model windy

Plik ucf do zadania, płytka XS40, układ XC4010XL PC84:
NET clk LOC=P13;
NET rst LOC=P44;
NET button_i<0> LOC=P50; # active low
NET button_i<1> LOC=P41; # active low
NET button_i<2> LOC=P40; # active low
NET sensor_i<0> LOC=P57; # active high
NET sensor_i<1> LOC=P56; # active high
NET sensor_i<2> LOC=P51; # active high
NET led_o<0> LOC=P25; # active high
NET led_o<1> LOC=P26; # active high
NET led_o<2> LOC=P24; # active high
NET led_o<3> LOC=P20; # active high
NET led_o<4> LOC=P23; # active high
NET led_o<5> LOC=P18; # active high
NET led_o<6> LOC=P19; # active high
NET run_o LOC=P58; # active low
NET up_dn_o LOC=P59; # low=up high=down
# disable RAM and CPU:
NET cpu_rst LOC=P36;
NET ram_cs LOC=P65;