HDLBits--model

文章详细介绍了Verilog语言中模块的多种实例化方式,包括按输入参数、位置和名称定义,以及涉及加法、移位、选择和带有复制操作的加减运算模块设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

module

直接实例化即可
在这里插入图片描述

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

Module_pos

按照位置来实例化
在这里插入图片描述

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

Module_name

在这里插入图片描述

module top_module ( 
    input a, 
    input b, 
    input c,
    input d,
    output out1,
    output out2
);
    mod_a instance1(
        .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 q1,q2;
    my_dff dff1(clk,d,q1);
    my_dff dff2(clk,q1,q2);
    my_dff dff3(clk,q2,q);
endmodule

Module_shift8

在这里插入图片描述

module top_module ( 
    input clk, 
    input [7:0] d, 
    input [1:0] sel, 
    output [7:0] q 
);
	wire [7:0] q1,q2,q3;
    my_dff8 dff1(clk,d,q1);
    my_dff8 dff2(clk,q1,q2);
    my_dff8 dff3(clk,q2,q3);
    always @(*)begin
        case(sel)
            2'b00: q<=d;
            2'b01: q<=q1;
            2'b10: q<=q2;
            2'b11: q<=q3;
        endcase
    end
endmodule

Module_add

在这里插入图片描述

module top_module(
    input [31:0] a,
    input [31:0] b,
    output [31:0] sum
);
	wire cout1;
    add16 add1(
        .a(a[15:0]),
        .b(b[15:0]),
        .cin(1'b0),
        .cout(cout1),
        .sum(sum[15:0]));
    add16 add2(
        .a(a[31:16]),
        .b(b[31:16]),
        .cin(cout1),
        .cout(),
        .sum(sum[31:16]));
endmodule

Module_fadd

注意这里是不需要你编写add16模块内部的
相当于默认已经把add16内部的16个add1连接完成
只需要你设计add1内部
在这里插入图片描述

module top_module (
    input [31:0] a,
    input [31:0] b,
    output [31:0] sum
);
    wire cout1;
    add16 add_16(
                .a(a[15:0]),
                .b(b[15:0]),
                .cin(0),
                .sum(sum[15:0]),
                .cout(cout1)
    );
    add16 add_32(
                .a(a[31:16]),
                .b(b[31:16]),
       			 .cin(cout1),
                .sum(sum[31:16]),
                .cout()
    );

endmodule

module add1 ( input a, input b, input cin,   output sum, output cout );
    assign {cout,sum} = a+b+cin;
    //或采用逻辑表达式
    //assign sum = a^b^cin;
    //assign cout = cout = a&b | a&cin | b&cin;
endmodule

Module_cseladd

在这里插入图片描述

module top_module(
    input [31:0] a,
    input [31:0] b,
    output [31:0] sum
);
    wire sel;
    wire [31:16] sum1,sum2;
    add16 add16_0(
                .a(a[15:0]),					
                .b(b[15:0]),
        		.cin(1'b0),
                .sum(sum[15:0]),
                .cout(sel)
);
     add16 add16_1(
                 .a(a[31:16]),					
                 .b(b[31:16]),
         		.cin(1'b0),
         		.sum(sum1[31:16]),
                .cout()
);
    add16 add16_2(
                .a(a[31:16]),					
                .b(b[31:16]),
        		.cin(1'b1),
                .sum(sum2[31:16]),
                .cout()
);
    
    always @(sel)begin
        case(sel)
        	1'b0: sum[31:16] = sum1[31:16];
        	1'b1: sum[31:16] = sum2[31:16];
			default :sum <= 1'b0;            
        endcase
    end
    //assign sum[31:16] = sel?sum2:sum1;//也可以使用case语句
endmodule

Module_addsub

有复制操作
在这里插入图片描述

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值