verilator/test_regress/t/t_func_grey.v

80 lines
1.5 KiB
Systemverilog

// DESCRIPTION: Verilator: Verilog Test module
//
// This file ONLY is placed under the Creative Commons Public Domain.
// SPDX-FileCopyrightText: 2003 Wilson Snyder
// SPDX-License-Identifier: CC0-1.0
module t (
input clk
);
// surefire lint_off _NETNM
// surefire lint_off STMINI
integer _mode;
initial _mode = 0;
wire [2:0] b3;
reg [2:0] g3;
wire [5:0] b6;
reg [5:0] g6;
t_func_grey2bin #(3) g2b3 (
.b(b3),
.g(g3)
);
t_func_grey2bin #(6) g2b6 (
.b(b6),
.g(g6)
);
always @(posedge clk) begin
if (_mode == 0) begin
_mode <= 1;
g3 <= 3'b101;
g6 <= 6'b110101;
end
else if (_mode == 1) begin
if (b3 !== 3'b110) $stop;
if (b6 !== 6'b100110) $stop;
_mode <= 2;
$write("*-* All Finished *-*\n");
$finish;
end
end
endmodule
// Module gray2bin
// convert an arbitrary width gray coded number to binary. The conversion
// of a 4 bit gray (represented as "g") to binary ("b") would go as follows:
// b[3] = ^g[3] = g[3]
// b[2] = ^g[3:2]
// b[1] = ^g[3:1]
// b[0] = ^g[3:[SZ-1:0] cur0]
module t_func_grey2bin ( /*AUTOARG*/
// Outputs
b,
// Inputs
g
);
// surefire lint_off STMFOR
parameter SZ = 5;
output [SZ-1:0] b;
input [SZ-1:0] g;
/*AUTOREG*/
// Beginning of automatic regs (for this module's undeclared outputs)
reg [SZ-1:0] b;
// End of automatics
integer i;
always @( /*AUTOSENSE*/ g)
for (i = 0; i < SZ; i = i + 1)
b[i] = ^(g >> i); // surefire lint_off_line LATASS
endmodule