전자공학/디지털회로

[Verilog] Module

17Hyuk 2022. 12. 14. 23:46

https://hdlbits.01xz.net/wiki/Problem_sets

 

Problem sets - HDLBits

 

hdlbits.01xz.net

 

 

Module_name

Connecting port by name

module top_module ( 
    input a, 
    input b, 
    input c,
    input d,
    output out1,
    output out2
);
    mod_a u0(.in1(a), .in2(b), .in3(c), .in4(d), .out1(out1), .out2(out2));

endmodule

 

 

Module shift

module top_module ( input clk, input d, output q );
	
    wire q0;
    wire q1;
    
    my_dff u_0(.clk(clk), .d(d), .q(q0));
    my_dff u_1(.clk(clk), .d(q0), .q(q1));
    my_dff u_2(.clk(clk), .d(q1), .q(q));
    
endmodule

 


Module_shift8

module top_module ( 
    input clk, 
    input [7:0] d, 
    input [1:0] sel, 
    output [7:0] q 
);
    
    wire [7:0] q0;
    wire [7:0] q1;
    wire [7:0] q2;
    
    my_dff8 u_0(.clk(clk), .d(d), .q(q0));
    my_dff8 u_1(.clk(clk), .d(q0), .q(q1));
    my_dff8 u_2(.clk(clk), .d(q1), .q(q2));

    
    always @(*)
    begin
        case(sel)
            // 2'd0 : q <= d;
            2'd1 : q <= q0;
            2'd2 : q <= q1;
            2'd3 : q <= q2;
            default : q <= d;		//default is more robust
        endcase
    end
    
    
endmodule

 

 

※ Full_adder

Half_adder의 경우 c_in이 없고 Full_adder의 경우 c_in이 있다

module Full_adder ( input a, input b, input c_in, output sum, output c_out);
    
    assign sum = a ^ b ^ c_in;
    assign c_out = (a & b) | (b & c_in) | (c_in & a);
    
endmodule