module top_module(
input [99:0] a, b,
input sel,
output [99:0] out );
always @(*)
begin
if (!sel) begin
out = a;
end
else begin
out = b;
end
end
endmodule
a와 b가 100bit wide이기 때문에 바로 전 문제처럼 boolean logic으로 풀지않고 always문 comb circuit 으로 풀었다.
result:
유의할점은
~와 ! operator의 차이점. stack overflow에서 친절히 설명해준다.
~ is a bit-wise operator and returns the invert of the argument.
! is a logical operator and returns a single bit.
위 문제에서 !sel 대신 ~sel을 쓰면 어떻게될까?
module top_module(
input [99:0] a, b,
input sel,
output [99:0] out );
always @(*)
begin
if (~sel) begin
out = a;
end
else begin
out = b;
end
end
endmodule
마찬가지로 잘 된다. sel 이 1bit이기 때문이다. 하지만 sel이 2bit 이상 넘어가면 어떻게될까?
개인적인 생각엔 ~,! 둘다 쓰지 말고 case문을 쓰던가 ==문을 쓰는게 나을것같다.