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