mirror of
https://github.com/vortexgpgpu/vortex.git
synced 2025-04-23 21:39:10 -04:00
minor update
This commit is contained in:
parent
9f34b2944c
commit
132260d84c
1 changed files with 58 additions and 0 deletions
58
hw/rtl/libs/VX_popcount.v
Normal file
58
hw/rtl/libs/VX_popcount.v
Normal file
|
@ -0,0 +1,58 @@
|
|||
`include "VX_platform.vh"
|
||||
|
||||
`TRACING_OFF
|
||||
module VX_popcount #(
|
||||
parameter MODEL = 1,
|
||||
parameter N = 1,
|
||||
parameter LOGN = $clog2(N),
|
||||
parameter M = LOGN+1
|
||||
) (
|
||||
input wire [N-1:0] in_i,
|
||||
output wire [M-1:0] cnt_o
|
||||
);
|
||||
if (N == 1) begin
|
||||
|
||||
assign cnt_o = in_i;
|
||||
|
||||
end else if (MODEL == 1) begin
|
||||
`IGNORE_WARNINGS_BEGIN
|
||||
localparam PN = 1 << $clog2(N);
|
||||
localparam LOGPN = $clog2(PN);
|
||||
|
||||
wire [M-1:0] tmp [0:PN-1] [0:PN-1];
|
||||
|
||||
for (genvar i = 0; i < N; ++i) begin
|
||||
assign tmp[0][i] = in_i[i];
|
||||
end
|
||||
|
||||
for (genvar i = N; i < PN; ++i) begin
|
||||
assign tmp[0][i] = '0;
|
||||
end
|
||||
|
||||
for (genvar j = 0; j < LOGPN; ++j) begin
|
||||
for (genvar i = 0; i < (1 << (LOGPN-j-1)); ++i) begin
|
||||
assign tmp[j+1][i] = tmp[j][i*2] + tmp[j][i*2+1];
|
||||
end
|
||||
end
|
||||
|
||||
assign cnt_o = tmp[LOGPN][0];
|
||||
`IGNORE_WARNINGS_END
|
||||
end else begin
|
||||
|
||||
reg [M-1:0] cnt_r;
|
||||
|
||||
always @(*) begin
|
||||
cnt_r = '0;
|
||||
for (integer i = 0; i < N; ++i) begin
|
||||
`IGNORE_WARNINGS_BEGIN
|
||||
cnt_r = cnt_r + in_i[i];
|
||||
`IGNORE_WARNINGS_END
|
||||
end
|
||||
end
|
||||
|
||||
assign cnt_o = cnt_r;
|
||||
|
||||
end
|
||||
|
||||
endmodule
|
||||
`TRACING_ON
|
Loading…
Add table
Add a link
Reference in a new issue