Yuri Panchul (panchul) wrote,
Yuri Panchul
panchul

У меня возникла революционная педагогическая идея

Как вы помните, я помогаю Тимуру Палташеву из 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%)
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 31 comments