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