Verilog Module知识点


提示:以下是本篇文章正文内容,下面案例可供参考

Module

1.连接信号到Module

//第二种写法是更加提倡的,因为这样会更加清楚对应关系
module_a u_name(a,b,c);
module_a u_name(.in1(a),.in2(b),.out(c));

2.实例化多个module

在这里插入图片描述

//注意到连接各个模块的时候需要使用到wire来连接
//如果是并联连接就不需要如此麻烦
module top_module ( input clk, input d, output q );
	wire wire1,wire2;
    my_dff u_my_dff1(.clk(clk),.d(d),.q(wire1));
    my_dff u_my_dff2(.clk(clk),.d(wire1),.q(wire2));
    my_dff u_my_dff3(.clk(clk),.d(wire2),.q(q));
endmodule

3.模块嵌套调用

在这里插入图片描述

//通过嵌套模块来实现32位加法器
module top_module (
    input [31:0] a,
    input [31:0] b,
    output [31:0] sum
);//
//module add16 ( input[15:0] a, input[15:0] b, input cin, output[15:0] sum, output cout );
	wire cin1,cout1,cout2;
    wire [15:0] sum1,sum2;
    assign cin1 = 0;
    add16 u_add16_1(.a(a[15:0]),.b(b[15:0]),.cin(cin1),.sum(sum1),.cout(cout1));
    add16 u_add16_2(.a(a[31:16]),.b(b[31:16]),.cin(cout1),.sum(sum2),.cout(cout2));
    assign sum = {sum2,sum1};
endmodule

module add1 ( input a, input b, input cin,   output sum, output cout );
    always @(*)begin
        if(cin == 0)
            begin
                if(a == 1 && b == 1)
                    begin
                    	cout = 1;
                        sum = 0;
                    end
                else
                    begin
                    	cout = 0;
                        sum = a+b;
                    end
            end
        else
            begin
                if(a == 0 && b == 0)
                    begin
                    	cout = 0;
                        sum = 1;
                    end
                else
                    begin
                    	cout = 1;
                        sum = ~(a^b);
                    end
            end
    end
// Full adder module here

endmodule


版权声明:本文为qq_37858023原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。