---
# System prepended metadata

title: 'Konsultacje --- zaliczenie listy 5, 11. kwietnia 2022, g. 14.00'
tags: [SYK21, pwit, ćwiczenia]

---

# Konsultacje --- zaliczenie listy 5, 11. kwietnia 2022, g. 14.00

###### tags: `SYK21` `ćwiczenia` `pwit`

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  |
| -------------------:| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| Magdalena Słonińska | X   | X   | X   | X   | X   | X   | X   |     |     |     |     |
|         Michał Mróz | 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: Magdalena Słonińska
:::

> Pokaż ścieżkę przepływu danych w prostym jednocyklowym procesorze wykonującym instrukcję `x = *(y + imm)`, gdzie `x` i `y` są rejestrami, a `imm` stałą.

Pobieranie danych w ten bardziej ogólny sposób (zamiast po prostu `x := *y`) jest użyteczny przy korzystaniu ze struktur w języku C.

Podstawowe kroki:
* uzyskanie instrukcji `x = *(y + imm)`
* przekazanie nazwy rejestru `y` do odczytu, na wyjściu z segmentu *Register File* otrzymujemy tym sposobem wartość `x`
* przekazanie stałej `imm` do segmentu *Sign Extend*, gdzie zapis stałej jest rozszerzony z 4 bajtów na 16 przez powielenie znaku
* w module ALU (jednostka arytmetyczno-logiczna - serce procesora!) następuje połączenie tej uzyskanej wartości rejetru `y` i rozszerzonej stałej, żeby w wyniku uzyskać sumę `y + imm` (sygnał o tym, że ma nastąpić zsumowanie przychodzi z głównej linii sterującej)
* przekazanie sumy `y + imm` do ostatniego modułu *Data Memory* z parametrem `WRITE ENABLE (WE) = 0` w celu odczytania wartości spod odpowiedniego adresu
* przechwycenie tej wartości i wysłanie z powrotem do *Register File*, aby w końcu zapisać ją do rejestru `x` (`A3` - wejście adresowe przeznaczone do zapisu)
* ostatnia mini-faza to operacja obliczenia kolejnej instrukcji (w skrócie dodanie 4 bajtów do licznika)

![](https://i.imgur.com/Eq5qoQO.jpg)

## Zadanie 2
:::danger
Autor:
:::

## Zadanie 3
:::danger
Autor:
:::

## Zadanie 4
:::success
Autor: Michał Mróz
![](https://i.imgur.com/2nZTnUK.png)

:::

## Zadanie 5
:::success
Autor: Magdalena Słonińska
:::

>  Pokaż, w jaki sposób rozszerzyć prosty jednocyklowy procesor o możliwość wykonywania dwóch nowych typów instrukcji:
a) `x = y binop imm`, gdzie `x` i `y` są rejestrami a `imm` stałą, oraz
b) `goto L`, gdzie `L` jest adresem w pamięci. Instrukcja wykona skok do adresu `L`.
Pokaż ścieżki przepływu danych dla obydwu tych instrukcji.
**Wskazówka:** Procesor ten widoczny jest na slajdzie 27. Nazwiemy go kompletnym jednocyklowym procesorem.

![](https://i.imgur.com/cIsBjvM.jpg)

Ścieżka jest bardo podobna do tej z zadania 3 (z innnym sposobem przetwarzania stałej `imm` zamiast rejestru `z`).

![](https://i.imgur.com/jslR1gr.jpg)

## Zadanie 6
:::danger
Autor:
:::

## Zadanie 7
:::danger
Autor:
:::

## Zadanie 8
:::success
Autor: Michał Mróz
x = *(y + z)
![](https://i.imgur.com/AEdfdRi.png)
:::

## Zadanie 9
:::danger
Autor:
:::

## Zadanie 10
:::danger
Autor:
:::

## Zadanie 11
:::danger
Autor:
:::




