---
# System prepended metadata

title: 'Ćwiczenia 5, grupa śr. 10-12, 29 marca 2023'
tags: [pwit, ćwiczenia, SYK23]

---

# Ćwiczenia 5, grupa śr. 10-12, 29 marca 2023

###### tags: `SYK23` `ćwiczenia` `pwit`

## Deklaracje

Gotowość rozwiązania zadania należy wyrazić poprzez postawienie X w odpowiedniej kolumnie! Jeśli pożądasz zreferować dane zadanie (co najwyżej jedno!) w trakcie dyskusji oznacz je znakiem ==X== na żółtym tle.

**UWAGA: Tabelkę wolno edytować tylko wtedy, gdy jest na zielonym tle!**



:::danger
|                        | 1     | 2   | 3   | 4   | 5   | 6   | 7   | 8   | 9   | 10  | 11  |
| ----------------------:| ----- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
Mateusz Biłyk            |       |     |     |     |     |     |     |     |     |     |     | 
Mikołaj Dworszczak       |       |     |     |     |     |     |     |     |     |     |     |
Kacper Jóźwiak           |   X   |  X  |  X  |  X  | X   |     |     | X   |     |     |     |
Dominik Kiełbowicz       |  X     | X    | X    | X    |   X  | X    | X    | X    |     |     |     |
Michał Kolasa            |       |     |     |     |     |     |     |     |     |     |     |
Konrad Kowalczyk         |   X   |  X  |  X  |  X  |  X  |     |     |  X  |     |     |     |
Oskar Kropielnicki       |   X   |  X  |  X  |  X  |  X  |  X  |  X  |  X  |     |     |     |
Anna Krysta              |   X   |  X  |  X  |  X  |  X  |  X  |  X  |  X  |  X  |  X  |  X  |
Jakub Krzyżowski         |   X   |  X  |  X  |  X  |     |     |     |     |     |     |     |
Oskar Kubkowski          |  ==X==    |  X  |  X  |  X  | X   |  X  | X   | X   | X   |  X  |     |
Patryk Maciąg            |       |     |     |     |     |     |     |     |     |     |     |
Mateusz Mazur            |    X   |  X   |  X   |  X   |  X   |  ==X==   |  X   |  X   |  X   |  X   |  X   |
Barbara Moczulska        |   X   |  X  |  X  |  X  |  X  |  X  |  X  |  X  |     |     |     |
Kacper Sojda             |   X    |  X   |  ==X==   |  X   |  X   |  X   |  X   |  X   |  X   |   X  |     |
Marta Strzelec           |   X    | ==X==    |  X   | X    |X     | X    | X    | X    |     | X    |     |
Mikołaj Swoboda          |   X   | X   |  X  |  X  |  X  |     |    | X   |   |  X  |    |
Filip Szczepański        |   X    |  X   |  X   |  X   |   X  |  X   |     |  X   |     |  X   |     |
Julian Włodarek          |   X   |  X  |  X  | X   |  X  |  X  |     |  X  |     |  X  |     |
Beata Łakoma             |  x     |   x  |   x  |  x   |   x  |    x |  x   |   x  |     | x    |     |
Michał Łukasik           |   X   |  X  |  X  |  X  |  X  |  X  |  X  |  X  |  X  |  X  |  X  |
:::






:::info
**Uwaga:** Po rozwiązaniu zadania należy zmienić kolor nagłówka na zielony.
:::




