
HDLbits 刷题 --Popcount3
A "population count" circuit counts the number of '1's in an input vector. Build a population count circuit for a 3-bit input vector.译:“人口计数”电路计算输入向量中“1”的数量。为一个3位输入向量建立一个人口计数电路。个人解法:官方解法:运行结果:
·
A "population count" circuit counts the number of '1's in an input vector. Build a population count circuit for a 3-bit input vector.
译:
“人口计数”电路计算输入向量中“1”的数量。为一个3位输入向量建立一个人口计数电路。
个人解法:
module top_module(
input [2:0] in,
output [1:0] out );
int i;
always@(*)begin
out = 2'b00;
for(i=0;i<3;i++)begin
if(in[i]==1'b1)
out = out+1;
end
end
endmodule
官方解法:
module top_module (
input [2:0] in,
output [1:0] out
);
// This is a function of 3 inputs. One method is to use a 8-entry truth table:
// in[2:0] out[1:0]
// 000 00
// 001 01
// 010 01
// 011 10
// 100 01
// 101 10
// 110 10
// 111 11
assign out[0] = (~in[2] & ~in[1] & in[0]) | (~in[2] & in[1] & ~in[0]) | (in[2] & ~in[1] & ~in[0]) | (in[2] & in[1] & in[0]);
assign out[1] = (in[1] & in[0]) | (in[2] & in[0]) | (in[2] & in[1]);
// Using the addition operator works too:
// assign out = in[0]+in[1]+in[2];
// Yet another method uses behavioural code inside a procedure (combinational always block)
// to directly implement the truth table:
/*
always @(*) begin
case (in)
3'd0: out = 2'd0;
3'd1: out = 2'd1;
3'd2: out = 2'd1;
3'd3: out = 2'd2;
3'd4: out = 2'd1;
3'd5: out = 2'd2;
3'd6: out = 2'd2;
3'd7: out = 2'd3;
endcase
end
*/
endmodule
运行结果:
更多推荐
所有评论(0)