<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="sr">
	<id>https://siwiki.rs/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Gase273</id>
	<title>SI Wiki - Кориснички доприноси [sr]</title>
	<link rel="self" type="application/atom+xml" href="https://siwiki.rs/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Gase273"/>
	<link rel="alternate" type="text/html" href="https://siwiki.rs/wiki/%D0%9F%D0%BE%D1%81%D0%B5%D0%B1%D0%BD%D0%BE:%D0%94%D0%BE%D0%BF%D1%80%D0%B8%D0%BD%D0%BE%D1%81%D0%B8/Gase273"/>
	<updated>2026-06-04T09:25:58Z</updated>
	<subtitle>Кориснички доприноси</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%81%D0%BA%D0%B8_%D0%BF%D1%80%D0%B5%D0%B2%D0%BE%D0%B4%D0%B8%D0%BE%D1%86%D0%B8_1/%D0%88%D0%B0%D0%BD%D1%83%D0%B0%D1%80_2018&amp;diff=7705</id>
		<title>Програмски преводиоци 1/Јануар 2018</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%81%D0%BA%D0%B8_%D0%BF%D1%80%D0%B5%D0%B2%D0%BE%D0%B4%D0%B8%D0%BE%D1%86%D0%B8_1/%D0%88%D0%B0%D0%BD%D1%83%D0%B0%D1%80_2018&amp;diff=7705"/>
		<updated>2024-06-25T09:21:59Z</updated>

		<summary type="html">&lt;p&gt;Gase273: /* Rešenje */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
&#039;&#039;&#039;Ispit u januarskom roku 2018. godine&#039;&#039;&#039; održan je 28. januara. Postavka roka je dostupna [http://ir4pp1.etf.rs/Rokovi/2021-2022/pp1-januar-2021-22.pdf sa stranice predmeta.]&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Data gramatika sa skupom terminala {+ - N * X ↑} opisuje polinom (na primer -5*X↑2+3*X-1).&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Transformisati gramatiku u LL(1) gramatiku.&lt;br /&gt;
# Dodati LL(1) gramatici attribute da se izračuna vrednost polinoma za zadatu vrednost X. Pri tome, zadata vrednost X se prosleđuje kao nasleđeni atribut &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; neterminala &amp;amp;lt;P&amp;gt;&amp;lt;sub&amp;gt;x,y&amp;lt;/sub&amp;gt;, a vrednost polinoma treba da se dobije kao sintetizovani atribut y istog neterminala. Dodatno, terminal N&amp;lt;sub&amp;gt;k&amp;lt;/sub&amp;gt; ima atribut &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; koji predstavlja celobrojnu vrednost. Ostali terminali nemaju atribute.&lt;br /&gt;
# Za LL(1) gramatiku sa atributima dobijenu pod b) prikazati delove parsera na principu rekurzivnog spusta: proceduru main i delove parsera koji odgovaraju smenama za neterminale &amp;amp;lt;P&amp;gt; i &amp;amp;lt;XnaN&amp;gt;. Ostatak parsera ne navoditi. Koristiti funkciju advance(attr) koja vraća kao rezultat sledeći token sa ulaza i dodatno vraća kroz parameter attr vrednost atributa tog tokena (0 ako token nema atribut).&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
# &amp;amp;lt;P&amp;gt; → &amp;amp;lt;P&amp;gt; &amp;amp;lt;T&amp;gt;&lt;br /&gt;
# &amp;amp;lt;P&amp;gt; → &amp;amp;lt;T&amp;gt;&lt;br /&gt;
# &amp;amp;lt;T&amp;gt; → + N &amp;amp;lt;XnaN&amp;gt;&lt;br /&gt;
# &amp;amp;lt;T&amp;gt; → - N &amp;amp;lt;XnaN&amp;gt;&lt;br /&gt;
# &amp;amp;lt;XnaN&amp;gt; → * X&lt;br /&gt;
# &amp;amp;lt;XnaN&amp;gt; → * X ↑ N&lt;br /&gt;
# &amp;amp;lt;XnaN&amp;gt; → ε&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
# &amp;amp;lt;P&amp;gt;&amp;lt;sub&amp;gt;x,y&amp;lt;/sub&amp;gt; → &amp;amp;lt;T&amp;gt;&amp;lt;sub&amp;gt;x&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;,y&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/sub&amp;gt; &amp;amp;lt;P&#039;&amp;gt;&amp;lt;sub&amp;gt;x&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;,y&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
#: SELECT(1) = {+, -}&lt;br /&gt;
#: &amp;lt;math&amp;gt;x_1 \larr x&amp;lt;/math&amp;gt;&lt;br /&gt;
#: &amp;lt;math&amp;gt;x_2 \larr x&amp;lt;/math&amp;gt;&lt;br /&gt;
#: &amp;lt;math&amp;gt;y \larr y_1 + y_2&amp;lt;/math&amp;gt;&lt;br /&gt;
# &amp;amp;lt;P&#039;&amp;gt;&amp;lt;sub&amp;gt;x,y&amp;lt;/sub&amp;gt; → &amp;amp;lt;T&amp;gt;&amp;lt;sub&amp;gt;x&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;,y&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/sub&amp;gt; &amp;amp;lt;P&#039;&amp;gt;&amp;lt;sub&amp;gt;x&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;,y&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
#: SELECT(2) = {+, -}&lt;br /&gt;
#: &amp;lt;math&amp;gt;x_1 \larr x&amp;lt;/math&amp;gt;&lt;br /&gt;
#: &amp;lt;math&amp;gt;x_2 \larr x&amp;lt;/math&amp;gt;&lt;br /&gt;
#: &amp;lt;math&amp;gt;y \larr y_1 + y_2&amp;lt;/math&amp;gt;&lt;br /&gt;
# &amp;amp;lt;P&#039;&amp;gt;&amp;lt;sub&amp;gt;x,y&amp;lt;/sub&amp;gt; → ε&lt;br /&gt;
#: SELECT(3) = {─┤}&lt;br /&gt;
#: &amp;lt;math&amp;gt;y \larr 0&amp;lt;/math&amp;gt;&lt;br /&gt;
# &amp;amp;lt;T&amp;gt;&amp;lt;sub&amp;gt;x,y&amp;lt;/sub&amp;gt; → + N&amp;lt;sub&amp;gt;k&amp;lt;/sub&amp;gt; &amp;amp;lt;XnaN&amp;gt;&amp;lt;sub&amp;gt;x&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;,y&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
#: SELECT(4) = {+}&lt;br /&gt;
#: &amp;lt;math&amp;gt;x_1 \larr x&amp;lt;/math&amp;gt;&lt;br /&gt;
#: &amp;lt;math&amp;gt;y \larr k \cdot y_1&amp;lt;/math&amp;gt;&lt;br /&gt;
# &amp;amp;lt;T&amp;gt;&amp;lt;sub&amp;gt;x,y&amp;lt;/sub&amp;gt; → - N&amp;lt;sub&amp;gt;k&amp;lt;/sub&amp;gt; &amp;amp;lt;XnaN&amp;gt;&amp;lt;sub&amp;gt;x&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;,y&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
#: SELECT(5) = {-}&lt;br /&gt;
#: &amp;lt;math&amp;gt;x_1 \larr x&amp;lt;/math&amp;gt;&lt;br /&gt;
#: &amp;lt;math&amp;gt;y \larr -k \cdot y_1&amp;lt;/math&amp;gt;&lt;br /&gt;
# &amp;amp;lt;XnaN&amp;gt;&amp;lt;sub&amp;gt;x,y&amp;lt;/sub&amp;gt; → * X &amp;amp;lt;Na&amp;gt;&amp;lt;sub&amp;gt;x&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;,y&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
#: SELECT(6) = {*}&lt;br /&gt;
#: &amp;lt;math&amp;gt;x_1 \larr x&amp;lt;/math&amp;gt;&lt;br /&gt;
#: &amp;lt;math&amp;gt;y \larr y_1&amp;lt;/math&amp;gt;&lt;br /&gt;
# &amp;amp;lt;XnaN&amp;gt;&amp;lt;sub&amp;gt;x,y&amp;lt;/sub&amp;gt; → ε&lt;br /&gt;
#: SELECT(7) = {+, -, ─┤}&lt;br /&gt;
#: &amp;lt;math&amp;gt;y \larr 1&amp;lt;/math&amp;gt;&lt;br /&gt;
# &amp;amp;lt;Na&amp;gt;&amp;lt;sub&amp;gt;x,y&amp;lt;/sub&amp;gt; → ↑ N&amp;lt;sub&amp;gt;k&amp;lt;/sub&amp;gt;&lt;br /&gt;
#: SELECT(8) = {↑}&lt;br /&gt;
#: &amp;lt;math&amp;gt;y \larr x^k&amp;lt;/math&amp;gt;&lt;br /&gt;
# &amp;amp;lt;Na&amp;gt;&amp;lt;sub&amp;gt;x,y&amp;lt;/sub&amp;gt; → ε&lt;br /&gt;
#: SELECT(9) = {+, -, ─┤}&lt;br /&gt;
#: &amp;lt;math&amp;gt;y \larr 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Predstaviti memorijski raspored, u vreme izvršavanja programa, objekata c1, c2, d1 i d2 i odgovarajućih virtuelnih tabela.&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
class A           { int a = 0; int f() {...} }&lt;br /&gt;
class B extends A { int g (){...} }&lt;br /&gt;
class C extends B { int g (){...} }&lt;br /&gt;
class D extends B { int b = 0; int f (){...} }&lt;br /&gt;
C c1 = new C(); C c2 = new C();&lt;br /&gt;
D d1 = new D(); D d2 = new D();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Nacrtati izgled run time steka programa i navesti sekvencu koda za formiranje pristupne veze procedure P4 (ostatak pozivne sekvence ne navoditi). Procedure P3 i P4 su ugneždene u proceduru P2, koja je ugneždena u proceduru P1. Iz P1 se poziva P2, iz P2 se poziva P3, iz P3 se poziva P4.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
[[Датотека:PPR januar 2018 zadatak 2 stek.svg|thumb|Stek u drugom zadatku.]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Raspored statičkog dela memorije u vreme izvršavanja.&lt;br /&gt;
! Adresa !! Vrednost&lt;br /&gt;
|-&lt;br /&gt;
| 0      || Adresa c1&lt;br /&gt;
|-&lt;br /&gt;
| 1      || Adresa c2&lt;br /&gt;
|-&lt;br /&gt;
| 2      || Adresa d1&lt;br /&gt;
|-&lt;br /&gt;
| 3      || Adresa d2&lt;br /&gt;
|-&lt;br /&gt;
| 4      || &amp;quot;f&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 5      || -1&lt;br /&gt;
|-&lt;br /&gt;
| 6      || Adresa A::f&lt;br /&gt;
|-&lt;br /&gt;
| 7      || -2&lt;br /&gt;
|-&lt;br /&gt;
| 8      || &amp;quot;f&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 9      || -1&lt;br /&gt;
|-&lt;br /&gt;
| 10     || Adresa A::f&lt;br /&gt;
|-&lt;br /&gt;
| 11     || &amp;quot;g&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 12     || -1&lt;br /&gt;
|-&lt;br /&gt;
| 13     || Adresa B::g&lt;br /&gt;
|-&lt;br /&gt;
| 14     || -2&lt;br /&gt;
|-&lt;br /&gt;
| 15     || &amp;quot;f&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 16     || -1&lt;br /&gt;
|-&lt;br /&gt;
| 17     || Adresa A::f&lt;br /&gt;
|-&lt;br /&gt;
| 18     || &amp;quot;g&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 19     || -1&lt;br /&gt;
|-&lt;br /&gt;
| 20     || Adresa C::g&lt;br /&gt;
|-&lt;br /&gt;
| 21     || -2&lt;br /&gt;
|-&lt;br /&gt;
| 22     || &amp;quot;f&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 23     || -1&lt;br /&gt;
|-&lt;br /&gt;
| 24     || Adresa D::f&lt;br /&gt;
|-&lt;br /&gt;
| 25     || &amp;quot;g&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 26     || -1&lt;br /&gt;
|-&lt;br /&gt;
| 27     || Adresa B::g&lt;br /&gt;
|-&lt;br /&gt;
| 28     || -2&lt;br /&gt;
|}&lt;br /&gt;
Kod sa procedurama o kojima je reč bi izgledao ovako:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure P1&lt;br /&gt;
    procedure P2&lt;br /&gt;
        procedure P3&lt;br /&gt;
        begin&lt;br /&gt;
            P4();&lt;br /&gt;
        end&lt;br /&gt;
        procedure P4&lt;br /&gt;
        begin&lt;br /&gt;
            ...&lt;br /&gt;
        end&lt;br /&gt;
    begin&lt;br /&gt;
        P3();&lt;br /&gt;
    end&lt;br /&gt;