## Zadanie 1
:::success
Autor:	Oskar Kubkowski	
:::
![](https://i.imgur.com/cy63rLw.png)
![](https://i.imgur.com/1dxiXto.png)


1. Z licznika rozkazów pobieramy numer aktualnego rozkazu, który chcemy wykonać
2. W Instruction Memory wyszukujemy instrukcję z pamięci i rozbieramy ją na części
3. Control Unit wybiera odpowiednią wartość dla ALUControl i RegWrite (wybiera dla wszystkich odpowiednie)
4. W Register File wyszukujemy wartość rejestru y, która dostaniemy na wyjściu w $RD1$
5. W Sign Extend rozsmarowujemy bit znaku stałej imm, tak żeby miała tyle samo bitów co wartość w rejestrze y
6. w ALU wykonujemy dodawanie wartości y i imm
7. W Data Memory pobieramy wartość zapisaną w rejestrze y+imm
8. W Register File zapisujemy wartość y+imm(WD3) do rejestru x(A3)
9. By przejść do następnej instrukcji zwiększamy licznik rozkazu o 4 (PCPlus4)

## Zadanie 2
:::success
Autor:	Marta Strzelec	
:::

![](https://i.imgur.com/YejgC17.png)
![](https://i.imgur.com/UlPIz9h.png)
Zmiana z poprzednim zadaniem:
WriteData, która odczytuje nam wartośc rejestru X.
MemWrite ustawione na 1, 

1. Dostajemy numer instrukcji zapisany w liczniku rozkazów.
Następnie w Instruction Memory dostajemy odpowiednią instrukcję. 
2. Do Register File wchodzi X na wejściu A1, Y na wejściu A2.
3. Rozszerzamy stałą imm, aby mogła zostać dodana do 32-bitowego rejestru
4. Jednostka arytmetyczno-logiczna wykonuje odpowiednią operację, która została przekazana przez linię sterującą (ALUControl). W tym przypadku jest to dodawanie. Otrzymaliśmy adres, który podajemy do Data Memory
5. Dostajemy odpowiedni sygnal z Control Unit (MemWrite ustawione na 1). W Data Memory zapisujemy pod adresem (x+imm) wartość Y.
6. Aby przejść do następnej instrukcji, zwiększamy licznik rozkazów.


## Zadanie 3
:::success
Autor:	Kacper Sojda	
:::

![](https://i.imgur.com/o4zuoP0.png)
![](https://i.imgur.com/K8Lfc3Y.png)


## Zadanie 4
:::success
Autor:	Kacper Jóźwiak	
:::
![](https://i.imgur.com/zfHdYBW.png)

Po przetworzeniu wartości L, dodajemy ją do bieżącej wartości licznika
rozkazu PC, a wartości x, y dodajemy do przetworzenia przez ALU.

Następnie rozpatrujemy przypadki:
* relacja $x$ relop $y$ jest prawdą -> wysyłamy do MUX, znajdującego się przed zegarem,
sygnał, aby przejść do wskazanego adresu PC + L,
* jest fałszem -> używamy adresu PC + 4.

## Zadanie 5
:::success
Autor:	Konrad Kowalczyk	
:::
![](https://i.imgur.com/J48H8eY.png)
a) x = y binop imm
nie ma potrzeby rozszerzania procesora o nowe elementy, wystarczy jedynie odpowiednio dostosować ścieżkę
![](https://i.imgur.com/ZYOScQx.png)
b) goto L
potrzebne będą dodatkowo:
- magistrala wykonująca przesunięcie bitowe o 2 miejsca (mnożąca przez 4)
- multiplekser do wyrzucania odpowiedniej wartości, jeśli nastąpił lub nie nastąpił skok bezwarunkowy
- dodatkowa linia z układu kontrolnego wysyłająca odpowiedni sygnał do wspomnianego multipleksera
![](https://i.imgur.com/9vRMfAJ.png)

## Zadanie 6
:::success
Autor:	Dominik Kiełbowicz	
:::

a) PC + MEM + REG + ALU + MEM + MUL + REG = 50 + 250 + 150 + 200 + 250 + 25 + 150 = 1075
b) PC + MEM + REG + ALU + MEM = 50 + 250 + 150  + 200 + 250 = 900
c) PC + MEM + REG + MUL + ALU + MUL + REG = 50 + 250 + 150 + 25 + 200 + 25 + 150 = 850
d) PC + MEM + REG + MUL + ALU + MUL = 50 + 250 + 150 + 25 + 200 + 25 = 700
e) PC + MEM + REG + ALU + MUL + REG = 50 + 250 + 150 + 200 + 25 + 150 = 825
f) PC + MEM + CTRL + MUL = 50 + 250 + 50 + 25 = 375

Cykl musi trwać co najmniej tyle ile najdłuższa ścieżka, a więc 1075ps. 

## Zadanie 7
:::success
Autor:	Oskar Kropielnicki	
:::

![](https://i.imgur.com/7CfCqzM.png)

$$(25\% \times t_{\text{x=*(y+imm)}} + 11\% \times t_{\text{*(x+imm)=y}} + 12\% \times t_{\text{if x relop goto L}} + 52\% \times t_{\text{x=y binop z}}) = \\
 (25\% \times 1075 + 11\% \times 900 + 12\% \times 700 + 52\% \times 850) = \\
 = 268.75 + 99 + 84 + 442 = 893.75 \text{ps}$$
 
$$1 - \frac{893.75\text{ps}}{1075\text{ps}} \approx 1 - 83.13\% = 16.87\%$$

## Zadanie 8
:::success
Autor:	Barbara Moczulska	
:::

![](https://i.imgur.com/Rtg6egT.png)
![](https://i.imgur.com/ikAvmXA.png)


Podobne do zadania 1.

- PC - adres -> pamięć instrukcji -> pobranie instrukcji
- przekazanie rejestru y do odczytu A1 w Register File
- przekazanie rejestru z do odczytu A2 w Register File
- W ALU wartości y i z są zsumowane
- wynik trafia do Data Memory jest w trybie odczytu z parametrem WE = 0 (MemWrite)
- dane z adresu A trafiają do Register File (WE3 = 1 = RegWrite) pod rejestr A3 czyli x gdzie zostanie zapisane
- obliczenie adresu następnej instrukcji czyli dodanie 4 bajtów

## Zadanie 9
:::success
Autor:	Mateusz Mazur	
:::

![](https://i.imgur.com/XbMvYrW.png)

Możemy zapisać tylko 1 rejestr jednocześnie, a chcemy 2.
Zatem na wejściu musimy znać 2 adresy rejestrów x, y oraz ich wartości "x","y" do zamiany. Następnie korzystamy z 2 dodatkowych rejestrów x2, który na wejściu dostaje wartość zwracaną przez y, oraz y2 z wartością z x. Na koniec zwracamy wartości rejestrów x2 ("y") oraz y2 ("x").

## Zadanie 10
:::success
Autor:	Filip Szczepański	
:::
![](https://i.imgur.com/TW85535.png)
![](https://i.imgur.com/V1LiO2Z.png)


## Zadanie 11
:::success
Autor:	Michał Łukasik	
:::

![](https://i.imgur.com/O8mjmSi.png)
Obliczmy czas:
x=\*y
50 + 250 + 150 + 250 + 25 + 150 = 875ps
PC + mem + reg + mem + mux + reg

\*x=y
50 + 250 + 150 + 250 = 700ps
PC + mem + reg + mem

wtedy długość cyklu to najdłuższa operacja - 875ps
ale x=\*(y+imm) oraz \*(x+imm)=y trwają 875ps + 875ps = 1750ps

tak jak w zadaniu 7, zakładając długość cyklu równą długości instrukcji, dla tego programu wystarczy obliczyć średnią
x=*(y+imm) => 850ps + 875ps = 1725ps
*(x+imm)=y => 850ps + 700ps = 1550ps

25% * 1725ps + 11% * 1550ps + 12% * 725ps + 52% * 850ps = 1130,75ps

wtedy można obliczyć spowolnienie
1130,75ps / 1075ps ≈ 105%
program spowolni o około 5%