Bootstrap

HDLBits刷题记录--Modules:Hierarchy

HDLBits刷题记录

Modules:Hierarchy

Module

电路图:
Module
代码:

module top_module ( input a, input b, output out );
    mod_a mod_a(
        .in1(a),
        .in2(b),
        .out(out)
    );
endmodule

--第二种写法

module top_module ( input a, input b, output out );
    mod_a mod_a(
        a,b,out
    );
endmodule

Module pos

电路图:
Module pos
代码:

module top_module ( 
    input a, 
    input b, 
    input c,
    input d,
    output out1,
    output out2
);
    mod_a mod_a(out1,out2,a,b,c,d);
endmodule

Module name

电路图:
Module name
代码:

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

Module shift

电路图:
Module shift
代码:

module top_module ( input clk, input d, output q );
    
    wire q1,q2;
    
	my_dff my_dff0
    ( 
        .clk(clk),
        .d(d),
        .q(q1) 
    );
    
    my_dff my_dff1
    ( 
        .clk(clk),
        .d(q1),
        .q(q2) 
    );
    
    my_dff my_df2
    ( 
        .clk(clk),
        .d(q2),
        .q(q) 
    );
endmodule

Module shift8

电路图:
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;
    
    
    always@(*)
        begin
            case(sel)
                2'b00:q<=d;
                2'b01:q<=q0;
                2'b10:q<=q1;
                2'b11:q<=q2;
            endcase
        end
        
   my_dff8 my_dff0
    ( 
        .clk(clk),
        .d(d),
        .q(q0) 
    );
    
    my_dff8 my_dff1
    ( 
        .clk(clk),
        .d(q0),
        .q(q1) 
    );
    
    my_dff8 my_df2
    ( 
        .clk(clk),
        .d(q1),
        .q(q2) 
    );
    
endmodule

Module add

电路图:
Module add
代码:

module top_module(
    input [31:0] a,
    input [31:0] b,
    output [31:0] sum
);
    wire [15:0]sum1;
    wire [15:0]sum2;
    wire count1;
    add16 add16_1( 
        .a(a[15:0]),
        .b(b[15:0]),
        .cin(1'b0),
        .sum(sum1),
        .cout(count1) 
                 );
    
     add16 add16_2( 
         .a(a[31:16]),
         .b(b[31:16]),
         .cin(count1),
         .sum(sum2),
        .cout() 
                 );
    assign sum={sum2,sum1};
endmodule

Module fadd

电路图:
Module fadd
代码:

module top_module (
    input [31:0] a,
    input [31:0] b,
    output [31:0] sum
);//

    wire	cout;

	add16 add16_0( 
       .a(a[15:0]),
       .b(b[15:0]),
       .cin(1'b0), 
       .sum(sum[15:0]),
       .cout(cout)
	);

	add16 add16_1( 
       .a(a[31:16]),
       .b(b[31:16]),
       .cin(cout), 
       .sum(sum[31:16]),
       .cout()
	);
    
endmodule
	 

module add1 ( input a, input b, input cin,   output sum, output cout );

// Full adder module here
    assign {cout, sum} = a + b + cin;

endmodule

Module cseladd

电路图:
Module cseladd
代码:

module top_module(
    input [31:0] a,
    input [31:0] b,
    output [31:0] sum
);
	
    wire cout;
    wire [15:0]sum1;
    wire [15:0]sum2;
    
    add16 add16_0( 
        .a(a[15:0]), 
        .b(b[15:0]),
        .cin(1'b0),
        .sum(sum[15:0]), 
        .cout(cout)
    );
    
     add16 add16_1( 
         .a(a[31:16]), 
         .b(b[31:16]),
         .cin(1'b0),
         .sum(sum1), 
         .cout()
    );
    
     add16 add16_2( 
         .a(a[31:16]), 
         .b(b[31:16]),
        .cin(1'b1),
        .sum(sum2), 
        .cout()
    );
    always@(*)
    begin
    if(cout==1'b0)
        sum[31:16]=sum1;
    else if(cout==1'b1)
        sum[31:16]=sum2;
    end
endmodule

Module addsub

电路图:
Module addsub
代码:

module top_module(
    input [31:0] a,
    input [31:0] b,
    input sub,
    output [31:0] sum
);
    wire [31:0]b_sub;
    wire cout;
	assign b_sub = b ^ {32{sub}};
    
    add16 add16_1( 
        .a(a[15:0]),
        .b(b_sub[15:0]),
        .cin(sub),
        .sum(sum[15:0]), 
        .cout(cout)
    );
    
    add16 add16_2( 
        .a(a[31:16]),
        .b(b_sub[31:16]),
        .cin(cout),
        .sum(sum[31:16]), 
        .cout()
    );
endmodule

;