Laboration 6 i digitala system ht-16 Sekvensnät i VHDL del 2 Realisering av Mealy och Moore i VHDL............................. Namn............................. Godkänd (datum/sign.)
2 Laborationens syfte ge förståelse för hur sekvensnät kan realiseras med VHDL. ge förståelse för skillnaden mellan Mealy- och Moore-maskiner. ge förståelse för hur testmoduler konstrueras och används vid simulering. ge träning i att beskriva beteendet och strukturen hos en konstruktion med VHDL. Förberedelseuppgifter Studera sidorna 407-415, 420-423 och 429 i läroboken (VHDL). Studera sidorna 91-95 och 213-220 i läroboken (sekvensdetektor). Till laborationen ska du ha ritat tillståndsdiagram för deluppgifterna 1.1 och 2.1. Du ska även ha förslag till VHDL-kod för deluppgifterna 1.3 och 2.3. Laborationsuppgift 1 I föregående laborationer fick du själv ta fram de minimerade uttrycken när du skulle realisera din krets. När man har konstruktioner där signalerna beror på betydligt fler signaler blir processen med Karnaughdiagram snabbt ohanterbar (redan vid 6 variabler blir det svårt att se hur inringningar kan göras). I denna uppgift ska vi därför låta Vivado minimera uttrycken åt oss. Du ska nu konstruera en sekvensdetektor som detekterar mönstret 101 i en godtycklig sekvens hos signalen seq. Då de tre senaste bitarna i insignalsekvensen varit 101 ska sekvensdetektorn generera en etta på utsignalen d, precis som i laborationsuppgift 5.1. Kretsen ska vara av typen Mealy. 1. Rita tillståndsdiagrammet för sekvensdetektorn. 2. Skapa ett nytt projekt i Vivado och lägg till en källfil för sekvensdetektorn. Modulen ska ha tre insignaler, seq, clk och rst, och en utsignal, d. 3. Utgå från tillståndsdiagrammet och beskriv i VHDL hur sekvensdetektorn ska bete sig. Du ska inte använda Karnaughdiagram! All tillståndsuppdatering ska ske vid stigande flank hos clk. Signalen rst ska fungera som en asynkron nollställning av minneselement. 4. Välj Add Sources->Add or create simulation sources och lägg till filen S:\Courses\EIT\EDI610\Laborationer\Lab6\seq_det_tb.vhd
3 Ändra i seq_det_tb så att du genererar insignalen 0100101011 till din modul. Simulera och verifiera konstruktionen. 5. Klicka på Add Sources->Add or create design sources och lägg till filen S:\Courses\EIT\EDI610\Laborationer\Lab6\man_clk.vhd 6. Skapa en ny modul i projektet i vilken du kopplar ihop den manuella klockan, man_clk, och sekvensdetektorn enligt figur 1. Figur 1 7. Syntetisera designen och koppla därefter in strömställare, tryckknapp och lysdiod. 8. Generera konfigurationsfilen och överför den till FPGA:an. Testa konstruktionen. 9. Gör så att de två senaste insignalerna har varit 10, klocka efter varje insignal. Vad händer med utsignalen d om du nu, utan att klocka, ändrar insignalen till 1? 10. Antag att vi har två olika sekvensdetektorer som har samma insignal b och varsin utsignal u 1 respektive u 2. De två konstruktionerna detekterar båda mönstret 101 hos insignalen b. När vi testar detektorerna så får vi följande resultat (sekvenserna läses från vänster till höger) b 01101101100 u 1 00001001000 u 2 00000100100 Vilken typ av maskin är de två sekvensdetektorerna? Mealy eller Moore, motivera!................................................................................................................................................................................ Laborationsuppgift 2 I denna uppgift ska du konstruera en synkron 3-bitars räknare som genererar sekvensen q 2 q 1 q 0 = 000, 001, 010, 011, 100, 101, 110, 111, 000,...
4 Figur 2 och har gränssnitt enligt figur 2. Signalen rst ska vara en asynkron nollställning som tar räknaren till tillståndet q 2 q 1 q 0 = 000. 1. Rita tillståndsdiagrammet för räknaren som ska vara av typen Moore. 2. Skapa ett nytt projekt i Vivado och konstruera din räknare med VHDL (du ska inte använda Karnaughdiagram). 3. Verifiera räknarens funktion genom simulering. Du behöver endast genera en klocksignal till räknaren. Du kan använda samma testmodul som i tidigare uppgift, men glöm inte att ändra i den så att den testar räknaren i stället för sekvensdetektorn. 4. Lägg till den manuella klockan, man_clk.vhd, i projektet. Skapa en ny modul i vilken du koppla ihop modulerna enligt figur 3. Figur 3 5. Anslut utsignalerna till lysdioder, clk_in till E3 och man_in till BTNC. Testa designen på FPGA:an. 6. Räknaren som du konstruerat räknar upp med ett för varje klockflank. Du ska nu lägga till två styrsignaler, S 1 och S 2 till räknaren så att den beter sig enligt följande
5 Om S 1 = 1, räkna upp med två, t.ex. från 001 till 011. Om S 2 = 1, räkna ned med ett, t.ex från 000 till 111. Om S 1 = 0 och S 2 = 0 så ska räknaren stå stilla. S 1 ska ha högre prioritet än S 2 7. Modifiera källfilen för räknaren så att den beter sig enligt ovan. 8. Ändra i testmodulen så att du genererar olika kombinationerna av S 1 och S 2. Simulera och verifiera funktionen hos räknaren. 9. Anslut S 1 och S 2 till två strömställare. Generera konfigurationsfilen, programmera FP- GA:an och testa konstruktionen. Slut!