verilator/test_regress/t/t_opt_assemble_cellarray.v

116 lines
2.2 KiB
Systemverilog

// DESCRIPTION: Verilator: Verilog Test module
//
// This file ONLY is placed under the Creative Commons Public Domain.
// SPDX-FileCopyrightText: 2014 Jie Xu
// SPDX-License-Identifier: CC0-1.0
// change these two parameters to see the speed differences
`define DATA_WIDTH 8
`define REP_COUNT4 `DATA_WIDTH/4
`define REP_COUNT2 `DATA_WIDTH/2
module t (
input clk
);
reg [3:0] count4 = 0;
reg [1:0] count2 = 0;
reg [`DATA_WIDTH-1:0] a = {`REP_COUNT4{4'b0000}};
reg [`DATA_WIDTH-1:0] b = {`REP_COUNT4{4'b1111}};
reg [`DATA_WIDTH-1:0] c = {`REP_COUNT4{4'b1111}};
reg [`DATA_WIDTH-1:0] d = {`REP_COUNT4{4'b1111}};
reg [`DATA_WIDTH-1:0] res1;
reg [`DATA_WIDTH-1:0] res2;
reg [`DATA_WIDTH-1:0] res3;
reg [`DATA_WIDTH-1:0] res4;
drv1 t_drv1[`DATA_WIDTH-1:0] (
.colSelA(a),
.datao(res1)
);
drv2 t_drv2[`DATA_WIDTH-1:0] (
.colSelA(a),
.colSelB(b),
.datao(res2)
);
drv3 t_drv3[`DATA_WIDTH-1:0] (
.colSelA(a),
.colSelB(b),
.colSelC(c),
.datao(res3)
);
drv4 t_drv4[`DATA_WIDTH-1:0] (
.colSelA(a),
.colSelB(b),
.colSelC(c),
.colSelD(d),
.datao(res4)
);
always @(posedge clk) begin
count2 <= count2 + 1;
count4 <= count4 + 1;
a <= {`REP_COUNT4{count4}};
b <= {`REP_COUNT4{count4}};
c <= {`REP_COUNT2{count2}};
d <= {`REP_COUNT2{count2}};
if (res1 != (a)) begin
$stop;
end
if (res2 != (a & b)) begin
$stop;
end
if (res3 != (a & b & c)) begin
$stop;
end
if (res4 != (a & b & c & d)) begin
$stop;
end
if (count4 > 10) begin
$write("*-* All Finished *-*\n");
$finish;
end
end
endmodule
module drv1 (
input colSelA,
output datao
);
assign datao = colSelA;
endmodule
module drv2 (
input colSelA,
input colSelB,
output datao
);
assign datao = colSelB & colSelA;
endmodule
module drv3 (
input colSelA,
input colSelB,
input colSelC,
output datao
);
assign datao = colSelB & colSelA & colSelC;
endmodule
module drv4 (
input colSelA,
input colSelB,
input colSelC,
input colSelD,
output datao
);
assign datao = colSelB & colSelA & colSelC & colSelD;
endmodule