我是靠谱客的博主 优秀芒果,最近开发中收集的这篇文章主要介绍【HDLBits刷题】Mt2015 q4.,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Taken from 2015 midterm question 4

See mt2015_q4a and mt2015_q4b for the submodules used here. The top-level design consists of two instantiations each of subcircuits A and B, as shown below.

 

 Implement this circuit.

第一种是使用module

module top_module (input x, input y, output z);
    wire z1,z2,z3,z4;
    a a_instance1(
        .x(x),
        .y(y),
        .z(z1)
    );
    a a_instance2(
        .x(x),
        .y(y),
        .z(z3)
    );
    b b_instance1(
        .x(x),
        .y(y),
        .z(z2)
    );
    b b_instance2(
        .x(x),
        .y(y),
        .z(z4)
    );
    assign z = (z1|z2)^(z3&z4);
endmodule
module a (
	input wire x,
    input wire y,
    output wire z
);
    assign z = (x^y) & x;
endmodule

module b (
	input wire x,
    input wire y,
    output wire z
);
    assign z = ~x^y;
endmodule

第二种是使用task,从下面代码中可以看出来,同一个module的不同task的参数名是可以一样的,不会冲突,我理解可以认为就是局部变量;另外需要注意的就是task的调用必须在过程块中,比如always。

module top_module (input x, input y, output z);
    wire wire1,wire2,wire3,wire4;
    always@(*)begin
        A(x,y,wire1);
        A(x,y,wire2);
        B(x,y,wire3);
        B(x,y,wire4);
    end
    assign z = (wire1|wire2)^(wire3&wire4);
    //--------------task A-------------------
    task A;
        input x,y;
        output z;
        
        z = (x ^ y) & x;
    endtask
    //------------------task B-----------------
    task B;
        input x,y;
        output z;
        
        z = (x == y)?1:0;
    endtask
endmodule

最后

以上就是优秀芒果为你收集整理的【HDLBits刷题】Mt2015 q4.的全部内容,希望文章能够帮你解决【HDLBits刷题】Mt2015 q4.所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部