Как вы помните, я помогаю Тимуру Палташеву из AMD учить начинающих студентов в одном из местных вузов. На днях у меня возникла новая педагогическая идея - а что если составлять вопросы на контрольной/зачете/экзамене таким образом, чтобы студенты учились во время экзамена?
Для проверки идеи составил короткую контрольную на тему блокирующих, неблокирующих и непрерывных присваиваний + как из кода на SystemVerilog получается D-триггер. Без твердого понимания студентами этой хрени рассказывать им про конечные автоматы или конвейер имхо бессмысленно:
Quiz #5
Name ____________________________________ Student ID __________________
Understanding blocking and non-blocking assignments in SystemVerilog, combinational and sequential always-blocks, their simulation and synthesis.For each design under test (dut1-dut16) show the corresponding schematics and the corresponding waveform:
module dut1 module dut2
( (
input clk, input clk,
input [7:0] d, input [7:0] d,
output logic [7:0] q output logic [7:0] q
); );
always @(posedge clk) always_ff @(posedge clk)
q <= d; q <= d;
endmodule endmodule
module dut3 module dut4
( (
input clk, input clk,
input [7:0] d, input [7:0] d,
output logic [7:0] q output logic [7:0] q
); );
logic [7:0] r; logic [7:0] r;
always @(posedge clk) always @(posedge clk)
begin begin
r <= d; q <= r;
q <= r; r <= d;
end end
endmodule endmodule
module dut5 module dut6
( (
input clk, input clk,
input [7:0] d, input [7:0] d,
output logic [7:0] q output logic [7:0] q
); );
always @* always_comb
q = d; q = d;
endmodule endmodule
module dut7 module dut8
( (
input clk, input clk,
input [7:0] d, input [7:0] d,
output logic [7:0] q output logic [7:0] q
); );
logic [7:0] r; logic [7:0] r;
always @(posedge clk) always @(posedge clk)
r <= d; q <= r;
always @(posedge clk) always @(posedge clk)
q <= r; r <= d;
endmodule endmodule
module dut9 module dut10
( (
input clk, input clk,
input [7:0] d, input [7:0] d,
output logic [7:0] q output logic [7:0] q
); );
logic [7:0] r; logic [7:0] r;
always @* always @(posedge clk)
r = d; q <= r;
always @(posedge clk) always @*
q <= r; r = d;
endmodule endmodule
module dut11 module dut12
( (
input clk, input clk,
input [7:0] d, input [7:0] d,
output logic [7:0] q output logic [7:0] q
); );
logic [7:0] r;
assign r = d; wire [7:0] r = d;
always @(posedge clk) always @(posedge clk)
q <= r; q <= r;
endmodule endmodule
module dut13 module dut14
( (
input clk, input clk,
input [7:0] d, input [7:0] d,
output logic [7:0] q output logic [7:0] q
); );
logic [7:0] r; logic [7:0] r;
assign r = d; assign q = r;
assign q = r; assign r = d;
endmodule endmodule
module dut15_not_a_good_style module dut16_bad_style
( (
input clk, input clk,
input [7:0] d, input [7:0] d,
output logic [7:0] q output logic [7:0] q
); );
logic [7:0] r; logic [7:0] r;
always @(posedge clk) always @(posedge clk)
begin begin
r = d; q <= r;
q <= r; r = d;
end end
endmodule endmodule
The common testbench used to generate the waveforms
module testbench;
logic clk;
logic [7:0] d, q;
dut dut (clk, d, q);
initial
begin
clk = 0;
forever
#10 clk = ! clk;
end
initial
begin
$dumpvars ();
for (int i = 0; i < 10; i++)
begin
@(posedge clk);
#15;
d = i;
end
$finish;
end
endmodule

X)

Y)

Z)

Quiz is created by Yuri Panchul
UPD: Мне приятно представлять, что студентка, изучающая Verilog, выглядит вот так:

(картинка от http://www.volegov.com/ )
При этом все наши с Тимуром студентки - индуски, т.е. они выглядят не так.
Плодотворна ли идея обучать студентов во время контрольных?
Да, потому что дома он все равно ленятся это учить
1(5.6%)
Да, потому что они в это время сосредоточены, внимательны
3(16.7%)
Может быть, но такие контрольные нужно делать "open book" т.е. с открытыми учебниками
5(27.8%)
Если попробовать такое на гуманитарных студентах, они устроят протест и начнут кидаться кусками асфальта
8(44.4%)
Из-за бугра плюете?
1(5.6%)
|