begin&lt;br /&gt;
    P2();&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Pošto su P3 i P4 na istom leksičkom nivou, a P3 poziva P4, formiranje pristupne veze postiže se sa &amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot; inline&amp;gt;PUSH [BP+04]&amp;lt;/syntaxhighlight&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== 3. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Neka je s&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; sekvenca koju prihvata automat (1), s&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; sekvenca koju prihvata automat (2), a s&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; sekvenca koju prihvata automat (3).&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Konstruisati nedeterministički konačni automat koji prihvata sekvence opisane regularnim izrazom s&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;(s&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;|s&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;).&lt;br /&gt;
# Dobijeni NKA iz tačke a) konvertovati u deterministički konačni automat.&lt;br /&gt;
# Za dobijeni DKA u tački b) proveriti da li je minimalan i, ukoliko je potrebno, sprovesti proces minimizacije.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Automat (1).&lt;br /&gt;
! Stanje !! 0 !! 1 !! Prihvata&lt;br /&gt;
|-&lt;br /&gt;
| → A    || A || C || 1&lt;br /&gt;
|-&lt;br /&gt;
| B      || A || B || 0&lt;br /&gt;
|-&lt;br /&gt;
| C      || B || C || 1&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Automat (2).&lt;br /&gt;
! Stanje !! 0 !! 1 !! 2 !! Prihvata&lt;br /&gt;
|-&lt;br /&gt;
| → D    || D || D || E || 0&lt;br /&gt;
|-&lt;br /&gt;
| E      || D || E || E || 1&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Automat (3).&lt;br /&gt;
! Stanje !! 2 !! 3 !! Prihvata&lt;br /&gt;
|-&lt;br /&gt;
| → F    || F || G || 1&lt;br /&gt;
|-&lt;br /&gt;
| G      || G || F || 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Nedeterministički konačni automat&lt;br /&gt;
! Stanje    !! 0       !! 1       !! 2    !! 3 !! Prihvata&lt;br /&gt;
|-&lt;br /&gt;
| → A, D, F || A, D, F || C, D, F || E, F || G || 1&lt;br /&gt;
|-&lt;br /&gt;
| C, D, F   || B, D    || C, D, F || E, F || G || 1&lt;br /&gt;
|-&lt;br /&gt;
| E, F      || D       || E       || E, F || G || 1&lt;br /&gt;
|-&lt;br /&gt;
| G         ||         ||         || G    || F || 0&lt;br /&gt;
|-&lt;br /&gt;
| B, D      || A, D, F || B, D    || E    ||   || 0&lt;br /&gt;
|-&lt;br /&gt;
| D         || D       || D       || E    ||   || 0&lt;br /&gt;
|-&lt;br /&gt;
| E         || D       || E       || E    ||   || 1&lt;br /&gt;
|-&lt;br /&gt;
| F         ||         ||         || F    || G || 1&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Deterministički konačni automat&lt;br /&gt;
! Stanje !! 0  !! 1  !! 2  !! 3  !! Prihvata&lt;br /&gt;
|-&lt;br /&gt;
| → S1   || S1 || S2 || S3 || S4 || 1&lt;br /&gt;
|-&lt;br /&gt;
| S2     || S5 || S2 || S3 || S4 || 1&lt;br /&gt;
|-&lt;br /&gt;
| S3     || S6 || S7 || S3 || S4 || 1&lt;br /&gt;
|-&lt;br /&gt;
| S4     ||    ||    || S4 || S8 || 0&lt;br /&gt;
|-&lt;br /&gt;
| S5     || S1 || S5 || S7 ||    || 0&lt;br /&gt;
|-&lt;br /&gt;
| S6     || S6 || S6 || S7 ||    || 0&lt;br /&gt;
|-&lt;br /&gt;
| S7     || S6 || S7 || S7 ||    || 1&lt;br /&gt;
|-&lt;br /&gt;
| S8     ||    ||    || S8 || S4 || 1&lt;br /&gt;
|}&lt;br /&gt;
Navedeni deterministički konačni automat je već minimalan.&lt;br /&gt;
&lt;br /&gt;
== 4. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Za programski fragment napisati odgovarajući troadresni međukod u SSA formi i dati graf toka kontrole na nivou bazičnih blokova.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
void insertionSort(int arr[], int n)&lt;br /&gt;
{&lt;br /&gt;
    int i, key, j;&lt;br /&gt;
    i = 1;&lt;br /&gt;
    while (i &amp;lt; n)&lt;br /&gt;
    {&lt;br /&gt;
        key = arr[i];&lt;br /&gt;
        j = i-1;&lt;br /&gt;
        while (j &amp;gt;= 0 &amp;amp;&amp;amp; arr[j] &amp;gt; key)&lt;br /&gt;
        {&lt;br /&gt;
            arr[j+1] = arr[j];&lt;br /&gt;
            j = j-1;&lt;br /&gt;
        }&lt;br /&gt;
        arr[j+1] = key;&lt;br /&gt;
        i++;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
[[Датотека:PPR januar 2018 zadatak 4 graf.svg|thumb|center|500px|Graf toka kontrole u četvrtom zadatku.]]&lt;br /&gt;
&lt;br /&gt;
== 5. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Data je sledeća gramatika:&lt;br /&gt;
# &amp;amp;lt;S&amp;gt; → &amp;amp;lt;S&amp;gt; , &amp;amp;lt;A&amp;gt;&lt;br /&gt;
# &amp;amp;lt;S&amp;gt; → 1 &amp;amp;lt;A&amp;gt;&lt;br /&gt;
# &amp;amp;lt;A&amp;gt; → ( &amp;amp;lt;S&amp;gt; )&lt;br /&gt;
# &amp;amp;lt;A&amp;gt; → 0&lt;br /&gt;
# &amp;amp;lt;A&amp;gt; → ε&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Konstruisati karakteristični LR(0) automat za datu gramatiku i kontrolnu tabelu SLR(1) parsera.&lt;br /&gt;
# Prikazati LALR(1) predikcione skupove konfiguracija u početnom stanju LR(0) automata i svim stanjima u koja se neposredno prelazi iz početnog stanja.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
[[Датотека:PPR januar 2018 zadatak 5 automat.svg|thumb|Karakteristični LR(0) automat u petom zadatku.]]&lt;br /&gt;
* FOLLOW(&amp;amp;lt;S&amp;gt;) = {─┤, &amp;quot;,&amp;quot;, )}&lt;br /&gt;
* FOLLOW(&amp;amp;lt;A&amp;gt;) = FOLLOW(&amp;amp;lt;S&amp;gt;) = {─┤, &amp;quot;,&amp;quot;, )}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Kontrolna tabela SLR(1) parsera&lt;br /&gt;
! Stanje              !! ,         !! 0     !! 1     !! (     !! )         !! ─┤&lt;br /&gt;
|-&lt;br /&gt;
| ∇                   ||           ||       || SHIFT ||       ||           ||&lt;br /&gt;
|-&lt;br /&gt;
| 1&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;       || REDUCE(5) || SHIFT ||       || SHIFT || REDUCE(5) || REDUCE(5)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;lt;S&amp;gt;&amp;lt;sub&amp;gt;x1&amp;lt;/sub&amp;gt; || SHIFT     ||       ||       ||       ||           || SHIFT&lt;br /&gt;
|-&lt;br /&gt;
| ,&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;       || REDUCE(5) || SHIFT ||       || SHIFT || REDUCE(5) || REDUCE(5)&lt;br /&gt;
|-&lt;br /&gt;
| (&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;       ||           ||       || SHIFT ||       ||           ||&lt;br /&gt;
|-&lt;br /&gt;
| 0&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt;       || REDUCE(4) ||       ||       ||       || REDUCE(4) || REDUCE(4)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;lt;S&amp;gt;&amp;lt;sub&amp;gt;x2&amp;lt;/sub&amp;gt; || SHIFT     ||       ||       ||       || SHIFT     ||&lt;br /&gt;
|-&lt;br /&gt;
| )&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;       || REDUCE(3) ||       ||       ||       || REDUCE(3) || REDUCE(3)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;lt;A&amp;gt;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;  || REDUCE(1) ||       ||       ||       || REDUCE(1) || REDUCE(1)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;lt;A&amp;gt;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;  || REDUCE(2) ||       ||       ||       || REDUCE(2) || REDUCE(2)&lt;br /&gt;
|-&lt;br /&gt;
| ─┤&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;      ||           ||       ||       ||       ||           || ACCEPT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 6. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Dat je listing programa napisanog na programskom jeziku Mikrojava. Sve metode unutrašnjih klasa su virtuelne. Globalne metode se pozivaju statički.&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Ukoliko se vrši sintaksno-upravljano prevođenje, prikazati izgled tabele simbola u trenutku &amp;lt;code&amp;gt;/*T*/&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Napisati kompletan Mikrojava bajtkod prevoda funkcije &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
program Ispit&lt;br /&gt;
    const int K = 2;&lt;br /&gt;
    class C {&lt;br /&gt;
        int d;&lt;br /&gt;
    {&lt;br /&gt;
        int m(int c)&lt;br /&gt;
        { return c * d; }&lt;br /&gt;
    } }&lt;br /&gt;
    class DC extends C {&lt;br /&gt;
        int v;&lt;br /&gt;
    {&lt;br /&gt;
        int m(int q) /*T*/&lt;br /&gt;
        { return q + d; }&lt;br /&gt;
    } }&lt;br /&gt;
{&lt;br /&gt;
    void main()&lt;br /&gt;
        C c;&lt;br /&gt;
    {&lt;br /&gt;
        c = new DC;&lt;br /&gt;
        c.d = c.m(K);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
[[Датотека:PPR januar 2018 zadatak 6 tabela.svg|thumb|Tabela simbola u šestom zadatku.]]&lt;br /&gt;
Prevod bajtkoda funkcije &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; može biti:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
enter 0, 1&lt;br /&gt;
new 12&lt;br /&gt;
dup&lt;br /&gt;
const_4&lt;br /&gt;
putfield 0&lt;br /&gt;
store_0&lt;br /&gt;
load_0&lt;br /&gt;
load_0&lt;br /&gt;
const_2&lt;br /&gt;
load_0&lt;br /&gt;
getfield 0&lt;br /&gt;
invokevirtual &#039;m&#039; -1&lt;br /&gt;
putfield 1&lt;br /&gt;
exit&lt;br /&gt;
return&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
[[Категорија:Програмски преводиоци 1]]&lt;/div&gt;</summary>
		<author><name>Gase273</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%A1%D0%90%D0%91/%D0%9A2%D0%9D_2023&amp;diff=7583</id>
		<title>САБ/К2Н 2023</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%A1%D0%90%D0%91/%D0%9A2%D0%9D_2023&amp;diff=7583"/>
		<updated>2024-04-27T17:47:49Z</updated>

		<summary type="html">&lt;p&gt;Gase273: /* Решење */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
&lt;br /&gt;
== Поставка ==&lt;br /&gt;
У систему болничког лечења прате се информације о лекарима који раде у болници и прегледима који су ти лекари обавили. Сваки пацијент може имати највише један картон у свакој од болница. Сваки картон се повремено оверава када се уписује назив послодавца преко кога је пацијент осигуран. У случајевима када је то потребно пацијенти могу бити хоспитализовани, тј. примљени на болничко лечење (датум отпуштања се попуњава тек након што се лечење заврши, а до тада је NULL). &amp;lt;br&amp;gt;&lt;br /&gt;
Одговарајућа шема базе је:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|Mesto(&amp;lt;u&amp;gt;IDMes&amp;lt;/u&amp;gt;, Naziv)&lt;br /&gt;
|-&lt;br /&gt;
|Bolnica (&amp;lt;u&amp;gt;IDBol&amp;lt;/u&amp;gt;, Naziv, Kapacitet, Iskoriscenost, IDMes)&lt;br /&gt;
|-&lt;br /&gt;
|Pacijent(&amp;lt;u&amp;gt;IDPac&amp;lt;/u&amp;gt;, Ime, JMBG, GodineStarosti, IDMes)&lt;br /&gt;
|-&lt;br /&gt;
|Lekar(&amp;lt;u&amp;gt;IDLek&amp;lt;/u&amp;gt;, Ime, JMBG, Specijalizacija)&lt;br /&gt;
|-&lt;br /&gt;
|Karton(&amp;lt;u&amp;gt;IdKar&amp;lt;/u&amp;gt;, IDPac, IDBol)&lt;br /&gt;
|-&lt;br /&gt;
|Pregled(&amp;lt;u&amp;gt;IdPre&amp;lt;/u&amp;gt;, Datum, ObjektivniNalaz, DIjagnoza, IDKar, IdLek)&lt;br /&gt;
|-&lt;br /&gt;
|Hospitalizacija(&amp;lt;u&amp;gt;IDHos&amp;lt;/u&amp;gt;, DatumPri, DatumOtp, Dijagnoza, KlinickaSlika, IDPac, IDBol)&lt;br /&gt;
|-&lt;br /&gt;
|Overa(&amp;lt;u&amp;gt;IDKar&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;RedBr&amp;lt;/u&amp;gt;, DatumOd, NazivPoslodavca)&lt;br /&gt;
|-&lt;br /&gt;
|Radi(&amp;lt;u&amp;gt;IDLek&amp;lt;/u&amp;gt;, IDBol)&lt;br /&gt;
|}&lt;br /&gt;
Iskoriscenost: N- Niska, S - Srednja, V - Viskoa&lt;br /&gt;
&lt;br /&gt;
За посматрани систем саставити SQLServer процедуру AzurirajIskoriscenost(), која поставља атрибут искоришћеност у релацији Болница. Искоришћеност се поставља на основу врше (максималне) вредности попуњености болнице у било којем тренутку до сада. Конкретно, уколико је у било ком тренутку број хоспитализованих паицјената био преко 75% капацитета, она је висока. Уколико је мање или једнако од 75%, а више од 25% онда је средња. У супротном, уколико је мање или једнако 25% онда је њена искоришћеност ниска. У дане боравка у болници треба укључити датум пријема, али не и датум отпуштања из болнице.&lt;br /&gt;
&lt;br /&gt;
== Решење ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
USE [BolnickoLecenje]&lt;br /&gt;
SET ANSI_NULLS ON&lt;br /&gt;
GO&lt;br /&gt;
SET QUOTED_IDENTIFIER ON&lt;br /&gt;
GO&lt;br /&gt;
-- =============================================&lt;br /&gt;
-- Author:		Sergej Vukasovic&lt;br /&gt;
-- Create date: 27.4.2024.&lt;br /&gt;
-- Description:	K2N 2023&lt;br /&gt;
-- =============================================&lt;br /&gt;
CREATE PROCEDURE AzurirajIskoriscenost&lt;br /&gt;
	@IdBol int&lt;br /&gt;
AS&lt;br /&gt;
BEGIN&lt;br /&gt;
	SET NOCOUNT ON;&lt;br /&gt;
&lt;br /&gt;
    declare @isk decimal(10,2)&lt;br /&gt;
	declare @kap int&lt;br /&gt;
&lt;br /&gt;
	select @kap = Kapacitet from Bolnica where IDBol = @IdBol&lt;br /&gt;
	select @isk = count(*) from Hospitalizacija h where DatumOtp is null and h.IDBol = @IdBol&lt;br /&gt;
&lt;br /&gt;
	set @isk = @isk / @kap&lt;br /&gt;
	print(@isk)&lt;br /&gt;
&lt;br /&gt;
	UPDATE Bolnica&lt;br /&gt;
	SET Iskoriscenost = CASE WHEN @isk &amp;gt; 0.75 THEN &#039;V&#039;&lt;br /&gt;
							 WHEN @isk &amp;gt; 0.25 THEN &#039;S&#039;&lt;br /&gt;
							 ELSE &#039;N&#039; END&lt;br /&gt;
	WHERE IDBol = @IdBol&lt;br /&gt;
END&lt;br /&gt;
GO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Тестирање==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
-- Kreiranje baze podataka&lt;br /&gt;
CREATE DATABASE BolnickoLecenje;&lt;br /&gt;
GO&lt;br /&gt;
&lt;br /&gt;
-- Korišćenje baze podataka BolnickoLecenje&lt;br /&gt;
USE BolnickoLecenje;&lt;br /&gt;
GO&lt;br /&gt;
&lt;br /&gt;
-- Kreiranje tabele Mesto&lt;br /&gt;
CREATE TABLE Mesto (&lt;br /&gt;
    IDMes INT PRIMARY KEY,&lt;br /&gt;
    Naziv NVARCHAR(50)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
-- Kreiranje tabele Bolnica&lt;br /&gt;
CREATE TABLE Bolnica (&lt;br /&gt;
    IDBol INT PRIMARY KEY,&lt;br /&gt;
    Naziv NVARCHAR(100),&lt;br /&gt;
    Kapacitet INT,&lt;br /&gt;
    Iskoriscenost CHAR(1),&lt;br /&gt;
    IDMes INT,&lt;br /&gt;
    FOREIGN KEY (IDMes) REFERENCES Mesto(IDMes)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
-- Kreiranje tabele Pacijent&lt;br /&gt;
CREATE TABLE Pacijent (&lt;br /&gt;
    IDPac INT PRIMARY KEY,&lt;br /&gt;
    Ime NVARCHAR(50),&lt;br /&gt;
    JMBG NVARCHAR(13),&lt;br /&gt;
    GodineStarosti INT,&lt;br /&gt;
    IDMes INT,&lt;br /&gt;
    FOREIGN KEY (IDMes) REFERENCES Mesto(IDMes)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
-- Kreiranje tabele Lekar&lt;br /&gt;
CREATE TABLE Lekar (&lt;br /&gt;
    IDLek INT PRIMARY KEY,&lt;br /&gt;
    Ime NVARCHAR(50),&lt;br /&gt;
    JMBG NVARCHAR(13),&lt;br /&gt;
    Specijalizacija NVARCHAR(100)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
-- Kreiranje tabele Karton&lt;br /&gt;
CREATE TABLE Karton (&lt;br /&gt;
    IdKar INT PRIMARY KEY,&lt;br /&gt;
    IDPac INT,&lt;br /&gt;
    IDBol INT,&lt;br /&gt;
    FOREIGN KEY (IDPac) REFERENCES Pacijent(IDPac),&lt;br /&gt;
    FOREIGN KEY (IDBol) REFERENCES Bolnica(IDBol)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
-- Kreiranje tabele Pregled&lt;br /&gt;
CREATE TABLE Pregled (&lt;br /&gt;
    IdPre INT PRIMARY KEY,&lt;br /&gt;
    Datum DATE,&lt;br /&gt;
    ObjektivniNalaz NVARCHAR(MAX),&lt;br /&gt;
    DIjagnoza NVARCHAR(MAX),&lt;br /&gt;
    IDKar INT,&lt;br /&gt;
    IdLek INT,&lt;br /&gt;
    FOREIGN KEY (IDKar) REFERENCES Karton(IdKar),&lt;br /&gt;
    FOREIGN KEY (IdLek) REFERENCES Lekar(IDLek)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
-- Kreiranje tabele Hospitalizacija&lt;br /&gt;
CREATE TABLE Hospitalizacija (&lt;br /&gt;
    IDHos INT PRIMARY KEY,&lt;br /&gt;
    DatumPri DATE,&lt;br /&gt;
    DatumOtp DATE,&lt;br /&gt;
    Dijagnoza NVARCHAR(MAX),&lt;br /&gt;
    KlinickaSlika NVARCHAR(MAX),&lt;br /&gt;
    IDPac INT,&lt;br /&gt;
    IDBol INT,&lt;br /&gt;
    FOREIGN KEY (IDPac) REFERENCES Pacijent(IDPac),&lt;br /&gt;
    FOREIGN KEY (IDBol) REFERENCES Bolnica(IDBol)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
-- Kreiranje tabele Overa&lt;br /&gt;
CREATE TABLE Overa (&lt;br /&gt;
    IDKar INT,&lt;br /&gt;
    RedBr INT,&lt;br /&gt;
    DatumOd DATE,&lt;br /&gt;
    NazivPoslodavca NVARCHAR(100),&lt;br /&gt;
    FOREIGN KEY (IDKar) REFERENCES Karton(IdKar)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
-- Kreiranje tabele Radi&lt;br /&gt;
CREATE TABLE Radi (&lt;br /&gt;
    IDLek INT,&lt;br /&gt;
    IDBol INT,&lt;br /&gt;
    FOREIGN KEY (IDLek) REFERENCES Lekar(IDLek),&lt;br /&gt;
    FOREIGN KEY (IDBol) REFERENCES Bolnica(IDBol)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
-- Popunjavanje tabela Mesto, Bolnica, Pacijent, Lekar - Primer podataka&lt;br /&gt;
INSERT INTO Mesto (IDMes, Naziv) VALUES&lt;br /&gt;
(1, &#039;Beograd&#039;),&lt;br /&gt;
(2, &#039;Novi Sad&#039;),&lt;br /&gt;
(3, &#039;Niš&#039;);&lt;br /&gt;
&lt;br /&gt;
INSERT INTO Bolnica (IDBol, Naziv, Kapacitet, Iskoriscenost, IDMes) VALUES&lt;br /&gt;
(1, &#039;Klinički centar Srbije&#039;, 1000, &#039;V&#039;, 1),&lt;br /&gt;
(2, &#039;Klinički centar Novi Sad&#039;, 800, &#039;S&#039;, 2),&lt;br /&gt;
(3, &#039;Klinički centar Niš&#039;, 700, &#039;N&#039;, 3);&lt;br /&gt;
&lt;br /&gt;
INSERT INTO Pacijent (IDPac, Ime, JMBG, GodineStarosti, IDMes) VALUES&lt;br /&gt;
(1, &#039;Marko Marković&#039;, &#039;0101991734567&#039;, 45, 1),&lt;br /&gt;
(2, &#039;Ana Anić&#039;, &#039;0202992834567&#039;, 35, 2),&lt;br /&gt;
(3, &#039;Petar Petrović&#039;, &#039;0303993934567&#039;, 50, 3);&lt;br /&gt;
&lt;br /&gt;
INSERT INTO Lekar (IDLek, Ime, JMBG, Specijalizacija) VALUES&lt;br /&gt;
(1, &#039;Milica Milenković&#039;, &#039;0404994834567&#039;, &#039;Opšta medicina&#039;),&lt;br /&gt;
(2, &#039;Stefan Stefanović&#039;, &#039;0505995934567&#039;, &#039;Hirurgija&#039;),&lt;br /&gt;
(3, &#039;Jovana Jovanović&#039;, &#039;0606996034567&#039;, &#039;Pediatrija&#039;);&lt;br /&gt;
&lt;br /&gt;
-- Dodavanje ostalih podataka u preostale tabele prema potrebi&lt;br /&gt;
-- Popunjavanje tabele Karton - Primer podataka&lt;br /&gt;
INSERT INTO Karton (IdKar, IDPac, IDBol) VALUES&lt;br /&gt;
(1, 1, 1),&lt;br /&gt;
(2, 2, 2),&lt;br /&gt;
(3, 3, 3);&lt;br /&gt;
&lt;br /&gt;
-- Popunjavanje tabele Pregled - Primer podataka&lt;br /&gt;
INSERT INTO Pregled (IdPre, Datum, ObjektivniNalaz, DIjagnoza, IDKar, IdLek) VALUES&lt;br /&gt;
(1, &#039;2024-04-20&#039;, &#039;Normalan nalaz.&#039;, &#039;Prehlada&#039;, 1, 1),&lt;br /&gt;
(2, &#039;2024-04-22&#039;, &#039;Upala slepog creva.&#039;, &#039;Akutni abdomen&#039;, 2, 2),&lt;br /&gt;
(3, &#039;2024-04-25&#039;, &#039;Visoka temperatura.&#039;, &#039;Grip&#039;, 3, 3);&lt;br /&gt;
&lt;br /&gt;
-- Popunjavanje tabele Hospitalizacija - Primer podataka&lt;br /&gt;
INSERT INTO Hospitalizacija (IDHos, DatumPri, DatumOtp, Dijagnoza, KlinickaSlika, IDPac, IDBol) VALUES&lt;br /&gt;
(1, &#039;2024-04-20&#039;, NULL, &#039;Prehlada&#039;, &#039;Pacijent ima simptome prehlade.&#039;, 1, 1),&lt;br /&gt;
(2, &#039;2024-04-22&#039;, NULL, &#039;Upala slepog creva&#039;, &#039;Pacijent ima jake bolove u stomaku.&#039;, 2, 2),&lt;br /&gt;
(3, &#039;2024-04-25&#039;, NULL, &#039;Grip&#039;, &#039;Pacijent ima visoku temperaturu i kašalj.&#039;, 3, 3);&lt;br /&gt;
&lt;br /&gt;
-- Popunjavanje tabele Overa - Primer podataka&lt;br /&gt;
INSERT INTO Overa (IDKar, RedBr, DatumOd, NazivPoslodavca) VALUES&lt;br /&gt;
(1, 1, &#039;2024-04-20&#039;, &#039;RFZO&#039;),&lt;br /&gt;
(1, 2, &#039;2024-04-22&#039;, &#039;RFZO&#039;),&lt;br /&gt;
(2, 1, &#039;2024-04-22&#039;, &#039;Dunav osiguranje&#039;),&lt;br /&gt;
(3, 1, &#039;2024-04-25&#039;, &#039;Univerzal osiguranje&#039;);&lt;br /&gt;
&lt;br /&gt;
-- Popunjavanje tabele Radi - Primer podataka&lt;br /&gt;
INSERT INTO Radi (IDLek, IDBol) VALUES&lt;br /&gt;
(1, 1),&lt;br /&gt;
(2, 2),&lt;br /&gt;
(3, 3);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Категорија:САБ]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>Gase273</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%A0%D0%B0%D1%87%D1%83%D0%BD%D0%B0%D1%80%D1%81%D0%BA%D0%B8_VLSI_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8/%D0%9F%D0%B8%D1%82%D0%B0%D1%9A%D0%B0&amp;diff=7151</id>
		<title>Рачунарски VLSI системи/Питања</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%A0%D0%B0%D1%87%D1%83%D0%BD%D0%B0%D1%80%D1%81%D0%BA%D0%B8_VLSI_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8/%D0%9F%D0%B8%D1%82%D0%B0%D1%9A%D0%B0&amp;diff=7151"/>
		<updated>2024-01-08T11:48:40Z</updated>

		<summary type="html">&lt;p&gt;Gase273: /* SystemVerilog ограничења */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
&#039;&#039;&#039;Питања&#039;&#039;&#039; на теоријском делу испита се, слично као на [[Рачунарске мреже 1/Питања|РМ1]], дохватају из корпуса питања и нису свим студентима иста, али долазе из сличних области. Испод су излистани неки задаци по категоријама питања.&lt;br /&gt;
&lt;br /&gt;
== SystemVerilog ограничења ==&lt;br /&gt;
У оваквим задацима, једноставно, је дат SystemVerilog код са ограничењима на неке променљиве, и пита се нешто у вези са вредностима које та променљива може да има и њиховим вероватноћама појављивања.&lt;br /&gt;
&lt;br /&gt;
=== 1. задатак ===&lt;br /&gt;
Које вредности може имати променљива &amp;lt;code&amp;gt;variable&amp;lt;/code&amp;gt; из приказане класе &amp;lt;code&amp;gt;Constraints&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;systemverilog&amp;quot;&amp;gt;&lt;br /&gt;
class Constraints;&lt;br /&gt;
    rand bit [3:0] variable;&lt;br /&gt;
&lt;br /&gt;
    constraint c1 { variable &amp;lt;= 4&#039;d9; }&lt;br /&gt;
    constraint c2 { variable inside {[4:14]}; }&lt;br /&gt;
    constraint c3 { ! (variable inside {4&#039;h0, 4&#039;h5}); }&lt;br /&gt;
endclass&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Могуће вредности, сортиране од најмање ка највећој, у децималном бројном систему, раздвојене запетом без пратећег размака, навести као одговор.&lt;br /&gt;
&lt;br /&gt;
Напомена: Приказ очекиваног формата одговора за следеће произвољно одабране вредности 15, 2, 7 и 10 јесте:&lt;br /&gt;
 2,7,10,15&lt;br /&gt;
&#039;&#039;&#039;Одговор:&#039;&#039;&#039; &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;4,6,7,8,9&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. задатак ===&lt;br /&gt;
Дата је класа &amp;lt;code&amp;gt;Constraints&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;systemverilog&amp;quot;&amp;gt;&lt;br /&gt;
class Constraints;&lt;br /&gt;
    rand bit [2:0] variable;&lt;br /&gt;
&lt;br /&gt;
    constraint distribution { variable dist { 0:/20, 1:/30, [2:6]:/40, 7:/10 }; }&lt;br /&gt;
endclass&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Која је вероватноћа да променљива &amp;lt;code&amp;gt;variable&amp;lt;/code&amp;gt; приликом генерисања псеудослучајне вредности добије вредност &#039;&#039;&#039;4&#039;&#039;&#039;? Вероватноћу представити као разломак у којем су бројилац и именилац узајамно прости бројеви.&lt;br /&gt;
&amp;lt;div data-solution=&amp;quot;select&amp;quot; data-options=&amp;quot;9,10,5,3,11,27,4,12,2,26,28,1,25,29,13&amp;quot;&amp;gt;&lt;br /&gt;
* Бројилац: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&lt;br /&gt;
* Именилац: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;25&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3. задатак ===&lt;br /&gt;
Које вредности може имати променљива &amp;lt;code&amp;gt;v2&amp;lt;/code&amp;gt; из приказане класе &amp;lt;code&amp;gt;Constraints&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;systemverilog&amp;quot;&amp;gt;&lt;br /&gt;
class Constraints;&lt;br /&gt;
    randc bit [3:0] v1;&lt;br /&gt;
    randc bit [3:0] v2;&lt;br /&gt;
&lt;br /&gt;
    constraint c1 { v1 &amp;gt; 4&#039;b0100; }&lt;br /&gt;
    constraint c2 { ! (v1 inside {[4&#039;h8:4&#039;hF]}); }&lt;br /&gt;
    constraint c3 { v2 == v1 * 2 + 1; }&lt;br /&gt;
endclass&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Могуће вредности, сортиране од најмање ка највећој, у децималном бројном систему, раздвојене запетом без пратећег размака, навести као одговор.&lt;br /&gt;
&lt;br /&gt;
Напомена: Приказ очекиваног формата одговора за следеће произвољно одабране вредности 15, 2, 7 и 10 јесте:&lt;br /&gt;
 2,7,10,15&lt;br /&gt;
&#039;&#039;&#039;Одговор:&#039;&#039;&#039; &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;11,13,15&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4. задатак ===&lt;br /&gt;
Дата је класа &amp;lt;code&amp;gt;Constraints&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;systemverilog&amp;quot;&amp;gt;&lt;br /&gt;
class Constraints;&lt;br /&gt;
    rand bit [2:0] variable;&lt;br /&gt;
&lt;br /&gt;
    constraint distribution { variable dist { 0:/20, 1:/30, [2:6]:/20, 7:/30 }; }&lt;br /&gt;
endclass&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Која је вероватноћа да променљива &amp;lt;code&amp;gt;variable&amp;lt;/code&amp;gt; приликом генерисања псеудослучајне вредности добије вредност &#039;&#039;&#039;4&#039;&#039;&#039;? Вероватноћу представити као разломак у којем су бројилац и именилац узајамно прости бројеви.&lt;br /&gt;
&amp;lt;div data-solution=&amp;quot;select&amp;quot; data-options=&amp;quot;9,10,5,3,11,27,4,12,2,26,28,1,25,29,13&amp;quot;&amp;gt;&lt;br /&gt;
* Бројилац: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&lt;br /&gt;
* Именилац: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;25&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5. задатак ===&lt;br /&gt;
Дата је класа &amp;lt;code&amp;gt;Constraints&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;systemverilog&amp;quot;&amp;gt;&lt;br /&gt;
class Constraints;&lt;br /&gt;
    rand bit [2:0] variable;&lt;br /&gt;
&lt;br /&gt;
    constraint distribution { variable dist { 0:/20, 1:/30, [2:6]:=20, 7:/30 }; }&lt;br /&gt;
endclass&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Која је вероватноћа да променљива &amp;lt;code&amp;gt;variable&amp;lt;/code&amp;gt; приликом генерисања псеудослучајне вредности добије вредност &#039;&#039;&#039;4&#039;&#039;&#039;? Вероватноћу представити као разломак у којем су бројилац и именилац узајамно прости бројеви.&lt;br /&gt;
&amp;lt;div data-solution=&amp;quot;select&amp;quot; data-options=&amp;quot;9,10,5,3,11,27,4,12,2,26,28,1,25,29,13&amp;quot;&amp;gt;&lt;br /&gt;
* Бројилац: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&lt;br /&gt;
* Именилац: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;9&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Сабирачи ==&lt;br /&gt;
У оваквим задацима обично је дат Verilog код одређеног сабирача (једног од типова као што су рађени на предавањима) и питају се ствари у вези са функционисањем тог сабирача.&lt;br /&gt;
&lt;br /&gt;
=== 1. задатак ===&lt;br /&gt;
У наставку је дата имплементација једног осморазредног сабирача. О ком сабирачу се ради, ако се зна да модул &amp;lt;code&amp;gt;ripple_carry_adder_n&amp;lt;/code&amp;gt; представља &#039;&#039;N&#039;&#039;-разредни сабирач са серијским преносом, а да модул &amp;lt;code&amp;gt;multiplexer_2_1&amp;lt;/code&amp;gt; представља двоулазни мултиплексер ширине &#039;&#039;N&#039;&#039; информационих улаза?&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;verilog&amp;quot;&amp;gt;&lt;br /&gt;
module adder_8 (&lt;br /&gt;
    input [7:0] a, b,&lt;br /&gt;
    input carry_in,&lt;br /&gt;
    output [7:0] sum,&lt;br /&gt;
    output carry_out&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
    wire carry_3_0, carry_3_1, carry_3;&lt;br /&gt;
    wire [3:0] sum_low_0, sum_low_1, sum_low;&lt;br /&gt;
&lt;br /&gt;
    ripple_carry_adder_n #(4) rca_1 (a[3:0], b[3:0], 1&#039;b0, sum_low_0, carry_3_0);&lt;br /&gt;
    ripple_carry_adder_n #(4) rca_2 (a[3:0], b[3:0], 1&#039;b1, sum_low_1, carry_3_1);&lt;br /&gt;
&lt;br /&gt;
    multiplexer_2_1 #(4) mpx_1 (sum_low_0, sum_low_1, carry_in, sum_low);&lt;br /&gt;
&lt;br /&gt;
    assign carry_3 = (carry_in &amp;amp; carry_3_1) | carry_3_0;&lt;br /&gt;
&lt;br /&gt;
    wire carry_7_0, carry_7_1, carry_7;&lt;br /&gt;
    wire [3:0] sum_high_0, sum_high_1, sum_high;&lt;br /&gt;
&lt;br /&gt;
    ripple_carry_adder_n #(4) rca_3 (a[7:4], b[7:4], 1&#039;b0, sum_high_0, carry_7_0);&lt;br /&gt;
    ripple_carry_adder_n #(4) rca_4 (a[7:4], b[7:4], 1&#039;b1, sum_high_1, carry_7_1);&lt;br /&gt;
&lt;br /&gt;
    multiplexer_2_1 #(4) mpx_2 (sum_high_0, sum_high_1, carry_3, sum_high);&lt;br /&gt;
&lt;br /&gt;
    assign carry_7 = carry_7_0 | (carry_3_0 &amp;amp; carry_7_1) | (carry_in &amp;amp; carry_3_1 &amp;amp; carry_7_1);&lt;br /&gt;
&lt;br /&gt;
    assign sum = {sum_high, sum_low};&lt;br /&gt;
    assign carry_out = carry_7;&lt;br /&gt;
&lt;br /&gt;
endmodule&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# Условни сабирач (&#039;&#039;Conditional Sum Adder&#039;&#039;)&lt;br /&gt;
# Сабирач са серијским преносом (&#039;&#039;Ripple Carry Adder&#039;&#039;)&lt;br /&gt;
# Сабирач са чувањем преноса (&#039;&#039;Carry Save Adder&#039;&#039;)&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Сабирач на основу бита преноса (&#039;&#039;Carry Select Adder&#039;&#039;)&amp;lt;/span&amp;gt;&lt;br /&gt;
# Сабирач са паралелним преносом (&#039;&#039;Carry Lookahead Adder&#039;&#039;)&lt;br /&gt;
# Потпуни сабирач (&#039;&#039;Full Adder&#039;&#039;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Објашњење:&#039;&#039;&#039; &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;У коду се види карактеристични &amp;quot;осакаћени мултиплексер&amp;quot; код генерисања преноса &amp;lt;code&amp;gt;carry_3&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;carry_7&amp;lt;/code&amp;gt;.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. задатак ===&lt;br /&gt;
У наставку је дата непотпуна имплементација четвороразредног сабирача на основу бита преноса (&#039;&#039;Carry Select Adder&#039;&#039;). Допунити имплементацију, ако се зна да модул &amp;lt;code&amp;gt;ripple_carry_adder_n&amp;lt;/code&amp;gt; представља &#039;&#039;N&#039;&#039;-разредни сабирач са серијским преносом, а да модул &amp;lt;code&amp;gt;multiplexer_2_1&amp;lt;/code&amp;gt; представља двоулазни мултиплексер ширине &#039;&#039;N&#039;&#039; информационих улаза?&amp;lt;sup&amp;gt;[sic]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;verilog&amp;quot;&amp;gt;&lt;br /&gt;
module carry_select_adder_4 (&lt;br /&gt;
    input [3:0] a, b,&lt;br /&gt;
    input carry_in,&lt;br /&gt;
    output [3:0] sum,&lt;br /&gt;
    output carry_out&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
    wire carry_3_0, carry_3_1;&lt;br /&gt;
    wire [3:0] sum_0, sum_1;&lt;br /&gt;
&lt;br /&gt;
    ripple_carry_adder_n #(4) rca_1 (a[3:0], b[3:0], БЕЛИНА_1, sum_0, БЕЛИНА_2);&lt;br /&gt;
    ripple_carry_adder_n #(4) rca_2 (a[3:0], b[3:0], БЕЛИНА_3, sum_1, БЕЛИНА_4);&lt;br /&gt;
&lt;br /&gt;
    multiplexer_2_1 #(4) mpx_1 (sum_0, sum_1, carry_in, sum);&lt;br /&gt;
&lt;br /&gt;
    assign carry_out = (carry_in &amp;amp; carry_3_1) | carry_3_0;&lt;br /&gt;
&lt;br /&gt;
endmodule&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;select&amp;quot; data-options=&amp;quot;carry_3_1,1&#039;b1,sum,1&#039;b0,carry_out,carry_in,carry_3_0,sum_0,sum_1&amp;quot;&amp;gt;&lt;br /&gt;
# Белина 1: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;1&#039;b0&amp;lt;/span&amp;gt;&lt;br /&gt;
# Белина 2: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;carry_3_0&amp;lt;/span&amp;gt;&lt;br /&gt;
# Белина 3: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;1&#039;b1&amp;lt;/span&amp;gt;&lt;br /&gt;
# Белина 4: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;carry_3_1&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Објашњење:&#039;&#039;&#039; &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Ово је само друга варијанта задатка изнад. Једном сабирачу се даје да рачуна као да је улазни пренос 0, а другом да је улазни пренос 1, па се њихови резултати смештају у одговарајуће сигнале.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Временски облици ==&lt;br /&gt;
У оваквим задацима дат је Verilog код са кашњењима и временски облици излазних сигнала у &#039;&#039;ModelSim&#039;&#039;, па се студенти питају да препознају одговарајући временски облик.&lt;br /&gt;
&lt;br /&gt;
=== 1. задатак ===&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
Који временски облик одговара следећем изворном коду:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;verilog&amp;quot;&amp;gt;&lt;br /&gt;
module delay_module_3 (&lt;br /&gt;
    out1, out2, a, b, c, x, y, z&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
    output reg out1, out2;&lt;br /&gt;
    input a, b, c, x, y, z;&lt;br /&gt;
    wire e, f, g;&lt;br /&gt;
&lt;br /&gt;
    always @(posedge a) out1 = #1 b &amp;amp; c;&lt;br /&gt;
    always @(negedge a) out1 = #1 b | ~c;&lt;br /&gt;
&lt;br /&gt;
    always @(posedge x) out2 = #1 y ^ z;&lt;br /&gt;
    always @(negedge x) out2 = #1 ~y;&lt;br /&gt;
&lt;br /&gt;
endmodule&lt;br /&gt;
&lt;br /&gt;
module top_display;&lt;br /&gt;
&lt;br /&gt;
    reg a, b, c, x, y, z;&lt;br /&gt;
    wire o1, o2;&lt;br /&gt;
    delay_module_3 d3(o1, o2, a, b, c, x, y, z);&lt;br /&gt;
&lt;br /&gt;
    initial begin&lt;br /&gt;
        a = 1&#039;b0; b = 1&#039;b0; c = 1&#039;b0; x = 1&#039;b0; y = 1&#039;b0; z = 1&#039;b0;&lt;br /&gt;
        #1 b = 1&#039;b1;&lt;br /&gt;
        #2 a = 1&#039;b1; y = 1&#039;b1;&lt;br /&gt;
        #0 c = 1&#039;b1;&lt;br /&gt;
        #2 x = 1&#039;b1;&lt;br /&gt;
        #2 a = 1&#039;b0;&lt;br /&gt;
        #1 b = 1&#039;b0;&lt;br /&gt;
        #3 x = 1&#039;b0;&lt;br /&gt;
        #0 y = 1&#039;b0;&lt;br /&gt;
        #0 $finish;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
endmodule&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# [[Датотека:VLSI zadaci vremenski oblik 9.jpg|link=]]&lt;br /&gt;
# [[Датотека:VLSI zadaci vremenski oblik 10.jpg|link=]]&lt;br /&gt;
# [[Датотека:VLSI zadaci vremenski oblik 11.jpg|link=]]&lt;br /&gt;
# [[Датотека:VLSI zadaci vremenski oblik 12.jpg|link=]]&lt;br /&gt;
# Ниједан од понуђених временских облика.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Померачи ==&lt;br /&gt;
У оваквим задацима дат је Фанел или Барел померач са одређеним карактеристикама, и траже се сви његови међурезултати.&lt;br /&gt;
&lt;br /&gt;
=== 1. задатак ===&lt;br /&gt;
Дат је Фанел померач (&#039;&#039;Funnel Shifter&#039;&#039;) са дванаестобитним улазом и петобитним излазом. Допунити вредности добијене у сваком од корака овог померача као и вредност излзаног податка за следеће улазне вредности:&lt;br /&gt;
&amp;lt;div data-solution=&amp;quot;select&amp;quot; data-options=&amp;quot;29,16,1A,27,7,14,5A,13,D,B,A7,9&amp;quot;&amp;gt;&lt;br /&gt;
* Улазни податак: 5A7&lt;br /&gt;
* Контролни сигнал (број померања удесно): 4&lt;br /&gt;
* Први корак: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;5A&amp;lt;/span&amp;gt;&lt;br /&gt;
* Други корак: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;1A&amp;lt;/span&amp;gt;&lt;br /&gt;
* Трећи корак: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;1A&amp;lt;/span&amp;gt;&lt;br /&gt;
* Излазни податак: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;1A&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Све вредности су написане у хексадецималном бројном систему.&lt;br /&gt;
&lt;br /&gt;
=== 2. задатак ===&lt;br /&gt;
Дат је Барел померач (&#039;&#039;Barrel Shifter&#039;&#039;) са осмобитним улазом и осмобитним излазом. Допунити вредности добијене у сваком од корака овог померача као и вредност излзаног податка за следеће улазне вредности:&lt;br /&gt;
&amp;lt;div data-solution=&amp;quot;select&amp;quot; data-options=&amp;quot;5E,F2,97,79,CB,E5,2F&amp;quot;&amp;gt;&lt;br /&gt;
* Улазни податак: 79&lt;br /&gt;
* Контролни сигнал (број померања удесно): 7&lt;br /&gt;
* Први корак: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;97&amp;lt;/span&amp;gt;&lt;br /&gt;
* Други корак: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;E5&amp;lt;/span&amp;gt;&lt;br /&gt;
* Трећи корак: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;F2&amp;lt;/span&amp;gt;&lt;br /&gt;
* Излазни податак: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;F2&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Све вредности су написане у хексадецималном бројном систему.&lt;br /&gt;
&lt;br /&gt;
== Верификација без UVM ==&lt;br /&gt;
У оваквим задацима дат је код из примера верификације без коришћења UVM стандарда са вежби и пита се шта се тачно дешава у коду и зашто.&lt;br /&gt;
&lt;br /&gt;
=== 1. задатак ===&lt;br /&gt;
У наставку је дат део кода &#039;&#039;Driver&#039;&#039;-a.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;systemverilog&amp;quot;&amp;gt;&lt;br /&gt;
class Driver;&lt;br /&gt;
&lt;br /&gt;
    virtual reg8_if vif;&lt;br /&gt;
    mailbox mbx;&lt;br /&gt;
    event done;&lt;br /&gt;
&lt;br /&gt;
    task run();&lt;br /&gt;
        @(posedge vif.clk);&lt;br /&gt;
        forever begin&lt;br /&gt;
            dut_item item;&lt;br /&gt;
            mbx.get(item);&lt;br /&gt;
            // ...&lt;br /&gt;
            @(posedge vif.clk);&lt;br /&gt;
            -&amp;gt;done;&lt;br /&gt;
        end&lt;br /&gt;
    endtask&lt;br /&gt;
&lt;br /&gt;
endclass&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Koja класа чека на догађај &amp;lt;code&amp;gt;done&amp;lt;/code&amp;gt; који се овде окида?&lt;br /&gt;
&lt;br /&gt;
Напомена: Сматрати да се процес верификације врши без коришћења UVM стандарда.&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# &#039;&#039;Driver&#039;&#039;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;&#039;&#039;Generator&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
# &#039;&#039;Monitor&#039;&#039;&lt;br /&gt;
# &#039;&#039;Scoreboard&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Објашњење:&#039;&#039;&#039; &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Први пример са вежби. Генератор чека на овај догађај како не би генерисао више предмета него што драјвер може да конзумира.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. задатак ===&lt;br /&gt;
У наставку је дат део кода &#039;&#039;Driver&#039;&#039;-a.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;systemverilog&amp;quot;&amp;gt;&lt;br /&gt;
class Driver;&lt;br /&gt;
&lt;br /&gt;
    virtual reg8_if vif;&lt;br /&gt;
    mailbox mbx;&lt;br /&gt;
    event done;&lt;br /&gt;
&lt;br /&gt;
    task run();&lt;br /&gt;
        @(posedge vif.clk);&lt;br /&gt;
        forever begin&lt;br /&gt;
            dut_item item;&lt;br /&gt;
            mbx.get(item);&lt;br /&gt;
            // ...&lt;br /&gt;
            @(posedge vif.clk);&lt;br /&gt;
            -&amp;gt;done;&lt;br /&gt;
        end&lt;br /&gt;
    endtask&lt;br /&gt;
&lt;br /&gt;
endclass&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Koja класа поставља &amp;lt;code&amp;gt;item&amp;lt;/code&amp;gt; у &#039;&#039;mailbox&#039;&#039; који се овде дохвата?&lt;br /&gt;
&lt;br /&gt;
Напомена: Сматрати да се процес верификације врши без коришћења UVM стандарда.&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# &#039;&#039;Driver&#039;&#039;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;&#039;&#039;Generator&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
# &#039;&#039;Monitor&#039;&#039;&lt;br /&gt;
# &#039;&#039;Scoreboard&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UVM ==&lt;br /&gt;
Ова питања се обично односе на било шта из UVM стандарда.&lt;br /&gt;
&lt;br /&gt;
=== 1. задатак ===&lt;br /&gt;
Које класе наслеђују класу &amp;lt;code&amp;gt;uvm_transaction&amp;lt;/code&amp;gt;?&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;multiple&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;&amp;lt;code&amp;gt;uvm_sequence_item&amp;lt;/code&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;uvm_driver&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;uvm_monitor&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;uvm_sequencer&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;uvm_test&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;&amp;lt;code&amp;gt;uvm_sequence&amp;lt;/code&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. задатак ===&lt;br /&gt;
Које фазе кроз које пролазе UVM компоненте се реализују као &#039;&#039;task&#039;&#039; уместо као функције?&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;multiple&amp;quot;&amp;gt;&lt;br /&gt;
# build&lt;br /&gt;
# connect&lt;br /&gt;
# end of elaboration&lt;br /&gt;
# start of simulation&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;run&amp;lt;/span&amp;gt;&lt;br /&gt;
# extract&lt;br /&gt;
# check&lt;br /&gt;
# report&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рачунарски VLSI системи]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>Gase273</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%A0%D0%B0%D1%87%D1%83%D0%BD%D0%B0%D1%80%D1%81%D0%BA%D0%B8_VLSI_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8/%D0%9F%D0%B8%D1%82%D0%B0%D1%9A%D0%B0&amp;diff=7150</id>
		<title>Рачунарски VLSI системи/Питања</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%A0%D0%B0%D1%87%D1%83%D0%BD%D0%B0%D1%80%D1%81%D0%BA%D0%B8_VLSI_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8/%D0%9F%D0%B8%D1%82%D0%B0%D1%9A%D0%B0&amp;diff=7150"/>
		<updated>2024-01-07T19:23:32Z</updated>

		<summary type="html">&lt;p&gt;Gase273: /* 2. задатак */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
&#039;&#039;&#039;Питања&#039;&#039;&#039; на теоријском делу испита се, слично као на [[Рачунарске мреже 1/Питања|РМ1]], дохватају из корпуса питања и нису свим студентима иста, али долазе из сличних области. Испод су излистани неки задаци по категоријама питања.&lt;br /&gt;
&lt;br /&gt;
== SystemVerilog ограничења ==&lt;br /&gt;
У оваквим задацима, једноставно, је дат SystemVerilog код са ограничењима на неке променљиве, и пита се нешто у вези са вредностима које та променљива може да има и њиховим вероватноћама појављивања.&lt;br /&gt;
&lt;br /&gt;
=== 1. задатак ===&lt;br /&gt;
Које вредности може имати променљива &amp;lt;code&amp;gt;variable&amp;lt;/code&amp;gt; из приказане класе &amp;lt;code&amp;gt;Constraints&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;systemverilog&amp;quot;&amp;gt;&lt;br /&gt;
class Constraints;&lt;br /&gt;
    rand bit [3:0] variable;&lt;br /&gt;
&lt;br /&gt;
    constraint c1 { variable &amp;lt;= 4&#039;d9; }&lt;br /&gt;
    constraint c2 { variable inside {[4:14]}; }&lt;br /&gt;
    constraint c3 { ! (variable inside {4&#039;h0, 4&#039;h5}); }&lt;br /&gt;
endclass&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Могуће вредности, сортиране од најмање ка највећој, у децималном бројном систему, раздвојене запетом без пратећег размака, навести као одговор.&lt;br /&gt;
&lt;br /&gt;
Напомена: Приказ очекиваног формата одговора за следеће произвољно одабране вредности 15, 2, 7 и 10 јесте:&lt;br /&gt;
 2,7,10,15&lt;br /&gt;
&#039;&#039;&#039;Одговор:&#039;&#039;&#039; &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;4,6,7,8,9&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. задатак ===&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
Дата је класа &amp;lt;code&amp;gt;Constraints&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;systemverilog&amp;quot;&amp;gt;&lt;br /&gt;
class Constraints;&lt;br /&gt;
    rand bit [2:0] variable;&lt;br /&gt;
&lt;br /&gt;
    constraint distribution { variable dist { 0:/20, 1:/30, [2:6]:/40, 7:/10 }; }&lt;br /&gt;
endclass&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Која је вероватноћа да променљива &amp;lt;code&amp;gt;variable&amp;lt;/code&amp;gt; приликом генерисања псеудослучајне вредности добије вредност &#039;&#039;&#039;4&#039;&#039;&#039;? Вероватноћу представити као разломак у којем су бројилац и именилац узајамно прости бројеви.&lt;br /&gt;
&amp;lt;div data-solution=&amp;quot;select&amp;quot; data-options=&amp;quot;14,10,5,3,11,27,4,12,2,26,28,1,25,29,13&amp;quot;&amp;gt;&lt;br /&gt;
* Бројилац: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&lt;br /&gt;
* Именилац: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;25&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3. задатак ===&lt;br /&gt;
Које вредности може имати променљива &amp;lt;code&amp;gt;v2&amp;lt;/code&amp;gt; из приказане класе &amp;lt;code&amp;gt;Constraints&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;systemverilog&amp;quot;&amp;gt;&lt;br /&gt;
class Constraints;&lt;br /&gt;
    randc bit [3:0] v1;&lt;br /&gt;
    randc bit [3:0] v2;&lt;br /&gt;
&lt;br /&gt;
    constraint c1 { v1 &amp;gt; 4&#039;b0100; }&lt;br /&gt;
    constraint c2 { ! (v1 inside {[4&#039;h8:4&#039;hF]}); }&lt;br /&gt;
    constraint c3 { v2 == v1 * 2 + 1; }&lt;br /&gt;
endclass&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Могуће вредности, сортиране од најмање ка највећој, у децималном бројном систему, раздвојене запетом без пратећег размака, навести као одговор.&lt;br /&gt;
&lt;br /&gt;
Напомена: Приказ очекиваног формата одговора за следеће произвољно одабране вредности 15, 2, 7 и 10 јесте:&lt;br /&gt;
 2,7,10,15&lt;br /&gt;
&#039;&#039;&#039;Одговор:&#039;&#039;&#039; &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;11,13,15&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4. задатак ===&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
Дата је класа &amp;lt;code&amp;gt;Constraints&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;systemverilog&amp;quot;&amp;gt;&lt;br /&gt;
class Constraints;&lt;br /&gt;
    rand bit [2:0] variable;&lt;br /&gt;
&lt;br /&gt;
    constraint distribution { variable dist { 0:/20, 1:/30, [2:6]:/20, 7:/30 }; }&lt;br /&gt;
endclass&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Која је вероватноћа да променљива &amp;lt;code&amp;gt;variable&amp;lt;/code&amp;gt; приликом генерисања псеудослучајне вредности добије вредност &#039;&#039;&#039;4&#039;&#039;&#039;? Вероватноћу представити као разломак у којем су бројилац и именилац узајамно прости бројеви.&lt;br /&gt;
&amp;lt;div data-solution=&amp;quot;select&amp;quot; data-options=&amp;quot;14,10,5,3,11,27,4,12,26,28,1,29,13&amp;quot;&amp;gt;&lt;br /&gt;
* Бројилац: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;нерешено&amp;lt;/span&amp;gt;&lt;br /&gt;
* Именилац: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;нерешено&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5. задатак ===&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
Дата је класа &amp;lt;code&amp;gt;Constraints&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;systemverilog&amp;quot;&amp;gt;&lt;br /&gt;
class Constraints;&lt;br /&gt;
    rand bit [2:0] variable;&lt;br /&gt;
&lt;br /&gt;
    constraint distribution { variable dist { 0:/20, 1:/30, [2:6]:=20, 7:/30 }; }&lt;br /&gt;
endclass&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Која је вероватноћа да променљива &amp;lt;code&amp;gt;variable&amp;lt;/code&amp;gt; приликом генерисања псеудослучајне вредности добије вредност &#039;&#039;&#039;4&#039;&#039;&#039;? Вероватноћу представити као разломак у којем су бројилац и именилац узајамно прости бројеви.&lt;br /&gt;
&amp;lt;div data-solution=&amp;quot;select&amp;quot; data-options=&amp;quot;14,10,5,3,11,27,4,12,26,28,1,29,13&amp;quot;&amp;gt;&lt;br /&gt;
* Бројилац: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;нерешено&amp;lt;/span&amp;gt;&lt;br /&gt;
* Именилац: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;нерешено&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Сабирачи ==&lt;br /&gt;
У оваквим задацима обично је дат Verilog код одређеног сабирача (једног од типова као што су рађени на предавањима) и питају се ствари у вези са функционисањем тог сабирача.&lt;br /&gt;
&lt;br /&gt;
=== 1. задатак ===&lt;br /&gt;
У наставку је дата имплементација једног осморазредног сабирача. О ком сабирачу се ради, ако се зна да модул &amp;lt;code&amp;gt;ripple_carry_adder_n&amp;lt;/code&amp;gt; представља &#039;&#039;N&#039;&#039;-разредни сабирач са серијским преносом, а да модул &amp;lt;code&amp;gt;multiplexer_2_1&amp;lt;/code&amp;gt; представља двоулазни мултиплексер ширине &#039;&#039;N&#039;&#039; информационих улаза?&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;verilog&amp;quot;&amp;gt;&lt;br /&gt;
module adder_8 (&lt;br /&gt;
    input [7:0] a, b,&lt;br /&gt;
    input carry_in,&lt;br /&gt;
    output [7:0] sum,&lt;br /&gt;
    output carry_out&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
    wire carry_3_0, carry_3_1, carry_3;&lt;br /&gt;
    wire [3:0] sum_low_0, sum_low_1, sum_low;&lt;br /&gt;
&lt;br /&gt;
    ripple_carry_adder_n #(4) rca_1 (a[3:0], b[3:0], 1&#039;b0, sum_low_0, carry_3_0);&lt;br /&gt;
    ripple_carry_adder_n #(4) rca_2 (a[3:0], b[3:0], 1&#039;b1, sum_low_1, carry_3_1);&lt;br /&gt;
&lt;br /&gt;
    multiplexer_2_1 #(4) mpx_1 (sum_low_0, sum_low_1, carry_in, sum_low);&lt;br /&gt;
&lt;br /&gt;
    assign carry_3 = (carry_in &amp;amp; carry_3_1) | carry_3_0;&lt;br /&gt;
&lt;br /&gt;
    wire carry_7_0, carry_7_1, carry_7;&lt;br /&gt;
    wire [3:0] sum_high_0, sum_high_1, sum_high;&lt;br /&gt;
&lt;br /&gt;
    ripple_carry_adder_n #(4) rca_3 (a[7:4], b[7:4], 1&#039;b0, sum_high_0, carry_7_0);&lt;br /&gt;
    ripple_carry_adder_n #(4) rca_4 (a[7:4], b[7:4], 1&#039;b1, sum_high_1, carry_7_1);&lt;br /&gt;
&lt;br /&gt;
    multiplexer_2_1 #(4) mpx_2 (sum_high_0, sum_high_1, carry_3, sum_high);&lt;br /&gt;
&lt;br /&gt;
    assign carry_7 = carry_7_0 | (carry_3_0 &amp;amp; carry_7_1) | (carry_in &amp;amp; carry_3_1 &amp;amp; carry_7_1);&lt;br /&gt;
&lt;br /&gt;
    assign sum = {sum_high, sum_low};&lt;br /&gt;
    assign carry_out = carry_7;&lt;br /&gt;
&lt;br /&gt;
endmodule&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# Условни сабирач (&#039;&#039;Conditional Sum Adder&#039;&#039;)&lt;br /&gt;
# Сабирач са серијским преносом (&#039;&#039;Ripple Carry Adder&#039;&#039;)&lt;br /&gt;
# Сабирач са чувањем преноса (&#039;&#039;Carry Save Adder&#039;&#039;)&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Сабирач на основу бита преноса (&#039;&#039;Carry Select Adder&#039;&#039;)&amp;lt;/span&amp;gt;&lt;br /&gt;
# Сабирач са паралелним преносом (&#039;&#039;Carry Lookahead Adder&#039;&#039;)&lt;br /&gt;
# Потпуни сабирач (&#039;&#039;Full Adder&#039;&#039;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Објашњење:&#039;&#039;&#039; &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;У коду се види карактеристични &amp;quot;осакаћени мултиплексер&amp;quot; код генерисања преноса &amp;lt;code&amp;gt;carry_3&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;carry_7&amp;lt;/code&amp;gt;.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. задатак ===&lt;br /&gt;
У наставку је дата непотпуна имплементација четвороразредног сабирача на основу бита преноса (&#039;&#039;Carry Select Adder&#039;&#039;). Допунити имплементацију, ако се зна да модул &amp;lt;code&amp;gt;ripple_carry_adder_n&amp;lt;/code&amp;gt; представља &#039;&#039;N&#039;&#039;-разредни сабирач са серијским преносом, а да модул &amp;lt;code&amp;gt;multiplexer_2_1&amp;lt;/code&amp;gt; представља двоулазни мултиплексер ширине &#039;&#039;N&#039;&#039; информационих улаза?&amp;lt;sup&amp;gt;[sic]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;verilog&amp;quot;&amp;gt;&lt;br /&gt;
module carry_select_adder_4 (&lt;br /&gt;
    input [3:0] a, b,&lt;br /&gt;
    input carry_in,&lt;br /&gt;
    output [3:0] sum,&lt;br /&gt;
    output carry_out&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
    wire carry_3_0, carry_3_1;&lt;br /&gt;
    wire [3:0] sum_0, sum_1;&lt;br /&gt;
&lt;br /&gt;
    ripple_carry_adder_n #(4) rca_1 (a[3:0], b[3:0], БЕЛИНА_1, sum_0, БЕЛИНА_2);&lt;br /&gt;
    ripple_carry_adder_n #(4) rca_2 (a[3:0], b[3:0], БЕЛИНА_3, sum_1, БЕЛИНА_4);&lt;br /&gt;
&lt;br /&gt;
    multiplexer_2_1 #(4) mpx_1 (sum_0, sum_1, carry_in, sum);&lt;br /&gt;
&lt;br /&gt;
    assign carry_out = (carry_in &amp;amp; carry_3_1) | carry_3_0;&lt;br /&gt;
&lt;br /&gt;
endmodule&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;select&amp;quot; data-options=&amp;quot;carry_3_1,1&#039;b1,sum,1&#039;b0,carry_out,carry_in,carry_3_0,sum_0,sum_1&amp;quot;&amp;gt;&lt;br /&gt;
# Белина 1: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;1&#039;b0&amp;lt;/span&amp;gt;&lt;br /&gt;
# Белина 2: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;carry_3_0&amp;lt;/span&amp;gt;&lt;br /&gt;
# Белина 3: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;1&#039;b1&amp;lt;/span&amp;gt;&lt;br /&gt;
# Белина 4: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;carry_3_1&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Објашњење:&#039;&#039;&#039; &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Ово је само друга варијанта задатка изнад. Једном сабирачу се даје да рачуна као да је улазни пренос 0, а другом да је улазни пренос 1, па се њихови резултати смештају у одговарајуће сигнале.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Временски облици ==&lt;br /&gt;
У оваквим задацима дат је Verilog код са кашњењима и временски облици излазних сигнала у &#039;&#039;ModelSim&#039;&#039;, па се студенти питају да препознају одговарајући временски облик.&lt;br /&gt;
&lt;br /&gt;
=== 1. задатак ===&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
Који временски облик одговара следећем изворном коду:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;verilog&amp;quot;&amp;gt;&lt;br /&gt;
module delay_module_3 (&lt;br /&gt;
    out1, out2, a, b, c, x, y, z&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
    output reg out1, out2;&lt;br /&gt;
    input a, b, c, x, y, z;&lt;br /&gt;
    wire e, f, g;&lt;br /&gt;
&lt;br /&gt;
    always @(posedge a) out1 = #1 b &amp;amp; c;&lt;br /&gt;
    always @(negedge a) out1 = #1 b | ~c;&lt;br /&gt;
&lt;br /&gt;
    always @(posedge x) out2 = #1 y ^ z;&lt;br /&gt;
    always @(negedge x) out2 = #1 ~y;&lt;br /&gt;
&lt;br /&gt;
endmodule&lt;br /&gt;
&lt;br /&gt;
module top_display;&lt;br /&gt;
&lt;br /&gt;
    reg a, b, c, x, y, z;&lt;br /&gt;
    wire o1, o2;&lt;br /&gt;
    delay_module_3 d3(o1, o2, a, b, c, x, y, z);&lt;br /&gt;
&lt;br /&gt;
    initial begin&lt;br /&gt;
        a = 1&#039;b0; b = 1&#039;b0; c = 1&#039;b0; x = 1&#039;b0; y = 1&#039;b0; z = 1&#039;b0;&lt;br /&gt;
        #1 b = 1&#039;b1;&lt;br /&gt;
        #2 a = 1&#039;b1; y = 1&#039;b1;&lt;br /&gt;
        #0 c = 1&#039;b1;&lt;br /&gt;
        #2 x = 1&#039;b1;&lt;br /&gt;
        #2 a = 1&#039;b0;&lt;br /&gt;
        #1 b = 1&#039;b0;&lt;br /&gt;
        #3 x = 1&#039;b0;&lt;br /&gt;
        #0 y = 1&#039;b0;&lt;br /&gt;
        #0 $finish;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
endmodule&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# [[Датотека:VLSI zadaci vremenski oblik 9.jpg|link=]]&lt;br /&gt;
# [[Датотека:VLSI zadaci vremenski oblik 10.jpg|link=]]&lt;br /&gt;
# [[Датотека:VLSI zadaci vremenski oblik 11.jpg|link=]]&lt;br /&gt;
# [[Датотека:VLSI zadaci vremenski oblik 12.jpg|link=]]&lt;br /&gt;
# Ниједан од понуђених временских облика.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Померачи ==&lt;br /&gt;
У оваквим задацима дат је Фанел или Барел померач са одређеним карактеристикама, и траже се сви његови међурезултати.&lt;br /&gt;
&lt;br /&gt;
=== 1. задатак ===&lt;br /&gt;
Дат је Фанел померач (&#039;&#039;Funnel Shifter&#039;&#039;) са дванаестобитним улазом и петобитним излазом. Допунити вредности добијене у сваком од корака овог померача као и вредност излзаног податка за следеће улазне вредности:&lt;br /&gt;
&amp;lt;div data-solution=&amp;quot;select&amp;quot; data-options=&amp;quot;29,16,1A,27,7,14,5A,13,D,B,A7,9&amp;quot;&amp;gt;&lt;br /&gt;
* Улазни податак: 5A7&lt;br /&gt;
* Контролни сигнал (број померања удесно): 4&lt;br /&gt;
* Први корак: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;5A&amp;lt;/span&amp;gt;&lt;br /&gt;
* Други корак: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;1A&amp;lt;/span&amp;gt;&lt;br /&gt;
* Трећи корак: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;1A&amp;lt;/span&amp;gt;&lt;br /&gt;
* Излазни податак: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;1A&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Све вредности су написане у хексадецималном бројном систему.&lt;br /&gt;
&lt;br /&gt;
=== 2. задатак ===&lt;br /&gt;
Дат је Барел померач (&#039;&#039;Barrel Shifter&#039;&#039;) са осмобитним улазом и осмобитним излазом. Допунити вредности добијене у сваком од корака овог померача као и вредност излзаног податка за следеће улазне вредности:&lt;br /&gt;
&amp;lt;div data-solution=&amp;quot;select&amp;quot; data-options=&amp;quot;5E,F2,97,79,CB,E5,2F&amp;quot;&amp;gt;&lt;br /&gt;
* Улазни податак: 79&lt;br /&gt;
* Контролни сигнал (број померања удесно): 7&lt;br /&gt;
* Први корак: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;97&amp;lt;/span&amp;gt;&lt;br /&gt;
* Други корак: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;E5&amp;lt;/span&amp;gt;&lt;br /&gt;
* Трећи корак: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;F2&amp;lt;/span&amp;gt;&lt;br /&gt;
* Излазни податак: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;F2&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Све вредности су написане у хексадецималном бројном систему.&lt;br /&gt;
&lt;br /&gt;
== Верификација без UVM ==&lt;br /&gt;
У оваквим задацима дат је код из примера верификације без коришћења UVM стандарда са вежби и пита се шта се тачно дешава у коду и зашто.&lt;br /&gt;
&lt;br /&gt;
=== 1. задатак ===&lt;br /&gt;
У наставку је дат део кода &#039;&#039;Driver&#039;&#039;-a.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;systemverilog&amp;quot;&amp;gt;&lt;br /&gt;
class Driver;&lt;br /&gt;
&lt;br /&gt;
    virtual reg8_if vif;&lt;br /&gt;
    mailbox mbx;&lt;br /&gt;
    event done;&lt;br /&gt;
&lt;br /&gt;
    task run();&lt;br /&gt;
        @(posedge vif.clk);&lt;br /&gt;
        forever begin&lt;br /&gt;
            dut_item item;&lt;br /&gt;
            mbx.get(item);&lt;br /&gt;
            // ...&lt;br /&gt;
            @(posedge vif.clk);&lt;br /&gt;
            -&amp;gt;done;&lt;br /&gt;
        end&lt;br /&gt;
    endtask&lt;br /&gt;
&lt;br /&gt;
endclass&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Koja класа чека на догађај &amp;lt;code&amp;gt;done&amp;lt;/code&amp;gt; који се овде окида?&lt;br /&gt;
&lt;br /&gt;
Напомена: Сматрати да се процес верификације врши без коришћења UVM стандарда.&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# &#039;&#039;Driver&#039;&#039;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;&#039;&#039;Generator&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
# &#039;&#039;Monitor&#039;&#039;&lt;br /&gt;
# &#039;&#039;Scoreboard&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Објашњење:&#039;&#039;&#039; &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Први пример са вежби. Генератор чека на овај догађај како не би генерисао више предмета него што драјвер може да конзумира.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. задатак ===&lt;br /&gt;
У наставку је дат део кода &#039;&#039;Driver&#039;&#039;-a.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;systemverilog&amp;quot;&amp;gt;&lt;br /&gt;
class Driver;&lt;br /&gt;
&lt;br /&gt;
    virtual reg8_if vif;&lt;br /&gt;
    mailbox mbx;&lt;br /&gt;
    event done;&lt;br /&gt;
&lt;br /&gt;
    task run();&lt;br /&gt;
        @(posedge vif.clk);&lt;br /&gt;
        forever begin&lt;br /&gt;
            dut_item item;&lt;br /&gt;
            mbx.get(item);&lt;br /&gt;
            // ...&lt;br /&gt;
            @(posedge vif.clk);&lt;br /&gt;
            -&amp;gt;done;&lt;br /&gt;
        end&lt;br /&gt;
    endtask&lt;br /&gt;
&lt;br /&gt;
endclass&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Koja класа поставља &amp;lt;code&amp;gt;item&amp;lt;/code&amp;gt; у &#039;&#039;mailbox&#039;&#039; који се овде дохвата?&lt;br /&gt;
&lt;br /&gt;
Напомена: Сматрати да се процес верификације врши без коришћења UVM стандарда.&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# &#039;&#039;Driver&#039;&#039;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;&#039;&#039;Generator&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
# &#039;&#039;Monitor&#039;&#039;&lt;br /&gt;
# &#039;&#039;Scoreboard&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UVM ==&lt;br /&gt;
Ова питања се обично односе на било шта из UVM стандарда.&lt;br /&gt;
&lt;br /&gt;
=== 1. задатак ===&lt;br /&gt;
Које класе наслеђују класу &amp;lt;code&amp;gt;uvm_transaction&amp;lt;/code&amp;gt;?&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;multiple&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;&amp;lt;code&amp;gt;uvm_sequence_item&amp;lt;/code&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;uvm_driver&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;uvm_monitor&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;uvm_sequencer&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;uvm_test&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;&amp;lt;code&amp;gt;uvm_sequence&amp;lt;/code&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. задатак ===&lt;br /&gt;
Које фазе кроз које пролазе UVM компоненте се реализују као &#039;&#039;task&#039;&#039; уместо као функције?&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;multiple&amp;quot;&amp;gt;&lt;br /&gt;
# build&lt;br /&gt;
# connect&lt;br /&gt;
# end of elaboration&lt;br /&gt;
# start of simulation&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;run&amp;lt;/span&amp;gt;&lt;br /&gt;
# extract&lt;br /&gt;
# check&lt;br /&gt;
# report&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рачунарски VLSI системи]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>Gase273</name></author>
	</entry>
</feed>