Problem 59 Even longer vectors

该题与P58类似,仅将输入从4bit改为100bit ( input [99:0] ),题目的其余要求均相同。

(本次练习期望仅使用三行语句)

Module Declaration
module top_module( 
    input [99:0] in,
    output [98:0] out_both,
    output [99:1] out_any,
    output [99:0] out_different );

题目要求我们采用三句assign语句来实现该电路的功能

这里答案用的思路是将vectors移位,再进行门的位比较。比较巧妙,我是没想到还能这么做。

module top_module( 
    input [99:0] in,
    output [98:0] out_both,
    output [99:1] out_any,
    output [99:0] out_different );

    assign out_both = in[98:0] & in[99:1];
    assign out_any  = in[99:1] | in[98:0];
    assign out_different = in ^ {in[0],in[99:1]};

endmodule

 

我自己是这么写的,用的always,虽然也能实现,但复杂度增加了很多。

module top_module( 
    input [99:0] in,
    output [98:0] out_both,
    output [99:1] out_any,
    output [99:0] out_different );
    
    always @(*)begin
        out_both=0;
        for(integer i=0;i<99;i++)begin
            out_both[i]=in[i]&in[i+1];
        end
    end
    always @(*)begin
        out_any=0;
        for(integer i=1;i<=99;i++)begin
            out_any[i]=in[i]|in[i-1];
        end
    end
    always @(*)begin
        out_different=0;
        for(integer i=0;i<=99;i++)begin
            if(i==99)begin
                out_different[i]=in[i]^in[0];
            end 
            else
            out_different[i]=in[i]^in[i+1];
        end
    end
endmodule

 

    always @(*)begin    out_both=3'b000;        for(integer i=0;i<=2;i++)begin            out_both[i]=in[i]&in[i+1];        end    end    always @(*)begin    out_any=3'b000;        for(integer i=1;i<=3;i++)begin            out_any[i]=in[i]|in[i-1];        end    end    always @(*)begin    out_different=3'b000;        for(integer i=0;i<=3;i++)begin            if(i==3)begin                out_different[i]=in[i]^in[0];            end             else            out_different[i]=in[i]^in[i+1];        end    end