Category

Symulowanie CPU Learn-przez Fixing

po raz ostatni spojrzałem na prosty 16-bitowy procesor RISC skierowany do studentów. Potrzebowało trochę pomocy w dokumentacji, a także brakowało pliku, jednak udało mi się uzyskać, aby symulować korzystanie z bezpłatnego narzędzia do Internetu o nazwie Eda Playground. Tym razem zabiorę Cię do szczegółów kodu, a także dokładnie, jak uruchomić symulację.

Będziesz chciał odnieść się do poprzedniego publikacji, jeśli już go nie sprawdziłeś. Diagramy oraz tabele zapewniają przegląd wysokiego poziomu, który pomoże Ci zrozumieć omawiane w tym poście.

Jeśli chciałeś naprawdę zaprogramować to na prawdziwej FPGA, miałbyś trochę pracy. Pamięć, jak również inicjalizacja rejestru jest wykonywana w sposób, który działa w porządku dla symulacji, jednak nie działałby na prawdziwej FPGA. W każdym razie, zacznijmy!

Plik

Jeśli weźmiesz każdą dane indywidualnie, żaden z nich nie jest niezwykle trudny do zrozumienia. Oto szybki runndown (wykorzystuję nazwy danych, których używam w mojej symulacji internetowej):

Parameter.v – Jest to jak zawierający dane, które ustawiają pewne podstawowe definicje dla każdego innego pliku.

prog.v – jest to pamięć kierunkowa. Prosty moduł, wymaga adresu, a także prezentuje dane dla tego adresu. Dyrektywa $ READMEMB odczytuje dane z danych (Test.PROG).

Zarejestruj się.v – plik rejestru. Jest to prawie jak pamięć kierunkowa, jednak ma dwa sprawdzone porty, jak również możesz do tego komponować.

Data.v – pamięć RAM. Jest to prawie jak rejestry, jak również większe, jak również z jednym zamiennym portem. Istnieje jakiś kod symulacyjny, który otwiera dane, a także drukuje komentarze pamięci, jednak usunęłam, że tak jak było tylko debugowanie. Wstępna zawartość pochodzi z pliku testowego.

Alu.v – wierzę, że byłoby skomplikowane, jednak nie jest. Wystarczy tylko dwa wejścia, a także coś, co wytwarza produkcję. Coś prostego jak dodaje lub odejmuje się. Zawsze @ (*) mówi Verilog, aby nie wyprodukować takiej logiki. Wystarczy włączyć kilka prostych bram, a także mów.

Datapath_unit.v – Jest to jeden z bardziej złożonych plików, chociaż jeśli kopiesz w niej, zobaczysz, że jest to głównie masa. Dane te produkuje wszystkie zasoby (jak rejestry oraz wspomnienia), jak i przewody razem.

CONTROL_UNIT.V – jeden dłuższy moduł, właśnie implementuje tabelę kierunkową, ustawiając linie kontrolne w oparciu o niniejszą instrukcję.

ALUCONTROL.V – Te dane dekoduje instrukcje dla ALU. Brakowało w oryginalnym poście. Dziwne, istnieje jeszcze jeden podobny procesor w tej samej witrynie, który ma plik alucontrol, jednak wyraźnie dla innego zestawu kierunku. Jednak zaczynając zachować te dane, a także wykorzystując tabelę stylu, udało mi się odtworzyć. Jeśli [FPGA4students] poprawia to, pliki mogą wyglądać bardzo inaczej.

Design.sv – Dane te są wymagane dla symulatora EDaplaygroya, używam. Zawiera elementy najwyższego poziomu (ścieżka danych oraz jednostka sterująca). Ponieważ Edaplaygroy przetwarza ten plik, jest to konieczne, aby uwzględnić inne wymienione pliki. Powoduje to pewne ostrzeżenia, ponieważ każdy z nich ma dyrektywę czasową, jednak jest to nieszkodliwe.

testbench.sv – Testbench nie jest częścią prawdziwej konstrukcji, jednak po prostu ustawia symulację, a także zbiera wyniki. Musiałem go trochę zmodyfikować, aby pracować z Edaplaygroustem, jednak operacja jest taka sama. Właśnie wytwarza procesor, karmi go zegar, a także pozwala działać przez chwilę. Program testowy, a także zawartość pamięci znajdują się w Test.Prog, a także test.data.

Symulacja

Możesz zrobić jedną z dwóch rzeczy. Możesz otworzyć moją kopię gotową do stylu, ale może jednak nie być twoją najlepszą opcją. Zaproponowałem, że udaj się do Edaplaygroygrouba i wyprodukowałem nowy projekt Verilog. Następnie zacznij przenosić pliki z oryginalnego postu. Wprowadzisz w błędy, a także brakujące pliki. Zobacz dokładnie, ile możesz naprawić. Jeśli zostaniesz zakłopotany, możesz użyć mojej kopii, aby pomóc Ci, jeśli zostaniesz zakłopotany. Dowiesz się więcej w ten sposób.

Jeśli zdecydujesz się spróbować, prawda tutaj jest kilka wskazówek o Edaplaygrouba. Nie ma potrzeby wybranych UVM / OVM, ani nie wymagacie żadnego rodzaju innych bibliotek. Wykorzystałem ICARUS Verilog 0.9.7, jednak najprawdopodobniej możesz wykorzystać dowolny typ dostępnych narzędzi Verilog. Chcesz sprawdzić pole wyboru EPWAVE, a także wymaga, aby dodać to do wewnętrznej części Testbench:

Inicjał
zaczynać
$ dumpfile (“dump.vcd”);
$ dumpvars;
Użyj wskazania + obok kart danych, aby utworzyć nowe pliki. Edaplaygroygroy ma limit dziesięciu plików na panel. Pamiętaj, że będziesz musiał dołączyć dowolny typ plików .v, które produkujesz w wersji testowej. Nie wymagasz włączenia plików danych, ponieważ pozostałe pliki wykorzystują je pośrednio.

Biegać!

Po wypracowaniu wszystkich błędów można nacisnąć, a także dostaniesz przeglądarki przebiegu, epwa. Ty hav.E Aby dodać sygnały odsetek, dzięki czemu można obejrzeć procesor w pracy. Bawisz się, że dodanie niektórych urządzeń we / wy w pamięci lub niektóre porty debugujące, dzięki czemu można oglądać rzeczy trochę lepiej. Zwykle oglądam licznik programu, a także rejestr skomponowany port, aby uzyskać koncepcję tego, co dzieje się w środku.

Oryginalny kod miał program, który sprawował wiele instrukcji. Skomentowałem to, jak również zastąpiło to:

0000_0100_0000_0000 // 0000: Tony R0 <- MEM (R2 + 0) Od R2 = 0 Dotyczy to 1 w R0 0000_0100_0100_0000 // 0002: tony dokładnie w R1 (R1 zawsze będzie zawierał 1) // miejsce 8 (bajt), 4 (słowo): 0010_0000_0101_0000 // 0004: R2 = R0 + R1 0001_0010_1000_0000 // 0006: MEM [R1] = R2 (czyli MEM [1] = R2 0000_0010_0000_0000 // 0008: R0 = MEM [R1] 1101_0000_0000_0011 // 000a: Przejdź do miejsca # 4 (CPU pomnoży przez 2, a także dodać 2) // nie ma kierunku na 000c, jednak PC wisi tam podczas przetwarzania Powinieneś być w stanie spełnić wartość zwiększającą komponowanie pamięci, a także oglądać cykl licznika programu z powrotem na miejsce 4 z każdą pętlę. Oto typowa sesja: Zostawiłem wiele sygnałów wewnętrznych, jednak widać, że adres pamięci 1 jest ustawiony na 2, a następnie do 3 na pierwszych dwóch iteracjach pętli. Koniec gry Czy to świetny procesor akademicki? Nie jestem pewny. Istnieją jednak pewne prostsze procesy, jednak są często mało, ponieważ są trudne lub są niezwykle niepraktyczne. Coś bardziej wymagającego niż jest to najprawdopodobniej wiele do odegania dla początkujących. Chociaż wierzę, że powinieneś mieć trochę zrozumienia fundamentalnego Verilog przed rozwiązaniem czegoś takiego, dokumentacja była trochę rzadka (i myląca) w niektórych obszarach. Oczywiście było to bardzo wystarczające, ponieważ mam to na miejscu, jednak jeśli po prostu zaczynasz, najprawdopodobniej doceniasz trochę więcej pomocy, a także wyjaśnienia. Czy masz preferowany procesor w Verilog akademickim? Nadal szukam, że osoba, która jest "w porządku".