OpenCores
URL https://opencores.org/ocsvn/sudoku/sudoku/trunk

Subversion Repositories sudoku

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 1 to Rev 2
    Reverse comparison

Rev 1 → Rev 2

/sudoku/trunk/rtl/sudoku_search.v
0,0 → 1,437
module sudoku_search(/*AUTOARG*/
// Outputs
outGrid, done, error,
// Inputs
clk, rst, start, inGrid
);
parameter LG_DEPTH = 6;
localparam DEPTH = 1 << LG_DEPTH;
input clk;
input rst;
input start;
input [728:0] inGrid;
output [728:0] outGrid;
output done;
output error;
 
reg [4:0] r_state, n_state;
reg [31:0] r_stack_pos, t_stack_pos;
reg [31:0] t_stack_addr;
 
reg t_write_stack, t_read_stack;
reg t_clr, t_start;
reg [6:0] r_minIdx, t_minIdx;
reg [8:0] r_cell, t_cell;
wire [3:0] w_ffs;
wire [8:0] w_ffs_mask;
reg [728:0] r_board, n_board;
wire [728:0] w_stack_out;
reg [728:0] t_stack_in;
 
 
wire [728:0] s_outGrid;
wire [8:0] s_outGrid2d[80:0];
wire [728:0] w_nGrid;
reg [8:0] t_outGrid2d[80:0];
 
reg t_done, r_done;
reg t_error, r_error;
assign done = r_done;
assign error = r_error;
genvar i;
 
assign outGrid = s_outGrid;
wire [6:0] w_minIdx, w_unsolvedCells;
wire [3:0] w_minPoss;
wire w_allDone, w_anyChanged, w_anyError, w_timeOut;
 
generate
for(i=0;i<81;i=i+1)
begin: unflatten
assign s_outGrid2d[i] = s_outGrid[(9*(i+1))-1:9*i];
end
endgenerate
 
integer j;
always@(*)
begin
for(j=0;j<81;j=j+1)
begin
t_outGrid2d[j] = s_outGrid2d[j];
end
t_outGrid2d[r_minIdx] = w_ffs_mask;
end
 
generate
for(i=0;i<81;i=i+1)
begin: flatten
assign w_nGrid[(9*(i+1)-1):(9*i)] = t_outGrid2d[i];
end
endgenerate
 
find_first_set ffs0
(
.in(r_cell),
.out(w_ffs),
.out_mask(w_ffs_mask)
);
always@(*)
begin
t_clr = 1'b0;
t_start = 1'b0;
t_write_stack = 1'b0;
t_read_stack = 1'b0;
t_stack_in = 729'd0;
t_stack_pos = r_stack_pos;
t_stack_addr = t_stack_pos;
n_state = r_state;
n_board = r_board;
 
t_minIdx = r_minIdx;
t_cell = r_cell;
 
t_done = r_done;
t_error = r_error;
case(r_state)
/* copy input to stack */
5'd0:
begin
if(start)
begin
t_write_stack = 1'b1;
t_stack_pos = r_stack_pos + 32'd1;
n_state = 5'd1;
t_stack_in = inGrid;
end
else
begin
n_state = 5'd0;
end
end
/* pop state off the top of the stack,
* data valid in the next state */
5'd1:
begin
t_read_stack = 1'b1;
//$display("reading new board");
t_stack_pos = r_stack_pos - 32'd1;
t_stack_addr = t_stack_pos;
n_state = (r_stack_pos == 32'd0) ? 5'd31 : 5'd2;
end
/* data out of stack ram is
* valid .. save in register */
5'd2:
begin
t_clr = 1'b1;
n_board = w_stack_out;
n_state = 5'd3;
end
 
/* stack read..valid in r_state */
5'd3:
begin
t_start = 1'b1;
n_state = 5'd4;
if(r_board === 729'dx)
begin
$display("GOT X!");
$display("%b", r_board);
$finish();
end
end
/* wait for exact cover
* hardware to complete */
5'd4:
begin
if(w_allDone)
begin
n_state = w_anyError ? 5'd1 : 5'd8;
end
else if(w_timeOut)
begin
t_minIdx = w_minIdx;
n_state = 5'd5;
end
else
begin
n_state = 5'd4;
end
end // case: 5'd4
 
5'd5:
begin
/* extra cycle */
t_cell = s_outGrid2d[r_minIdx];
n_state = 5'd6;
end
/* timeOut -> push next states onto the stack */
5'd6:
begin
/* if min cell is zero, the board is incorrect
* and we have no need to push successors */
if(r_cell == 9'd0)
begin
n_state = 5'd1;
end
else
begin
t_cell = r_cell & (~w_ffs_mask);
t_stack_in = w_nGrid;
t_write_stack = 1'b1;
t_stack_pos = r_stack_pos + 32'd1;
n_state = (t_stack_pos == (DEPTH-1)) ? 5'd31: 5'd7;
end
end
 
5'd7:
begin
n_state = (r_cell == 9'd0) ? 5'd1 : 5'd6;
end
 
5'd8:
begin
t_done = 1'b1;
n_state = 5'd8;
end
5'd31:
begin
n_state = 5'd31;
t_error = 1'b1;
end
default:
begin
n_state = 5'd0;
end
endcase // case (r_state)
end
 
always@(posedge clk)
begin
if(rst)
begin
r_board <= 729'd0;
r_state <= 5'd0;
r_stack_pos <= 32'd0;
r_minIdx <= 7'd0;
r_cell <= 9'd0;
r_done <= 1'b0;
r_error <= 1'b0;
end
else
begin
r_board <= n_board;
r_state <= n_state;
r_stack_pos <= t_stack_pos;
r_minIdx <= t_minIdx;
r_cell <= t_cell;
r_done <= t_done;
r_error <= t_error;
end
end // always@ (posedge clk)
 
/* stack ram */
stack_ram #(.LG_DEPTH(LG_DEPTH)) stack0
(
// Outputs
.d_out (w_stack_out),
// Inputs
.clk (clk),
.w (t_write_stack),
.addr (t_stack_addr[(LG_DEPTH-1):0] ),
.d_in (t_stack_in)
);
 
sudoku cover0 (
// Outputs
.outGrid (s_outGrid),
.unsolvedCells (w_unsolvedCells),
.timeOut (w_timeOut),
.allDone (w_allDone),
.anyChanged (w_anyChanged),
.anyError (w_anyError),
.minIdx (w_minIdx),
.minPoss (w_minPoss),
// Inputs
.clk (clk),
.rst (rst),
.clr (t_clr),
.start (t_start),
.inGrid (r_board)
);
endmodule // sudoku_search
 
 
 
module stack_ram(/*AUTOARG*/
// Outputs
d_out,
// Inputs
clk, w, addr, d_in
);
parameter LG_DEPTH = 4;
localparam DEPTH = 1 << LG_DEPTH;
input clk;
input w;
input [(LG_DEPTH-1):0] addr;
input [728:0] d_in;
output [728:0] d_out;
 
reg [728:0] r_dout;
assign d_out = r_dout;
 
reg [728:0] mem [(DEPTH-1):0];
always@(posedge clk)
begin
if(w)
begin
if(d_in == 729'dx)
begin
$display("pushing X!!!");
$finish();
end
mem[addr] <= d_in;
end
else
begin
r_dout <= mem[addr];
end
end // always@ (posedge clk)
 
endmodule // stack_ram
 
module find_first_set(out,out_mask,in);
input [8:0] in;
output [3:0] out;
output [8:0] out_mask;
genvar i;
wire [8:0] w_fz;
wire [8:0] w_fzo;
assign w_fz[0] = in[0];
assign w_fzo[0] = in[0];
 
assign out = (w_fzo == 9'd1) ? 4'd1 :
(w_fzo == 9'd2) ? 4'd2 :
(w_fzo == 9'd4) ? 4'd3 :
(w_fzo == 9'd8) ? 4'd4 :
(w_fzo == 9'd16) ? 4'd5 :
(w_fzo == 9'd32) ? 4'd6 :
(w_fzo == 9'd64) ? 4'd7 :
(w_fzo == 9'd128) ? 4'd8 :
(w_fzo == 9'd256) ? 4'd9 :
4'hf;
 
assign out_mask = w_fzo;
generate
for(i=1;i<9;i=i+1)
begin : www
fz fzN (
.out(w_fzo[i]),
.f_out(w_fz[i]),
.f_in(w_fz[i-1]),
.in(in[i])
);
end
endgenerate
endmodule // find_first_set
 
module fz(/*AUTOARG*/
// Outputs
out, f_out,
// Inputs
f_in, in
);
input f_in;
input in;
output out;
output f_out;
assign out = in & (~f_in);
assign f_out = f_in | in;
endmodule
 
 
module checkCorrect(/*AUTOARG*/
// Outputs
y,
// Inputs
in
);
input [80:0] in;
output y;
wire [8:0] grid1d [8:0];
wire [8:0] w_set;
wire [8:0] w_gridOR =
grid1d[0] |
grid1d[1] |
grid1d[2] |
grid1d[3] |
grid1d[4] |
grid1d[5] |
grid1d[6] |
grid1d[7] |
grid1d[8];
wire w_allSet = (w_gridOR == 9'b111111111);
wire w_allAssign = (w_set == 9'b111111111);
assign y = w_allSet & w_allAssign;
 
genvar i;
generate
for(i=0;i<9;i=i+1)
begin: unflatten
assign grid1d[i] = in[(9*(i+1))-1:9*i];
assign w_set[i] =
(grid1d[i] == 9'd1) |
(grid1d[i] == 9'd2) |
(grid1d[i] == 9'd4) |
(grid1d[i] == 9'd8) |
(grid1d[i] == 9'd16) |
(grid1d[i] == 9'd32) |
(grid1d[i] == 9'd64) |
(grid1d[i] == 9'd128) |
(grid1d[i] == 9'd256);
end
endgenerate
endmodule // correct
/sudoku/trunk/rtl/piece.v
0,0 → 1,325
module piece(/*AUTOARG*/
// Outputs
changed, done, curr_value, error,
// Inputs
clk, rst, start, clr, start_value, my_row, my_col, my_square
);
input clk;
input rst;
input start;
input clr;
output changed;
output done;
output error;
input [8:0] start_value;
output [8:0] curr_value;
input [71:0] my_row;
input [71:0] my_col;
input [71:0] my_square;
wire [8:0] row2d [7:0];
wire [8:0] col2d [7:0];
wire [8:0] sqr2d [7:0];
 
wire [8:0] row2d_solv [7:0];
wire [8:0] col2d_solv [7:0];
wire [8:0] sqr2d_solv [7:0];
 
reg [8:0] r_curr_value;
reg [8:0] t_next_value;
assign curr_value = r_curr_value;
 
reg [2:0] r_state, n_state;
reg r_solved, t_solved;
reg t_changed,r_changed;
reg t_error,r_error;
assign done = r_solved;
assign changed = r_changed;
assign error = r_error;
wire [8:0] w_solved;
wire w_piece_solved = (w_solved != 9'd0);
one_set s0 (r_curr_value, w_solved);
always@(posedge clk)
begin
if(rst)
begin
r_curr_value <= 9'd0;
r_state <= 3'd0;
r_solved <= 1'b0;
r_changed <= 1'b0;
r_error <= 1'b0;
end
else
begin
r_curr_value <= clr ? 9'd0 : t_next_value;
r_state <= clr ? 3'd0 : n_state;
r_solved <= clr ? 1'b0 : t_solved;
r_changed <= clr ? 1'b0 : t_changed;
r_error <= clr ? 1'b0 : t_error;
end
end // always@ (posedge clk)
 
genvar i;
generate
for(i=0;i<8;i=i+1)
begin: unflatten
assign row2d[i] = my_row[(9*(i+1))-1:9*i];
assign col2d[i] = my_col[(9*(i+1))-1:9*i];
assign sqr2d[i] = my_square[(9*(i+1))-1:9*i];
end
endgenerate
 
generate
for(i=0;i<8;i=i+1)
begin: unique_rows
one_set rs (row2d[i], row2d_solv[i]);
one_set cs (col2d[i], col2d_solv[i]);
one_set ss (sqr2d[i], sqr2d_solv[i]);
end
endgenerate
 
/* OR output of one_set to find cells
* that are already set in col, grid, row */
 
wire [8:0] set_row =
row2d_solv[0] | row2d_solv[1] | row2d_solv[2] |
row2d_solv[3] | row2d_solv[4] | row2d_solv[5] |
row2d_solv[6] | row2d_solv[7];
wire [8:0] set_col =
col2d_solv[0] | col2d_solv[1] | col2d_solv[2] |
col2d_solv[3] | col2d_solv[4] | col2d_solv[5] |
col2d_solv[6] | col2d_solv[7];
wire [8:0] set_sqr =
sqr2d_solv[0] | sqr2d_solv[1] | sqr2d_solv[2] |
sqr2d_solv[3] | sqr2d_solv[4] | sqr2d_solv[5] |
sqr2d_solv[6] | sqr2d_solv[7];
 
integer ii;
always@(posedge clk)
begin
if(rst==1'b0)
begin
for(ii=0;ii<8;ii=ii+1)
begin
if(row2d_solv[ii] === 9'dx)
begin
$display("row %d", ii);
$stop();
end
end
end
//$display("row2d_solv[0] = %x", row2d_solv[0]);
end
 
 
/* finding unique */
wire [8:0] row_or =
row2d[0] | row2d[1] | row2d[2] |
row2d[3] | row2d[4] | row2d[5] |
row2d[6] | row2d[7] ;
 
wire [8:0] col_or =
col2d[0] | col2d[1] | col2d[2] |
col2d[3] | col2d[4] | col2d[5] |
col2d[6] | col2d[7] ;
wire [8:0] sqr_or =
sqr2d[0] | sqr2d[1] | sqr2d[2] |
sqr2d[3] | sqr2d[4] | sqr2d[5] |
sqr2d[6] | sqr2d[7] ;
 
 
wire [8:0] row_nor = ~row_or;
wire [8:0] col_nor = ~col_or;
wire [8:0] sqr_nor = ~sqr_or;
 
wire [8:0] row_singleton;
wire [8:0] col_singleton;
wire [8:0] sqr_singleton;
one_set s1 (r_curr_value & row_nor, row_singleton);
one_set s2 (r_curr_value & col_nor, col_singleton);
one_set s3 (r_curr_value & sqr_nor, sqr_singleton);
/* these are the values of the set rows, columns, and
* squares */
wire [8:0] not_poss = set_row | set_col | set_sqr;
wire [8:0] new_poss = r_curr_value & (~not_poss);
wire w_piece_zero = (r_curr_value == 9'd0);
always@(*)
begin
t_next_value = r_curr_value;
n_state = r_state;
t_solved = r_solved;
t_changed = 1'b0;
t_error = r_error;
case(r_state)
3'd0:
begin
if(start)
begin
t_next_value = start_value;
n_state = 3'd1;
t_changed = 1'b1;
t_error = 1'b0;
end
end
3'd1:
begin
if(w_piece_solved | w_piece_zero)
begin
t_solved = 1'b1;
n_state = 3'd7;
t_changed = 1'b1;
t_error = w_piece_zero;
end
else
begin
t_changed = (new_poss != r_curr_value);
t_next_value = new_poss;
n_state = 3'd2;
end
end // case: 3'd1
3'd2:
begin
if(w_piece_solved | w_piece_zero)
begin
t_solved = 1'b1;
n_state = 3'd7;
t_error = w_piece_zero;
end
else
begin
if(row_singleton != 9'd0)
begin
//$display("used row singleton");
t_next_value = row_singleton;
t_changed = 1'b1;
t_solved = 1'b1;
n_state = 3'd7;
end
else if(col_singleton != 9'd0)
begin
//$display("used col singleton");
t_next_value = col_singleton;
t_changed = 1'b1;
t_solved = 1'b1;
n_state = 3'd7;
end
else if(sqr_singleton != 9'd0)
begin
//$display("used sqr singleton");
t_next_value = sqr_singleton;
t_changed = 1'b1;
t_solved = 1'b1;
n_state = 3'd7;
end
else
begin
n_state = 3'd1;
end
end
end
3'd7:
begin
t_solved = 1'b1;
n_state = 3'd7;
end
 
endcase // case (r_state)
end
endmodule // piece
 
module one_set(input [8:0] in, output [8:0] out);
wire is_pow2 =
(in == 9'd1) | (in == 9'd2) | (in == 9'd4) |
(in == 9'd8) | (in == 9'd16) | (in == 9'd32) |
(in == 9'd64) | (in == 9'd128) | (in == 9'd256);
assign out = {9{is_pow2}} & in;
endmodule // one_set
 
module two_set(input [8:0] in, output [8:0] out);
wire [3:0] c;
one_count9 oc (.in(in), .out(c));
assign out = (c==4'd2) ? in : 9'd0;
endmodule
 
module ones_count81(input [80:0] in, output [6:0] out);
wire [83:0] w_in = {3'd0, in};
wire [2:0] ps [20:0];
 
integer x;
reg [6:0] t_sum;
genvar i;
generate
for(i=0;i<21;i=i+1)
begin : builders
one_count4 os (w_in[(4*(i+1)) - 1 : 4*i], ps[i]);
end
endgenerate
always@(*)
begin
t_sum = 7'd0;
for(x = 0; x < 21; x=x+1)
begin
t_sum = t_sum + {3'd0, ps[x]};
end
end
assign out = t_sum;
endmodule // ones_count81
 
module one_count4(input [3:0] in, output [2:0] out);
assign out =
(in == 4'b0000) ? 3'd0 :
(in == 4'b0001) ? 3'd1 :
(in == 4'b0010) ? 3'd1 :
(in == 4'b0011) ? 3'd2 :
(in == 4'b0100) ? 3'd1 :
(in == 4'b0101) ? 3'd2 :
(in == 4'b0110) ? 3'd2 :
(in == 4'b0111) ? 3'd3 :
(in == 4'b1000) ? 3'd1 :
(in == 4'b1001) ? 3'd2 :
(in == 4'b1010) ? 3'd2 :
(in == 4'b1011) ? 3'd3 :
(in == 4'b1100) ? 3'd2 :
(in == 4'b1101) ? 3'd3 :
(in == 4'b1110) ? 3'd3 :
3'd4;
endmodule // one_count4
 
module one_count9(input [8:0] in, output [3:0] out);
wire [2:0] o0, o1;
one_count4 m0 (in[3:0], o0);
one_count4 m1 (in[7:4], o1);
 
assign out = {3'd0,in[8]} + {1'd0,o1} + {1'd0,o0};
 
endmodule
/sudoku/trunk/rtl/minPiece.v
0,0 → 1,228
module minPiece(/*AUTOARG*/
// Outputs
minPoss, minIdx,
// Inputs
clk, rst, inGrid
);
 
input clk;
input rst;
input [728:0] inGrid;
output [3:0] minPoss;
output [6:0] minIdx;
reg [3:0] r_minPoss;
reg [6:0] r_minIdx;
 
assign minPoss = r_minPoss;
assign minIdx = r_minIdx;
wire [8:0] grid2d [80:0];
 
wire [6:0] gridIndices [80:0];
wire [3:0] gridPoss [80:0];
genvar i;
 
/* unflatten */
generate
for(i=0;i<81;i=i+1)
begin: unflatten
assign grid2d[i] = inGrid[(9*(i+1))-1:9*i];
assign gridIndices[i] = i;
countPoss cP (.clk(clk), .rst(rst), .in(grid2d[i]), .out(gridPoss[i]));
end
endgenerate
 
wire [6:0] stage1_gridIndices [39:0];
wire [3:0] stage1_gridPoss [39:0];
 
generate
for(i=0;i<40;i=i+1)
begin: stage1
cmpPiece cP_stage1
(
.outPoss(stage1_gridPoss[i]),
.outIdx(stage1_gridIndices[i]),
.inPoss_0(gridPoss[2*i]),
.inIdx_0(gridIndices[2*i]),
.inPoss_1(gridPoss[2*i+1]),
.inIdx_1(gridIndices[2*i+1])
);
end
endgenerate
 
wire [6:0] stage2_gridIndices [19:0];
wire [3:0] stage2_gridPoss [19:0];
 
generate
for(i=0;i<20;i=i+1)
begin: stage2
cmpPiece cP_stage2
(
.outPoss(stage2_gridPoss[i]),
.outIdx(stage2_gridIndices[i]),
.inPoss_0(stage1_gridPoss[2*i]),
.inIdx_0(stage1_gridIndices[2*i]),
.inPoss_1(stage1_gridPoss[2*i+1]),
.inIdx_1(stage1_gridIndices[2*i+1])
);
end
endgenerate
 
wire [6:0] stage3_gridIndices [9:0];
wire [3:0] stage3_gridPoss [9:0];
generate
for(i=0;i<10;i=i+1)
begin: stage3
cmpPiece cP_stage3
(
.outPoss(stage3_gridPoss[i]),
.outIdx(stage3_gridIndices[i]),
.inPoss_0(stage2_gridPoss[2*i]),
.inIdx_0(stage2_gridIndices[2*i]),
.inPoss_1(stage2_gridPoss[2*i+1]),
.inIdx_1(stage2_gridIndices[2*i+1])
);
end
endgenerate
 
wire [6:0] stage4_gridIndices [4:0];
wire [3:0] stage4_gridPoss [4:0];
 
generate
for(i=0;i<5;i=i+1)
begin: stage4
cmpPiece cP_stage4
(
.outPoss(stage4_gridPoss[i]),
.outIdx(stage4_gridIndices[i]),
.inPoss_0(stage3_gridPoss[2*i]),
.inIdx_0(stage3_gridIndices[2*i]),
.inPoss_1(stage3_gridPoss[2*i+1]),
.inIdx_1(stage3_gridIndices[2*i+1])
);
end
endgenerate
 
wire [6:0] stage5_gridIndices [1:0];
wire [3:0] stage5_gridPoss [1:0];
 
generate
for(i=0;i<2;i=i+1)
begin: stage5
cmpPiece cP_stage5
(
.outPoss(stage5_gridPoss[i]),
.outIdx(stage5_gridIndices[i]),
.inPoss_0(stage4_gridPoss[2*i]),
.inIdx_0(stage4_gridIndices[2*i]),
.inPoss_1(stage4_gridPoss[2*i+1]),
.inIdx_1(stage4_gridIndices[2*i+1])
);
end
endgenerate
 
 
wire [6:0] stage6_gridIndices_A;
wire [3:0] stage6_gridPoss_A;
 
cmpPiece cP_stage6_A
(
.outPoss(stage6_gridPoss_A),
.outIdx(stage6_gridIndices_A),
.inPoss_0(stage5_gridPoss[0]),
.inIdx_0(stage5_gridIndices[0]),
.inPoss_1(stage5_gridPoss[1]),
.inIdx_1(stage5_gridIndices[1])
);
wire [6:0] stage6_gridIndices_B;
wire [3:0] stage6_gridPoss_B;
cmpPiece cP_stage6_B
(
.outPoss(stage6_gridPoss_B),
.outIdx(stage6_gridIndices_B),
.inPoss_0(stage4_gridPoss[4]),
.inIdx_0(stage4_gridIndices[4]),
.inPoss_1(gridPoss[80]),
.inIdx_1(gridIndices[80])
);
wire [6:0] stage7_gridIndices;
wire [3:0] stage7_gridPoss;
cmpPiece cP_stage7
(
.outPoss(stage7_gridPoss),
.outIdx(stage7_gridIndices),
.inPoss_0(stage6_gridPoss_A),
.inIdx_0(stage6_gridIndices_A),
.inPoss_1(stage6_gridPoss_B),
.inIdx_1(stage6_gridIndices_B)
);
 
always@(posedge clk)
begin
if(rst)
begin
r_minIdx <= 7'd0;
r_minPoss <= 4'hf;
end
else
begin
r_minIdx <= stage7_gridIndices;
r_minPoss <= stage7_gridPoss;
end
end // always@ (posedge clk)
endmodule
 
module cmpPiece(/*AUTOARG*/
// Outputs
outPoss, outIdx,
// Inputs
inPoss_0, inIdx_0, inPoss_1, inIdx_1
);
input [3:0] inPoss_0;
input [6:0] inIdx_0;
 
input [3:0] inPoss_1;
input [6:0] inIdx_1;
 
output [3:0] outPoss;
output [6:0] outIdx;
 
wire w_cmp = (inPoss_0 < inPoss_1);
 
assign outPoss = w_cmp ? inPoss_0 : inPoss_1;
assign outIdx = w_cmp ? inIdx_0 : inIdx_1;
endmodule // cmpPiece
 
module countPoss(clk,rst,in,out);
input [8:0] in;
input clk;
input rst;
output [3:0] out;
reg [3:0] r_out;
assign out = r_out;
wire [3:0] w_cnt;
one_count9 c0(in, w_cnt);
wire [3:0] w_out = (w_cnt == 4'd1) ? 4'd15 : w_cnt;
 
always@(posedge clk)
begin
r_out <= rst ? 4'd15 : w_out;
end
endmodule
/sudoku/trunk/rtl/sudoku.v
0,0 → 1,424
module sudoku(/*AUTOARG*/
// Outputs
outGrid, unsolvedCells, timeOut, allDone, anyChanged, anyError,
minIdx, minPoss,
// Inputs
clk, rst, clr, start, inGrid
);
input clk;
input rst;
input clr;
input start;
input [728:0] inGrid;
output [728:0] outGrid;
output [6:0] unsolvedCells;
output timeOut;
output allDone;
output anyChanged;
output anyError;
 
output [6:0] minIdx;
output [3:0] minPoss;
wire [8:0] grid2d [80:0];
wire [8:0] currGrid [80:0];
wire [80:0] done;
wire [80:0] changed;
wire [80:0] error;
wire [71:0] rows [80:0];
wire [71:0] cols [80:0];
wire [71:0] sqrs [80:0];
 
assign allDone = &done;
assign anyChanged = |changed;
//assign anyError = |error;
reg [3:0] r_cnt;
assign timeOut = (r_cnt == 4'b1111);
always@(posedge clk)
begin
if(rst)
begin
r_cnt <= 4'd0;
end
else
begin
r_cnt <= start ? 4'd0 : (|changed ? 4'd0 : r_cnt + 4'd1);
end
end // always@ (posedge clk)
 
minPiece mP0
(
.minPoss(minPoss),
.minIdx(minIdx),
.clk(clk),
.rst(rst),
.inGrid(outGrid)
);
genvar i;
generate
for(i=0;i<81;i=i+1)
begin: unflatten
assign grid2d[i] = inGrid[(9*(i+1))-1:9*i];
end
endgenerate
 
wire [6:0] w_unSolvedCells;
reg [6:0] r_unSolvedCells;
always@(posedge clk)
begin
if(rst)
begin
r_unSolvedCells <= 7'd81;
end
else
begin
r_unSolvedCells <= start ? 7'd81 : w_unSolvedCells;
end
end // always@ (posedge clk)
assign unsolvedCells = r_unSolvedCells;
ones_count81 oc0 (.in(~done), .out(w_unSolvedCells));
generate
for(i=0;i<81;i=i+1)
begin: pieces
piece pg (
// Outputs
.changed (changed[i]),
.done (done[i]),
.curr_value (currGrid[i]),
.error (error[i]),
// Inputs
.clk (clk),
.rst (rst),
.clr (clr),
.start (start),
.start_value (grid2d[i]),
.my_row (rows[i]),
.my_col (cols[i]),
.my_square (sqrs[i])
);
end // block: pieces
endgenerate
assign cols[0] = {currGrid[9],currGrid[18],currGrid[27],currGrid[36],currGrid[45],currGrid[54],currGrid[63],currGrid[72]};
assign rows[0] = {currGrid[1],currGrid[2],currGrid[3],currGrid[4],currGrid[5],currGrid[6],currGrid[7],currGrid[8]};
assign sqrs[0] = {currGrid[1],currGrid[2],currGrid[9],currGrid[10],currGrid[11],currGrid[18],currGrid[19],currGrid[20]};
assign cols[1] = {currGrid[10],currGrid[19],currGrid[28],currGrid[37],currGrid[46],currGrid[55],currGrid[64],currGrid[73]};
assign rows[1] = {currGrid[0],currGrid[2],currGrid[3],currGrid[4],currGrid[5],currGrid[6],currGrid[7],currGrid[8]};
assign sqrs[1] = {currGrid[0],currGrid[2],currGrid[9],currGrid[10],currGrid[11],currGrid[18],currGrid[19],currGrid[20]};
assign cols[2] = {currGrid[11],currGrid[20],currGrid[29],currGrid[38],currGrid[47],currGrid[56],currGrid[65],currGrid[74]};
assign rows[2] = {currGrid[0],currGrid[1],currGrid[3],currGrid[4],currGrid[5],currGrid[6],currGrid[7],currGrid[8]};
assign sqrs[2] = {currGrid[0],currGrid[1],currGrid[9],currGrid[10],currGrid[11],currGrid[18],currGrid[19],currGrid[20]};
assign cols[3] = {currGrid[12],currGrid[21],currGrid[30],currGrid[39],currGrid[48],currGrid[57],currGrid[66],currGrid[75]};
assign rows[3] = {currGrid[0],currGrid[1],currGrid[2],currGrid[4],currGrid[5],currGrid[6],currGrid[7],currGrid[8]};
assign sqrs[3] = {currGrid[4],currGrid[5],currGrid[12],currGrid[13],currGrid[14],currGrid[21],currGrid[22],currGrid[23]};
assign cols[4] = {currGrid[13],currGrid[22],currGrid[31],currGrid[40],currGrid[49],currGrid[58],currGrid[67],currGrid[76]};
assign rows[4] = {currGrid[0],currGrid[1],currGrid[2],currGrid[3],currGrid[5],currGrid[6],currGrid[7],currGrid[8]};
assign sqrs[4] = {currGrid[3],currGrid[5],currGrid[12],currGrid[13],currGrid[14],currGrid[21],currGrid[22],currGrid[23]};
assign cols[5] = {currGrid[14],currGrid[23],currGrid[32],currGrid[41],currGrid[50],currGrid[59],currGrid[68],currGrid[77]};
assign rows[5] = {currGrid[0],currGrid[1],currGrid[2],currGrid[3],currGrid[4],currGrid[6],currGrid[7],currGrid[8]};
assign sqrs[5] = {currGrid[3],currGrid[4],currGrid[12],currGrid[13],currGrid[14],currGrid[21],currGrid[22],currGrid[23]};
assign cols[6] = {currGrid[15],currGrid[24],currGrid[33],currGrid[42],currGrid[51],currGrid[60],currGrid[69],currGrid[78]};
assign rows[6] = {currGrid[0],currGrid[1],currGrid[2],currGrid[3],currGrid[4],currGrid[5],currGrid[7],currGrid[8]};
assign sqrs[6] = {currGrid[7],currGrid[8],currGrid[15],currGrid[16],currGrid[17],currGrid[24],currGrid[25],currGrid[26]};
assign cols[7] = {currGrid[16],currGrid[25],currGrid[34],currGrid[43],currGrid[52],currGrid[61],currGrid[70],currGrid[79]};
assign rows[7] = {currGrid[0],currGrid[1],currGrid[2],currGrid[3],currGrid[4],currGrid[5],currGrid[6],currGrid[8]};
assign sqrs[7] = {currGrid[6],currGrid[8],currGrid[15],currGrid[16],currGrid[17],currGrid[24],currGrid[25],currGrid[26]};
assign cols[8] = {currGrid[17],currGrid[26],currGrid[35],currGrid[44],currGrid[53],currGrid[62],currGrid[71],currGrid[80]};
assign rows[8] = {currGrid[0],currGrid[1],currGrid[2],currGrid[3],currGrid[4],currGrid[5],currGrid[6],currGrid[7]};
assign sqrs[8] = {currGrid[6],currGrid[7],currGrid[15],currGrid[16],currGrid[17],currGrid[24],currGrid[25],currGrid[26]};
assign cols[9] = {currGrid[0],currGrid[18],currGrid[27],currGrid[36],currGrid[45],currGrid[54],currGrid[63],currGrid[72]};
assign rows[9] = {currGrid[10],currGrid[11],currGrid[12],currGrid[13],currGrid[14],currGrid[15],currGrid[16],currGrid[17]};
assign sqrs[9] = {currGrid[0],currGrid[1],currGrid[2],currGrid[10],currGrid[11],currGrid[18],currGrid[19],currGrid[20]};
assign cols[10] = {currGrid[1],currGrid[19],currGrid[28],currGrid[37],currGrid[46],currGrid[55],currGrid[64],currGrid[73]};
assign rows[10] = {currGrid[9],currGrid[11],currGrid[12],currGrid[13],currGrid[14],currGrid[15],currGrid[16],currGrid[17]};
assign sqrs[10] = {currGrid[0],currGrid[1],currGrid[2],currGrid[9],currGrid[11],currGrid[18],currGrid[19],currGrid[20]};
assign cols[11] = {currGrid[2],currGrid[20],currGrid[29],currGrid[38],currGrid[47],currGrid[56],currGrid[65],currGrid[74]};
assign rows[11] = {currGrid[9],currGrid[10],currGrid[12],currGrid[13],currGrid[14],currGrid[15],currGrid[16],currGrid[17]};
assign sqrs[11] = {currGrid[0],currGrid[1],currGrid[2],currGrid[9],currGrid[10],currGrid[18],currGrid[19],currGrid[20]};
assign cols[12] = {currGrid[3],currGrid[21],currGrid[30],currGrid[39],currGrid[48],currGrid[57],currGrid[66],currGrid[75]};
assign rows[12] = {currGrid[9],currGrid[10],currGrid[11],currGrid[13],currGrid[14],currGrid[15],currGrid[16],currGrid[17]};
assign sqrs[12] = {currGrid[3],currGrid[4],currGrid[5],currGrid[13],currGrid[14],currGrid[21],currGrid[22],currGrid[23]};
assign cols[13] = {currGrid[4],currGrid[22],currGrid[31],currGrid[40],currGrid[49],currGrid[58],currGrid[67],currGrid[76]};
assign rows[13] = {currGrid[9],currGrid[10],currGrid[11],currGrid[12],currGrid[14],currGrid[15],currGrid[16],currGrid[17]};
assign sqrs[13] = {currGrid[3],currGrid[4],currGrid[5],currGrid[12],currGrid[14],currGrid[21],currGrid[22],currGrid[23]};
assign cols[14] = {currGrid[5],currGrid[23],currGrid[32],currGrid[41],currGrid[50],currGrid[59],currGrid[68],currGrid[77]};
assign rows[14] = {currGrid[9],currGrid[10],currGrid[11],currGrid[12],currGrid[13],currGrid[15],currGrid[16],currGrid[17]};
assign sqrs[14] = {currGrid[3],currGrid[4],currGrid[5],currGrid[12],currGrid[13],currGrid[21],currGrid[22],currGrid[23]};
assign cols[15] = {currGrid[6],currGrid[24],currGrid[33],currGrid[42],currGrid[51],currGrid[60],currGrid[69],currGrid[78]};
assign rows[15] = {currGrid[9],currGrid[10],currGrid[11],currGrid[12],currGrid[13],currGrid[14],currGrid[16],currGrid[17]};
assign sqrs[15] = {currGrid[6],currGrid[7],currGrid[8],currGrid[16],currGrid[17],currGrid[24],currGrid[25],currGrid[26]};
assign cols[16] = {currGrid[7],currGrid[25],currGrid[34],currGrid[43],currGrid[52],currGrid[61],currGrid[70],currGrid[79]};
assign rows[16] = {currGrid[9],currGrid[10],currGrid[11],currGrid[12],currGrid[13],currGrid[14],currGrid[15],currGrid[17]};
assign sqrs[16] = {currGrid[6],currGrid[7],currGrid[8],currGrid[15],currGrid[17],currGrid[24],currGrid[25],currGrid[26]};
assign cols[17] = {currGrid[8],currGrid[26],currGrid[35],currGrid[44],currGrid[53],currGrid[62],currGrid[71],currGrid[80]};
assign rows[17] = {currGrid[9],currGrid[10],currGrid[11],currGrid[12],currGrid[13],currGrid[14],currGrid[15],currGrid[16]};
assign sqrs[17] = {currGrid[6],currGrid[7],currGrid[8],currGrid[15],currGrid[16],currGrid[24],currGrid[25],currGrid[26]};
assign cols[18] = {currGrid[0],currGrid[9],currGrid[27],currGrid[36],currGrid[45],currGrid[54],currGrid[63],currGrid[72]};
assign rows[18] = {currGrid[19],currGrid[20],currGrid[21],currGrid[22],currGrid[23],currGrid[24],currGrid[25],currGrid[26]};
assign sqrs[18] = {currGrid[0],currGrid[1],currGrid[2],currGrid[9],currGrid[10],currGrid[11],currGrid[19],currGrid[20]};
assign cols[19] = {currGrid[1],currGrid[10],currGrid[28],currGrid[37],currGrid[46],currGrid[55],currGrid[64],currGrid[73]};
assign rows[19] = {currGrid[18],currGrid[20],currGrid[21],currGrid[22],currGrid[23],currGrid[24],currGrid[25],currGrid[26]};
assign sqrs[19] = {currGrid[0],currGrid[1],currGrid[2],currGrid[9],currGrid[10],currGrid[11],currGrid[18],currGrid[20]};
assign cols[20] = {currGrid[2],currGrid[11],currGrid[29],currGrid[38],currGrid[47],currGrid[56],currGrid[65],currGrid[74]};
assign rows[20] = {currGrid[18],currGrid[19],currGrid[21],currGrid[22],currGrid[23],currGrid[24],currGrid[25],currGrid[26]};
assign sqrs[20] = {currGrid[0],currGrid[1],currGrid[2],currGrid[9],currGrid[10],currGrid[11],currGrid[18],currGrid[19]};
assign cols[21] = {currGrid[3],currGrid[12],currGrid[30],currGrid[39],currGrid[48],currGrid[57],currGrid[66],currGrid[75]};
assign rows[21] = {currGrid[18],currGrid[19],currGrid[20],currGrid[22],currGrid[23],currGrid[24],currGrid[25],currGrid[26]};
assign sqrs[21] = {currGrid[3],currGrid[4],currGrid[5],currGrid[12],currGrid[13],currGrid[14],currGrid[22],currGrid[23]};
assign cols[22] = {currGrid[4],currGrid[13],currGrid[31],currGrid[40],currGrid[49],currGrid[58],currGrid[67],currGrid[76]};
assign rows[22] = {currGrid[18],currGrid[19],currGrid[20],currGrid[21],currGrid[23],currGrid[24],currGrid[25],currGrid[26]};
assign sqrs[22] = {currGrid[3],currGrid[4],currGrid[5],currGrid[12],currGrid[13],currGrid[14],currGrid[21],currGrid[23]};
assign cols[23] = {currGrid[5],currGrid[14],currGrid[32],currGrid[41],currGrid[50],currGrid[59],currGrid[68],currGrid[77]};
assign rows[23] = {currGrid[18],currGrid[19],currGrid[20],currGrid[21],currGrid[22],currGrid[24],currGrid[25],currGrid[26]};
assign sqrs[23] = {currGrid[3],currGrid[4],currGrid[5],currGrid[12],currGrid[13],currGrid[14],currGrid[21],currGrid[22]};
assign cols[24] = {currGrid[6],currGrid[15],currGrid[33],currGrid[42],currGrid[51],currGrid[60],currGrid[69],currGrid[78]};
assign rows[24] = {currGrid[18],currGrid[19],currGrid[20],currGrid[21],currGrid[22],currGrid[23],currGrid[25],currGrid[26]};
assign sqrs[24] = {currGrid[6],currGrid[7],currGrid[8],currGrid[15],currGrid[16],currGrid[17],currGrid[25],currGrid[26]};
assign cols[25] = {currGrid[7],currGrid[16],currGrid[34],currGrid[43],currGrid[52],currGrid[61],currGrid[70],currGrid[79]};
assign rows[25] = {currGrid[18],currGrid[19],currGrid[20],currGrid[21],currGrid[22],currGrid[23],currGrid[24],currGrid[26]};
assign sqrs[25] = {currGrid[6],currGrid[7],currGrid[8],currGrid[15],currGrid[16],currGrid[17],currGrid[24],currGrid[26]};
assign cols[26] = {currGrid[8],currGrid[17],currGrid[35],currGrid[44],currGrid[53],currGrid[62],currGrid[71],currGrid[80]};
assign rows[26] = {currGrid[18],currGrid[19],currGrid[20],currGrid[21],currGrid[22],currGrid[23],currGrid[24],currGrid[25]};
assign sqrs[26] = {currGrid[6],currGrid[7],currGrid[8],currGrid[15],currGrid[16],currGrid[17],currGrid[24],currGrid[25]};
assign cols[27] = {currGrid[0],currGrid[9],currGrid[18],currGrid[36],currGrid[45],currGrid[54],currGrid[63],currGrid[72]};
assign rows[27] = {currGrid[28],currGrid[29],currGrid[30],currGrid[31],currGrid[32],currGrid[33],currGrid[34],currGrid[35]};
assign sqrs[27] = {currGrid[28],currGrid[29],currGrid[36],currGrid[37],currGrid[38],currGrid[45],currGrid[46],currGrid[47]};
assign cols[28] = {currGrid[1],currGrid[10],currGrid[19],currGrid[37],currGrid[46],currGrid[55],currGrid[64],currGrid[73]};
assign rows[28] = {currGrid[27],currGrid[29],currGrid[30],currGrid[31],currGrid[32],currGrid[33],currGrid[34],currGrid[35]};
assign sqrs[28] = {currGrid[27],currGrid[29],currGrid[36],currGrid[37],currGrid[38],currGrid[45],currGrid[46],currGrid[47]};
assign cols[29] = {currGrid[2],currGrid[11],currGrid[20],currGrid[38],currGrid[47],currGrid[56],currGrid[65],currGrid[74]};
assign rows[29] = {currGrid[27],currGrid[28],currGrid[30],currGrid[31],currGrid[32],currGrid[33],currGrid[34],currGrid[35]};
assign sqrs[29] = {currGrid[27],currGrid[28],currGrid[36],currGrid[37],currGrid[38],currGrid[45],currGrid[46],currGrid[47]};
assign cols[30] = {currGrid[3],currGrid[12],currGrid[21],currGrid[39],currGrid[48],currGrid[57],currGrid[66],currGrid[75]};
assign rows[30] = {currGrid[27],currGrid[28],currGrid[29],currGrid[31],currGrid[32],currGrid[33],currGrid[34],currGrid[35]};
assign sqrs[30] = {currGrid[31],currGrid[32],currGrid[39],currGrid[40],currGrid[41],currGrid[48],currGrid[49],currGrid[50]};
assign cols[31] = {currGrid[4],currGrid[13],currGrid[22],currGrid[40],currGrid[49],currGrid[58],currGrid[67],currGrid[76]};
assign rows[31] = {currGrid[27],currGrid[28],currGrid[29],currGrid[30],currGrid[32],currGrid[33],currGrid[34],currGrid[35]};
assign sqrs[31] = {currGrid[30],currGrid[32],currGrid[39],currGrid[40],currGrid[41],currGrid[48],currGrid[49],currGrid[50]};
assign cols[32] = {currGrid[5],currGrid[14],currGrid[23],currGrid[41],currGrid[50],currGrid[59],currGrid[68],currGrid[77]};
assign rows[32] = {currGrid[27],currGrid[28],currGrid[29],currGrid[30],currGrid[31],currGrid[33],currGrid[34],currGrid[35]};
assign sqrs[32] = {currGrid[30],currGrid[31],currGrid[39],currGrid[40],currGrid[41],currGrid[48],currGrid[49],currGrid[50]};
assign cols[33] = {currGrid[6],currGrid[15],currGrid[24],currGrid[42],currGrid[51],currGrid[60],currGrid[69],currGrid[78]};
assign rows[33] = {currGrid[27],currGrid[28],currGrid[29],currGrid[30],currGrid[31],currGrid[32],currGrid[34],currGrid[35]};
assign sqrs[33] = {currGrid[34],currGrid[35],currGrid[42],currGrid[43],currGrid[44],currGrid[51],currGrid[52],currGrid[53]};
assign cols[34] = {currGrid[7],currGrid[16],currGrid[25],currGrid[43],currGrid[52],currGrid[61],currGrid[70],currGrid[79]};
assign rows[34] = {currGrid[27],currGrid[28],currGrid[29],currGrid[30],currGrid[31],currGrid[32],currGrid[33],currGrid[35]};
assign sqrs[34] = {currGrid[33],currGrid[35],currGrid[42],currGrid[43],currGrid[44],currGrid[51],currGrid[52],currGrid[53]};
assign cols[35] = {currGrid[8],currGrid[17],currGrid[26],currGrid[44],currGrid[53],currGrid[62],currGrid[71],currGrid[80]};
assign rows[35] = {currGrid[27],currGrid[28],currGrid[29],currGrid[30],currGrid[31],currGrid[32],currGrid[33],currGrid[34]};
assign sqrs[35] = {currGrid[33],currGrid[34],currGrid[42],currGrid[43],currGrid[44],currGrid[51],currGrid[52],currGrid[53]};
assign cols[36] = {currGrid[0],currGrid[9],currGrid[18],currGrid[27],currGrid[45],currGrid[54],currGrid[63],currGrid[72]};
assign rows[36] = {currGrid[37],currGrid[38],currGrid[39],currGrid[40],currGrid[41],currGrid[42],currGrid[43],currGrid[44]};
assign sqrs[36] = {currGrid[27],currGrid[28],currGrid[29],currGrid[37],currGrid[38],currGrid[45],currGrid[46],currGrid[47]};
assign cols[37] = {currGrid[1],currGrid[10],currGrid[19],currGrid[28],currGrid[46],currGrid[55],currGrid[64],currGrid[73]};
assign rows[37] = {currGrid[36],currGrid[38],currGrid[39],currGrid[40],currGrid[41],currGrid[42],currGrid[43],currGrid[44]};
assign sqrs[37] = {currGrid[27],currGrid[28],currGrid[29],currGrid[36],currGrid[38],currGrid[45],currGrid[46],currGrid[47]};
assign cols[38] = {currGrid[2],currGrid[11],currGrid[20],currGrid[29],currGrid[47],currGrid[56],currGrid[65],currGrid[74]};
assign rows[38] = {currGrid[36],currGrid[37],currGrid[39],currGrid[40],currGrid[41],currGrid[42],currGrid[43],currGrid[44]};
assign sqrs[38] = {currGrid[27],currGrid[28],currGrid[29],currGrid[36],currGrid[37],currGrid[45],currGrid[46],currGrid[47]};
assign cols[39] = {currGrid[3],currGrid[12],currGrid[21],currGrid[30],currGrid[48],currGrid[57],currGrid[66],currGrid[75]};
assign rows[39] = {currGrid[36],currGrid[37],currGrid[38],currGrid[40],currGrid[41],currGrid[42],currGrid[43],currGrid[44]};
assign sqrs[39] = {currGrid[30],currGrid[31],currGrid[32],currGrid[40],currGrid[41],currGrid[48],currGrid[49],currGrid[50]};
assign cols[40] = {currGrid[4],currGrid[13],currGrid[22],currGrid[31],currGrid[49],currGrid[58],currGrid[67],currGrid[76]};
assign rows[40] = {currGrid[36],currGrid[37],currGrid[38],currGrid[39],currGrid[41],currGrid[42],currGrid[43],currGrid[44]};
assign sqrs[40] = {currGrid[30],currGrid[31],currGrid[32],currGrid[39],currGrid[41],currGrid[48],currGrid[49],currGrid[50]};
assign cols[41] = {currGrid[5],currGrid[14],currGrid[23],currGrid[32],currGrid[50],currGrid[59],currGrid[68],currGrid[77]};
assign rows[41] = {currGrid[36],currGrid[37],currGrid[38],currGrid[39],currGrid[40],currGrid[42],currGrid[43],currGrid[44]};
assign sqrs[41] = {currGrid[30],currGrid[31],currGrid[32],currGrid[39],currGrid[40],currGrid[48],currGrid[49],currGrid[50]};
assign cols[42] = {currGrid[6],currGrid[15],currGrid[24],currGrid[33],currGrid[51],currGrid[60],currGrid[69],currGrid[78]};
assign rows[42] = {currGrid[36],currGrid[37],currGrid[38],currGrid[39],currGrid[40],currGrid[41],currGrid[43],currGrid[44]};
assign sqrs[42] = {currGrid[33],currGrid[34],currGrid[35],currGrid[43],currGrid[44],currGrid[51],currGrid[52],currGrid[53]};
assign cols[43] = {currGrid[7],currGrid[16],currGrid[25],currGrid[34],currGrid[52],currGrid[61],currGrid[70],currGrid[79]};
assign rows[43] = {currGrid[36],currGrid[37],currGrid[38],currGrid[39],currGrid[40],currGrid[41],currGrid[42],currGrid[44]};
assign sqrs[43] = {currGrid[33],currGrid[34],currGrid[35],currGrid[42],currGrid[44],currGrid[51],currGrid[52],currGrid[53]};
assign cols[44] = {currGrid[8],currGrid[17],currGrid[26],currGrid[35],currGrid[53],currGrid[62],currGrid[71],currGrid[80]};
assign rows[44] = {currGrid[36],currGrid[37],currGrid[38],currGrid[39],currGrid[40],currGrid[41],currGrid[42],currGrid[43]};
assign sqrs[44] = {currGrid[33],currGrid[34],currGrid[35],currGrid[42],currGrid[43],currGrid[51],currGrid[52],currGrid[53]};
assign cols[45] = {currGrid[0],currGrid[9],currGrid[18],currGrid[27],currGrid[36],currGrid[54],currGrid[63],currGrid[72]};
assign rows[45] = {currGrid[46],currGrid[47],currGrid[48],currGrid[49],currGrid[50],currGrid[51],currGrid[52],currGrid[53]};
assign sqrs[45] = {currGrid[27],currGrid[28],currGrid[29],currGrid[36],currGrid[37],currGrid[38],currGrid[46],currGrid[47]};
assign cols[46] = {currGrid[1],currGrid[10],currGrid[19],currGrid[28],currGrid[37],currGrid[55],currGrid[64],currGrid[73]};
assign rows[46] = {currGrid[45],currGrid[47],currGrid[48],currGrid[49],currGrid[50],currGrid[51],currGrid[52],currGrid[53]};
assign sqrs[46] = {currGrid[27],currGrid[28],currGrid[29],currGrid[36],currGrid[37],currGrid[38],currGrid[45],currGrid[47]};
assign cols[47] = {currGrid[2],currGrid[11],currGrid[20],currGrid[29],currGrid[38],currGrid[56],currGrid[65],currGrid[74]};
assign rows[47] = {currGrid[45],currGrid[46],currGrid[48],currGrid[49],currGrid[50],currGrid[51],currGrid[52],currGrid[53]};
assign sqrs[47] = {currGrid[27],currGrid[28],currGrid[29],currGrid[36],currGrid[37],currGrid[38],currGrid[45],currGrid[46]};
assign cols[48] = {currGrid[3],currGrid[12],currGrid[21],currGrid[30],currGrid[39],currGrid[57],currGrid[66],currGrid[75]};
assign rows[48] = {currGrid[45],currGrid[46],currGrid[47],currGrid[49],currGrid[50],currGrid[51],currGrid[52],currGrid[53]};
assign sqrs[48] = {currGrid[30],currGrid[31],currGrid[32],currGrid[39],currGrid[40],currGrid[41],currGrid[49],currGrid[50]};
assign cols[49] = {currGrid[4],currGrid[13],currGrid[22],currGrid[31],currGrid[40],currGrid[58],currGrid[67],currGrid[76]};
assign rows[49] = {currGrid[45],currGrid[46],currGrid[47],currGrid[48],currGrid[50],currGrid[51],currGrid[52],currGrid[53]};
assign sqrs[49] = {currGrid[30],currGrid[31],currGrid[32],currGrid[39],currGrid[40],currGrid[41],currGrid[48],currGrid[50]};
assign cols[50] = {currGrid[5],currGrid[14],currGrid[23],currGrid[32],currGrid[41],currGrid[59],currGrid[68],currGrid[77]};
assign rows[50] = {currGrid[45],currGrid[46],currGrid[47],currGrid[48],currGrid[49],currGrid[51],currGrid[52],currGrid[53]};
assign sqrs[50] = {currGrid[30],currGrid[31],currGrid[32],currGrid[39],currGrid[40],currGrid[41],currGrid[48],currGrid[49]};
assign cols[51] = {currGrid[6],currGrid[15],currGrid[24],currGrid[33],currGrid[42],currGrid[60],currGrid[69],currGrid[78]};
assign rows[51] = {currGrid[45],currGrid[46],currGrid[47],currGrid[48],currGrid[49],currGrid[50],currGrid[52],currGrid[53]};
assign sqrs[51] = {currGrid[33],currGrid[34],currGrid[35],currGrid[42],currGrid[43],currGrid[44],currGrid[52],currGrid[53]};
assign cols[52] = {currGrid[7],currGrid[16],currGrid[25],currGrid[34],currGrid[43],currGrid[61],currGrid[70],currGrid[79]};
assign rows[52] = {currGrid[45],currGrid[46],currGrid[47],currGrid[48],currGrid[49],currGrid[50],currGrid[51],currGrid[53]};
assign sqrs[52] = {currGrid[33],currGrid[34],currGrid[35],currGrid[42],currGrid[43],currGrid[44],currGrid[51],currGrid[53]};
assign cols[53] = {currGrid[8],currGrid[17],currGrid[26],currGrid[35],currGrid[44],currGrid[62],currGrid[71],currGrid[80]};
assign rows[53] = {currGrid[45],currGrid[46],currGrid[47],currGrid[48],currGrid[49],currGrid[50],currGrid[51],currGrid[52]};
assign sqrs[53] = {currGrid[33],currGrid[34],currGrid[35],currGrid[42],currGrid[43],currGrid[44],currGrid[51],currGrid[52]};
assign cols[54] = {currGrid[0],currGrid[9],currGrid[18],currGrid[27],currGrid[36],currGrid[45],currGrid[63],currGrid[72]};
assign rows[54] = {currGrid[55],currGrid[56],currGrid[57],currGrid[58],currGrid[59],currGrid[60],currGrid[61],currGrid[62]};
assign sqrs[54] = {currGrid[55],currGrid[56],currGrid[63],currGrid[64],currGrid[65],currGrid[72],currGrid[73],currGrid[74]};
assign cols[55] = {currGrid[1],currGrid[10],currGrid[19],currGrid[28],currGrid[37],currGrid[46],currGrid[64],currGrid[73]};
assign rows[55] = {currGrid[54],currGrid[56],currGrid[57],currGrid[58],currGrid[59],currGrid[60],currGrid[61],currGrid[62]};
assign sqrs[55] = {currGrid[54],currGrid[56],currGrid[63],currGrid[64],currGrid[65],currGrid[72],currGrid[73],currGrid[74]};
assign cols[56] = {currGrid[2],currGrid[11],currGrid[20],currGrid[29],currGrid[38],currGrid[47],currGrid[65],currGrid[74]};
assign rows[56] = {currGrid[54],currGrid[55],currGrid[57],currGrid[58],currGrid[59],currGrid[60],currGrid[61],currGrid[62]};
assign sqrs[56] = {currGrid[54],currGrid[55],currGrid[63],currGrid[64],currGrid[65],currGrid[72],currGrid[73],currGrid[74]};
assign cols[57] = {currGrid[3],currGrid[12],currGrid[21],currGrid[30],currGrid[39],currGrid[48],currGrid[66],currGrid[75]};
assign rows[57] = {currGrid[54],currGrid[55],currGrid[56],currGrid[58],currGrid[59],currGrid[60],currGrid[61],currGrid[62]};
assign sqrs[57] = {currGrid[58],currGrid[59],currGrid[66],currGrid[67],currGrid[68],currGrid[75],currGrid[76],currGrid[77]};
assign cols[58] = {currGrid[4],currGrid[13],currGrid[22],currGrid[31],currGrid[40],currGrid[49],currGrid[67],currGrid[76]};
assign rows[58] = {currGrid[54],currGrid[55],currGrid[56],currGrid[57],currGrid[59],currGrid[60],currGrid[61],currGrid[62]};
assign sqrs[58] = {currGrid[57],currGrid[59],currGrid[66],currGrid[67],currGrid[68],currGrid[75],currGrid[76],currGrid[77]};
assign cols[59] = {currGrid[5],currGrid[14],currGrid[23],currGrid[32],currGrid[41],currGrid[50],currGrid[68],currGrid[77]};
assign rows[59] = {currGrid[54],currGrid[55],currGrid[56],currGrid[57],currGrid[58],currGrid[60],currGrid[61],currGrid[62]};
assign sqrs[59] = {currGrid[57],currGrid[58],currGrid[66],currGrid[67],currGrid[68],currGrid[75],currGrid[76],currGrid[77]};
assign cols[60] = {currGrid[6],currGrid[15],currGrid[24],currGrid[33],currGrid[42],currGrid[51],currGrid[69],currGrid[78]};
assign rows[60] = {currGrid[54],currGrid[55],currGrid[56],currGrid[57],currGrid[58],currGrid[59],currGrid[61],currGrid[62]};
assign sqrs[60] = {currGrid[61],currGrid[62],currGrid[69],currGrid[70],currGrid[71],currGrid[78],currGrid[79],currGrid[80]};
assign cols[61] = {currGrid[7],currGrid[16],currGrid[25],currGrid[34],currGrid[43],currGrid[52],currGrid[70],currGrid[79]};
assign rows[61] = {currGrid[54],currGrid[55],currGrid[56],currGrid[57],currGrid[58],currGrid[59],currGrid[60],currGrid[62]};
assign sqrs[61] = {currGrid[60],currGrid[62],currGrid[69],currGrid[70],currGrid[71],currGrid[78],currGrid[79],currGrid[80]};
assign cols[62] = {currGrid[8],currGrid[17],currGrid[26],currGrid[35],currGrid[44],currGrid[53],currGrid[71],currGrid[80]};
assign rows[62] = {currGrid[54],currGrid[55],currGrid[56],currGrid[57],currGrid[58],currGrid[59],currGrid[60],currGrid[61]};
assign sqrs[62] = {currGrid[60],currGrid[61],currGrid[69],currGrid[70],currGrid[71],currGrid[78],currGrid[79],currGrid[80]};
assign cols[63] = {currGrid[0],currGrid[9],currGrid[18],currGrid[27],currGrid[36],currGrid[45],currGrid[54],currGrid[72]};
assign rows[63] = {currGrid[64],currGrid[65],currGrid[66],currGrid[67],currGrid[68],currGrid[69],currGrid[70],currGrid[71]};
assign sqrs[63] = {currGrid[54],currGrid[55],currGrid[56],currGrid[64],currGrid[65],currGrid[72],currGrid[73],currGrid[74]};
assign cols[64] = {currGrid[1],currGrid[10],currGrid[19],currGrid[28],currGrid[37],currGrid[46],currGrid[55],currGrid[73]};
assign rows[64] = {currGrid[63],currGrid[65],currGrid[66],currGrid[67],currGrid[68],currGrid[69],currGrid[70],currGrid[71]};
assign sqrs[64] = {currGrid[54],currGrid[55],currGrid[56],currGrid[63],currGrid[65],currGrid[72],currGrid[73],currGrid[74]};
assign cols[65] = {currGrid[2],currGrid[11],currGrid[20],currGrid[29],currGrid[38],currGrid[47],currGrid[56],currGrid[74]};
assign rows[65] = {currGrid[63],currGrid[64],currGrid[66],currGrid[67],currGrid[68],currGrid[69],currGrid[70],currGrid[71]};
assign sqrs[65] = {currGrid[54],currGrid[55],currGrid[56],currGrid[63],currGrid[64],currGrid[72],currGrid[73],currGrid[74]};
assign cols[66] = {currGrid[3],currGrid[12],currGrid[21],currGrid[30],currGrid[39],currGrid[48],currGrid[57],currGrid[75]};
assign rows[66] = {currGrid[63],currGrid[64],currGrid[65],currGrid[67],currGrid[68],currGrid[69],currGrid[70],currGrid[71]};
assign sqrs[66] = {currGrid[57],currGrid[58],currGrid[59],currGrid[67],currGrid[68],currGrid[75],currGrid[76],currGrid[77]};
assign cols[67] = {currGrid[4],currGrid[13],currGrid[22],currGrid[31],currGrid[40],currGrid[49],currGrid[58],currGrid[76]};
assign rows[67] = {currGrid[63],currGrid[64],currGrid[65],currGrid[66],currGrid[68],currGrid[69],currGrid[70],currGrid[71]};
assign sqrs[67] = {currGrid[57],currGrid[58],currGrid[59],currGrid[66],currGrid[68],currGrid[75],currGrid[76],currGrid[77]};
assign cols[68] = {currGrid[5],currGrid[14],currGrid[23],currGrid[32],currGrid[41],currGrid[50],currGrid[59],currGrid[77]};
assign rows[68] = {currGrid[63],currGrid[64],currGrid[65],currGrid[66],currGrid[67],currGrid[69],currGrid[70],currGrid[71]};
assign sqrs[68] = {currGrid[57],currGrid[58],currGrid[59],currGrid[66],currGrid[67],currGrid[75],currGrid[76],currGrid[77]};
assign cols[69] = {currGrid[6],currGrid[15],currGrid[24],currGrid[33],currGrid[42],currGrid[51],currGrid[60],currGrid[78]};
assign rows[69] = {currGrid[63],currGrid[64],currGrid[65],currGrid[66],currGrid[67],currGrid[68],currGrid[70],currGrid[71]};
assign sqrs[69] = {currGrid[60],currGrid[61],currGrid[62],currGrid[70],currGrid[71],currGrid[78],currGrid[79],currGrid[80]};
assign cols[70] = {currGrid[7],currGrid[16],currGrid[25],currGrid[34],currGrid[43],currGrid[52],currGrid[61],currGrid[79]};
assign rows[70] = {currGrid[63],currGrid[64],currGrid[65],currGrid[66],currGrid[67],currGrid[68],currGrid[69],currGrid[71]};
assign sqrs[70] = {currGrid[60],currGrid[61],currGrid[62],currGrid[69],currGrid[71],currGrid[78],currGrid[79],currGrid[80]};
assign cols[71] = {currGrid[8],currGrid[17],currGrid[26],currGrid[35],currGrid[44],currGrid[53],currGrid[62],currGrid[80]};
assign rows[71] = {currGrid[63],currGrid[64],currGrid[65],currGrid[66],currGrid[67],currGrid[68],currGrid[69],currGrid[70]};
assign sqrs[71] = {currGrid[60],currGrid[61],currGrid[62],currGrid[69],currGrid[70],currGrid[78],currGrid[79],currGrid[80]};
assign cols[72] = {currGrid[0],currGrid[9],currGrid[18],currGrid[27],currGrid[36],currGrid[45],currGrid[54],currGrid[63]};
assign rows[72] = {currGrid[73],currGrid[74],currGrid[75],currGrid[76],currGrid[77],currGrid[78],currGrid[79],currGrid[80]};
assign sqrs[72] = {currGrid[54],currGrid[55],currGrid[56],currGrid[63],currGrid[64],currGrid[65],currGrid[73],currGrid[74]};
assign cols[73] = {currGrid[1],currGrid[10],currGrid[19],currGrid[28],currGrid[37],currGrid[46],currGrid[55],currGrid[64]};
assign rows[73] = {currGrid[72],currGrid[74],currGrid[75],currGrid[76],currGrid[77],currGrid[78],currGrid[79],currGrid[80]};
assign sqrs[73] = {currGrid[54],currGrid[55],currGrid[56],currGrid[63],currGrid[64],currGrid[65],currGrid[72],currGrid[74]};
assign cols[74] = {currGrid[2],currGrid[11],currGrid[20],currGrid[29],currGrid[38],currGrid[47],currGrid[56],currGrid[65]};
assign rows[74] = {currGrid[72],currGrid[73],currGrid[75],currGrid[76],currGrid[77],currGrid[78],currGrid[79],currGrid[80]};
assign sqrs[74] = {currGrid[54],currGrid[55],currGrid[56],currGrid[63],currGrid[64],currGrid[65],currGrid[72],currGrid[73]};
assign cols[75] = {currGrid[3],currGrid[12],currGrid[21],currGrid[30],currGrid[39],currGrid[48],currGrid[57],currGrid[66]};
assign rows[75] = {currGrid[72],currGrid[73],currGrid[74],currGrid[76],currGrid[77],currGrid[78],currGrid[79],currGrid[80]};
assign sqrs[75] = {currGrid[57],currGrid[58],currGrid[59],currGrid[66],currGrid[67],currGrid[68],currGrid[76],currGrid[77]};
assign cols[76] = {currGrid[4],currGrid[13],currGrid[22],currGrid[31],currGrid[40],currGrid[49],currGrid[58],currGrid[67]};
assign rows[76] = {currGrid[72],currGrid[73],currGrid[74],currGrid[75],currGrid[77],currGrid[78],currGrid[79],currGrid[80]};
assign sqrs[76] = {currGrid[57],currGrid[58],currGrid[59],currGrid[66],currGrid[67],currGrid[68],currGrid[75],currGrid[77]};
assign cols[77] = {currGrid[5],currGrid[14],currGrid[23],currGrid[32],currGrid[41],currGrid[50],currGrid[59],currGrid[68]};
assign rows[77] = {currGrid[72],currGrid[73],currGrid[74],currGrid[75],currGrid[76],currGrid[78],currGrid[79],currGrid[80]};
assign sqrs[77] = {currGrid[57],currGrid[58],currGrid[59],currGrid[66],currGrid[67],currGrid[68],currGrid[75],currGrid[76]};
assign cols[78] = {currGrid[6],currGrid[15],currGrid[24],currGrid[33],currGrid[42],currGrid[51],currGrid[60],currGrid[69]};
assign rows[78] = {currGrid[72],currGrid[73],currGrid[74],currGrid[75],currGrid[76],currGrid[77],currGrid[79],currGrid[80]};
assign sqrs[78] = {currGrid[60],currGrid[61],currGrid[62],currGrid[69],currGrid[70],currGrid[71],currGrid[79],currGrid[80]};
assign cols[79] = {currGrid[7],currGrid[16],currGrid[25],currGrid[34],currGrid[43],currGrid[52],currGrid[61],currGrid[70]};
assign rows[79] = {currGrid[72],currGrid[73],currGrid[74],currGrid[75],currGrid[76],currGrid[77],currGrid[78],currGrid[80]};
assign sqrs[79] = {currGrid[60],currGrid[61],currGrid[62],currGrid[69],currGrid[70],currGrid[71],currGrid[78],currGrid[80]};
assign cols[80] = {currGrid[8],currGrid[17],currGrid[26],currGrid[35],currGrid[44],currGrid[53],currGrid[62],currGrid[71]};
assign rows[80] = {currGrid[72],currGrid[73],currGrid[74],currGrid[75],currGrid[76],currGrid[77],currGrid[78],currGrid[79]};
assign sqrs[80] = {currGrid[60],currGrid[61],currGrid[62],currGrid[69],currGrid[70],currGrid[71],currGrid[78],currGrid[79]};
 
 
assign outGrid = {currGrid[0],currGrid[1],currGrid[2],currGrid[3],currGrid[4],currGrid[5],currGrid[6],currGrid[7],currGrid[8],currGrid[9],currGrid[10],currGrid[11],currGrid[12],currGrid[13],currGrid[14],currGrid[15],currGrid[16],currGrid[17],currGrid[18],currGrid[19],currGrid[20],currGrid[21],currGrid[22],currGrid[23],currGrid[24],currGrid[25],currGrid[26],currGrid[27],currGrid[28],currGrid[29],currGrid[30],currGrid[31],currGrid[32],currGrid[33],currGrid[34],currGrid[35],currGrid[36],currGrid[37],currGrid[38],currGrid[39],currGrid[40],currGrid[41],currGrid[42],currGrid[43],currGrid[44],currGrid[45],currGrid[46],currGrid[47],currGrid[48],currGrid[49],currGrid[50],currGrid[51],currGrid[52],currGrid[53],currGrid[54],currGrid[55],currGrid[56],currGrid[57],currGrid[58],currGrid[59],currGrid[60],currGrid[61],currGrid[62],currGrid[63],currGrid[64],currGrid[65],currGrid[66],currGrid[67],currGrid[68],currGrid[69],currGrid[70],currGrid[71],currGrid[72],currGrid[73],currGrid[74],currGrid[75],currGrid[76],currGrid[77],currGrid[78],currGrid[79],currGrid[80]};
genvar ii,jj;
wire [80:0] c_rows [8:0];
wire [80:0] c_cols [8:0];
wire [80:0] c_grds [8:0];
wire [26:0] w_correct;
generate
for(ii=0;ii<9;ii=ii+1)
begin: row_check
assign c_rows[0][(9*(ii+1)-1):9*ii] = currGrid[ii];
assign c_rows[1][(9*(ii+1)-1):9*ii] = currGrid[9+ii];
assign c_rows[2][(9*(ii+1)-1):9*ii] = currGrid[18+ii];
assign c_rows[3][(9*(ii+1)-1):9*ii] = currGrid[27+ii];
assign c_rows[4][(9*(ii+1)-1):9*ii] = currGrid[36+ii];
assign c_rows[5][(9*(ii+1)-1):9*ii] = currGrid[45+ii];
assign c_rows[6][(9*(ii+1)-1):9*ii] = currGrid[54+ii];
assign c_rows[7][(9*(ii+1)-1):9*ii] = currGrid[63+ii];
assign c_rows[8][(9*(ii+1)-1):9*ii] = currGrid[72+ii];
end
endgenerate
generate
for(ii=0;ii<9;ii=ii+1)
begin: col_check
assign c_cols[0][(9*(ii+1)-1):9*ii] = currGrid[9*ii + 0];
assign c_cols[1][(9*(ii+1)-1):9*ii] = currGrid[9*ii + 1];
assign c_cols[2][(9*(ii+1)-1):9*ii] = currGrid[9*ii + 2];
assign c_cols[3][(9*(ii+1)-1):9*ii] = currGrid[9*ii + 3];
assign c_cols[4][(9*(ii+1)-1):9*ii] = currGrid[9*ii + 4];
assign c_cols[5][(9*(ii+1)-1):9*ii] = currGrid[9*ii + 5];
assign c_cols[6][(9*(ii+1)-1):9*ii] = currGrid[9*ii + 6];
assign c_cols[7][(9*(ii+1)-1):9*ii] = currGrid[9*ii + 7];
assign c_cols[8][(9*(ii+1)-1):9*ii] = currGrid[9*ii + 8];
end
endgenerate
 
genvar iii,jjj;
generate
for(ii=0; ii < 3; ii=ii+1)
begin: grd_check_y
for(jj = 0; jj < 3; jj=jj+1)
begin: grd_check_x
for(iii=3*ii; iii < 3*(ii+1); iii=iii+1)
begin: gg_y
for(jjj=3*jj; jjj < 3*(jj+1); jjj=jjj+1)
begin: gg_x
//(3*(iii-3*ii) + (jjj-3*jj))
assign c_grds[3*ii+jj][9*(3*(iii-3*ii) + (jjj-3*jj)+1)-1:9*(3*(iii-3*ii) + (jjj-3*jj))] = currGrid[9*iii + jjj];
end
end
end
end
endgenerate
generate
for(ii=0;ii<9;ii=ii+1)
begin: checks
checkCorrect cC_R (.y(w_correct[ii]), .in(c_rows[ii]));
checkCorrect cC_C (.y(w_correct[9+ii]), .in(c_cols[ii]));
checkCorrect cC_G (.y(w_correct[18+ii]), .in(c_grds[ii]));
end
endgenerate
assign anyError = ~(&w_correct);
endmodule
/sudoku/trunk/verif/puzzles/puzzle_40.hex
0,0 → 1,82
2
1ff
1ff
1ff
1ff
1ff
1
1ff
1ff
1ff
4
1ff
1ff
1ff
1ff
1ff
10
1ff
1ff
1ff
1
1ff
1ff
80
1ff
1ff
2
8
1ff
1ff
1
1ff
1ff
100
1ff
1ff
1ff
20
1ff
1ff
10
1ff
1ff
80
1ff
1ff
1ff
10
1ff
1ff
2
1ff
1ff
40
20
1ff
1ff
100
1ff
1ff
80
1ff
1ff
1ff
100
1ff
1ff
40
1ff
1ff
4
1ff
1ff
1ff
80
1ff
1ff
1
1ff
1ff
1ff
 
/sudoku/trunk/verif/puzzles/puzzle_41.hex
0,0 → 1,82
1ff
1ff
1ff
4
1ff
1ff
40
1ff
1ff
1ff
4
1ff
1ff
2
1ff
1ff
1ff
1ff
1ff
1ff
100
1ff
1ff
1
1ff
1ff
20
1ff
1ff
1ff
1
1ff
1ff
4
1ff
1ff
1ff
80
1ff
1ff
8
1ff
1ff
1
1ff
1ff
1ff
2
1ff
1ff
10
1ff
1ff
100
100
1ff
1ff
40
1ff
1ff
8
1ff
1ff
1ff
10
1ff
1ff
80
1ff
1ff
2
1ff
1ff
1ff
1ff
1ff
1ff
4
1ff
1ff
40
 
/sudoku/trunk/verif/puzzles/puzzle_42.hex
0,0 → 1,82
1
1ff
1ff
10
1ff
1ff
8
1ff
1ff
1ff
20
1ff
1ff
1
1ff
1ff
2
1ff
1ff
1ff
80
1ff
1ff
40
1ff
1ff
1ff
4
1ff
1ff
20
1ff
1ff
40
1ff
1ff
1ff
1
1ff
1ff
40
1ff
1ff
100
1ff
1ff
1ff
100
1ff
1ff
2
1ff
1ff
1ff
20
1ff
1ff
8
1ff
1ff
100
1ff
1ff
1ff
10
1ff
1ff
80
1ff
1ff
4
1ff
1ff
1ff
4
1ff
1ff
10
1ff
1ff
20
 
/sudoku/trunk/verif/puzzles/puzzle_43.hex
0,0 → 1,82
40
1ff
1ff
10
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1
1ff
1ff
4
1ff
1ff
1ff
1
1ff
1ff
100
1ff
1ff
10
100
1ff
1ff
80
1ff
1ff
1ff
1ff
1ff
1ff
10
1ff
1ff
100
1ff
1ff
40
1ff
1ff
1ff
40
1ff
1ff
8
1ff
1ff
2
2
1ff
1ff
100
1ff
1ff
8
1ff
1ff
1ff
1
1ff
1ff
10
1ff
1ff
20
1ff
1ff
1ff
80
1ff
1ff
2
1ff
1ff
4
 
/sudoku/trunk/verif/puzzles/puzzle_44.hex
0,0 → 1,82
8
1ff
1ff
1
1ff
1ff
2
1ff
1ff
1ff
80
1ff
1ff
8
1ff
1ff
20
1ff
1ff
1ff
10
1ff
1ff
100
1ff
1ff
80
1
1ff
1ff
1ff
1ff
1ff
40
1ff
1ff
1ff
8
1ff
1ff
2
1ff
1ff
80
1ff
1ff
1ff
4
1ff
1ff
40
1ff
1ff
10
2
1ff
1ff
8
1ff
1ff
1ff
1ff
1ff
1ff
100
1ff
1ff
80
1ff
1ff
1ff
1ff
1ff
1ff
80
1ff
1ff
4
1ff
1ff
1ff
 
/sudoku/trunk/verif/puzzles/puzzle_45.hex
0,0 → 1,82
80
1ff
1ff
100
1ff
1ff
40
1ff
1ff
1ff
100
1ff
1ff
8
1ff
1ff
2
1ff
1ff
1ff
2
1ff
1ff
20
1ff
1ff
100
1
1ff
1ff
1ff
1ff
1ff
10
1ff
1ff
1ff
2
1ff
1ff
20
1ff
1ff
1
1ff
1ff
1ff
40
1ff
1ff
4
1ff
1ff
2
4
1ff
1ff
10
1ff
1ff
8
1ff
1ff
1ff
8
1ff
1ff
40
1ff
1ff
100
1ff
1ff
1ff
1ff
1ff
1ff
80
1ff
1ff
1
 
/sudoku/trunk/verif/puzzles/puzzle_46.hex
0,0 → 1,82
2
1ff
1ff
1ff
1ff
1ff
80
1ff
1ff
1ff
100
1ff
1ff
80
1ff
1ff
1
1ff
1ff
1ff
1
1ff
1ff
2
1ff
1ff
40
10
1ff
1ff
2
1ff
1ff
20
1ff
1ff
1ff
40
1ff
1ff
8
1ff
1ff
4
1ff
1ff
1ff
8
1ff
1ff
1
1ff
1ff
2
4
1ff
1ff
20
1ff
1ff
40
1ff
1ff
1ff
1ff
1ff
1ff
4
1ff
1ff
80
1ff
1ff
1ff
100
1ff
1ff
80
1ff
1ff
10
 
/sudoku/trunk/verif/puzzles/puzzle_47.hex
0,0 → 1,82
2
1ff
1ff
8
1ff
1ff
10
1ff
1ff
1ff
8
1ff
1ff
20
1ff
1ff
2
1ff
1ff
1ff
1
1ff
1ff
2
1ff
1ff
1ff
100
1ff
1ff
10
1ff
1ff
40
1ff
1ff
1ff
80
1ff
1ff
1
1ff
1ff
20
1ff
1ff
1ff
10
1ff
1ff
100
1ff
1ff
2
40
1ff
1ff
1
1ff
1ff
1ff
1ff
1ff
1ff
4
1ff
1ff
100
1ff
1ff
10
1ff
1ff
1ff
80
1ff
1ff
20
1ff
1ff
8
 
/sudoku/trunk/verif/puzzles/puzzle_48.hex
0,0 → 1,82
2
1ff
1ff
1
1ff
1ff
4
1ff
1ff
1ff
1ff
1ff
1ff
10
1ff
1ff
1ff
1ff
1ff
1ff
20
1ff
1ff
2
1ff
1ff
10
4
1ff
1ff
2
1ff
1ff
8
1ff
1ff
1ff
100
1ff
1ff
40
1ff
1ff
10
1ff
1ff
1ff
40
1ff
1ff
80
1ff
1ff
4
80
1ff
1ff
100
1ff
1ff
40
1ff
1ff
1ff
4
1ff
1ff
1
1ff
1ff
20
1ff
1ff
1ff
1
1ff
1ff
8
1ff
1ff
80
 
/sudoku/trunk/verif/puzzles/puzzle_49.hex
0,0 → 1,82
1
1ff
1ff
100
1ff
1ff
4
1ff
1ff
1ff
20
1ff
1ff
1
1ff
1ff
1ff
1ff
1ff
1ff
8
1ff
1ff
20
1ff
1ff
10
8
1ff
1ff
40
1ff
1ff
2
1ff
1ff
1ff
1
1ff
1ff
2
1ff
1ff
4
1ff
1ff
1ff
2
1ff
1ff
100
1ff
1ff
80
2
1ff
1ff
8
1ff
1ff
100
1ff
1ff
1ff
10
1ff
1ff
1ff
1ff
1ff
80
1ff
1ff
1ff
100
1ff
1ff
80
1ff
1ff
1
 
/sudoku/trunk/verif/puzzles/puzzle_3a.hex
0,0 → 1,82
20
1ff
1ff
100
1ff
1ff
8
1ff
1ff
1ff
8
1ff
1ff
10
1ff
1ff
4
1ff
1ff
1ff
80
1ff
1ff
20
1ff
1ff
10
10
1ff
1ff
40
1ff
1ff
4
1ff
1ff
1ff
40
1ff
1ff
2
1ff
1ff
1ff
1ff
1ff
1ff
2
1ff
1ff
10
1ff
1ff
8
1
1ff
1ff
20
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
4
1ff
1ff
80
1ff
1ff
1ff
20
1ff
1ff
2
1ff
1ff
1
 
/sudoku/trunk/verif/puzzles/puzzle_3b.hex
0,0 → 1,82
40
1ff
1ff
1ff
1ff
1ff
8
1ff
1ff
1ff
2
1ff
1ff
40
1ff
1ff
80
1ff
1ff
1ff
4
1ff
1ff
80
1ff
1ff
100
1ff
1ff
1ff
10
1ff
1ff
4
1ff
1ff
1ff
20
1ff
1ff
2
1ff
1ff
100
1ff
1ff
1ff
1
1ff
1ff
40
1ff
1ff
20
1ff
1ff
1ff
4
1ff
1ff
100
1ff
1ff
1ff
4
1ff
1ff
8
1ff
1ff
20
1ff
1ff
1ff
100
1ff
1ff
1
1ff
1ff
10
 
/sudoku/trunk/verif/puzzles/puzzle_3c.hex
0,0 → 1,82
40
1ff
1ff
100
1ff
1ff
1ff
1ff
20
1ff
1ff
1ff
1ff
20
1ff
1ff
80
4
1ff
1ff
1ff
1ff
1ff
4
2
1ff
1ff
80
1ff
1ff
1ff
1ff
100
1ff
1ff
1ff
1ff
10
1ff
1ff
1ff
1ff
1ff
4
1ff
1ff
1ff
2
8
1ff
1ff
1ff
1ff
1
1ff
1ff
80
1ff
1ff
1ff
20
1ff
1ff
1ff
20
1ff
1ff
1
1ff
1ff
1ff
40
8
1
1ff
1ff
1ff
10
1ff
100
1ff
 
/sudoku/trunk/verif/puzzles/puzzle_3d.hex
0,0 → 1,82
100
1ff
1ff
40
1ff
1ff
1
1ff
1ff
1ff
2
1ff
1ff
1
1ff
1ff
1ff
40
1ff
1ff
1ff
10
1ff
1ff
20
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
10
20
1ff
1ff
1ff
1ff
1ff
1ff
4
2
1ff
1ff
1
1ff
1ff
1ff
10
1ff
1ff
1ff
80
2
8
1ff
1ff
80
1
4
1ff
1ff
1ff
1
10
8
2
1ff
1ff
1ff
20
1ff
1ff
100
1ff
1ff
1ff
1ff
1ff
2
 
/sudoku/trunk/verif/puzzles/puzzle_3e.hex
0,0 → 1,82
100
1ff
8
1ff
1ff
10
1ff
1ff
1ff
2
10
1ff
20
1ff
1ff
1
1ff
1ff
4
1
1ff
1ff
1ff
1ff
1ff
1ff
80
1ff
40
1ff
1ff
1ff
100
1ff
1ff
1ff
8
1ff
1ff
2
20
1ff
1ff
1ff
1ff
1ff
1ff
1
8
40
1ff
1ff
1ff
1ff
40
1ff
1ff
1ff
1ff
1ff
1ff
1ff
2
1ff
1ff
1ff
4
1ff
1ff
80
1ff
20
1ff
8
1ff
1ff
1ff
1ff
1ff
100
1ff
 
/sudoku/trunk/verif/puzzles/puzzle_3f.hex
0,0 → 1,82
1ff
1ff
1ff
80
1ff
1ff
8
1ff
1ff
1ff
40
1ff
1ff
2
1ff
1ff
80
1ff
1ff
1ff
20
1ff
1ff
100
1ff
1ff
4
1ff
1ff
1ff
40
1ff
1ff
1ff
1ff
1ff
1ff
4
1ff
1ff
100
1ff
1ff
8
1ff
1ff
1ff
100
1ff
1ff
20
1ff
1ff
10
80
1ff
1ff
4
1ff
1ff
40
1ff
1ff
1ff
8
1ff
1ff
20
1ff
1ff
2
1ff
1ff
1ff
4
1ff
1ff
40
1ff
1ff
20
 
/sudoku/trunk/verif/puzzles/puzzle_10.hex
0,0 → 1,82
1
1ff
1ff
1ff
1ff
1ff
1ff
1ff
20
1ff
2
1ff
10
1ff
1ff
1ff
8
1ff
1ff
1ff
4
1ff
1ff
1ff
40
1ff
1ff
1ff
8
1ff
80
1ff
2
1ff
1ff
1ff
1ff
1ff
1ff
1ff
20
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
8
10
1ff
80
1ff
40
1ff
1ff
1ff
1ff
1ff
4
1ff
1ff
1ff
10
1ff
1ff
1ff
100
1ff
2
1ff
1ff
1ff
20
1ff
1ff
1ff
1ff
1ff
1
 
/sudoku/trunk/verif/puzzles/puzzle_11.hex
0,0 → 1,82
1
1ff
1ff
1ff
100
1ff
1ff
1ff
20
1ff
2
1ff
10
1ff
1ff
1ff
8
1ff
1ff
1ff
4
1ff
1ff
1ff
40
1ff
1ff
1ff
8
1ff
4
1ff
1ff
1ff
1ff
1ff
100
1ff
1ff
1ff
1
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
8
1ff
80
1ff
1ff
1ff
40
1ff
1ff
1ff
4
1ff
1ff
1ff
10
1ff
1ff
1ff
80
1ff
2
1ff
20
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1
 
/sudoku/trunk/verif/puzzles/puzzle_12.hex
0,0 → 1,82
1
1ff
1ff
1ff
100
1ff
1ff
1ff
20
1ff
2
1ff
10
1ff
1ff
1ff
8
1ff
1ff
1ff
4
1ff
1ff
1ff
40
1ff
1ff
1ff
8
1ff
40
1ff
1ff
1ff
1ff
1ff
100
1ff
1ff
1ff
20
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
8
1ff
80
1ff
1ff
1ff
40
1ff
1ff
1ff
4
1ff
1ff
1ff
10
1ff
1ff
1ff
80
1ff
2
1ff
20
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1
 
/sudoku/trunk/verif/puzzles/puzzle_13.hex
0,0 → 1,82
1
1ff
1ff
1ff
100
1ff
1ff
1ff
20
1ff
2
1ff
10
1ff
1ff
1ff
8
1ff
1ff
1ff
4
1ff
1ff
1ff
40
1ff
1ff
1ff
8
1ff
2
1ff
1ff
1ff
1ff
1ff
100
1ff
1ff
1ff
4
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
8
1ff
80
1ff
1ff
1ff
40
1ff
1ff
1ff
4
1ff
1ff
1ff
10
1ff
1ff
1ff
80
1ff
2
1ff
20
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1
 
/sudoku/trunk/verif/puzzles/puzzle_50.hex
0,0 → 1,82
40
1ff
1ff
10
1ff
1ff
1ff
1ff
1ff
1ff
4
1ff
1ff
100
1ff
1ff
2
1ff
1ff
1ff
1
1ff
1ff
8
1ff
1ff
40
2
1ff
1ff
1
1ff
1ff
10
1ff
1ff
1ff
10
1ff
1ff
20
1ff
1ff
100
1ff
1ff
1ff
40
1ff
1ff
1ff
1ff
1ff
4
100
1ff
1ff
2
1ff
1ff
1
1ff
1ff
1ff
1
1ff
1ff
1ff
1ff
1ff
10
1ff
1ff
1ff
8
1ff
1ff
1ff
1ff
1ff
80
 
/sudoku/trunk/verif/puzzles/puzzle_14.hex
0,0 → 1,82
1
1ff
1ff
1ff
1ff
1ff
1ff
1ff
20
1ff
2
1ff
10
1ff
1ff
1ff
8
1ff
1ff
1ff
4
1ff
1ff
1ff
40
1ff
1ff
1ff
8
1ff
80
1ff
2
1ff
1ff
1ff
1ff
1ff
1ff
1ff
20
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
8
10
1ff
80
1ff
40
1ff
1ff
1ff
1ff
1ff
4
1ff
1ff
1ff
10
1ff
1ff
1ff
100
1ff
2
1ff
1ff
1ff
20
1ff
1ff
1ff
1ff
1ff
1
 
/sudoku/trunk/verif/puzzles/puzzle_51.hex
0,0 → 1,82
80
1ff
1ff
40
1ff
1ff
10
1ff
1ff
1ff
8
1ff
1ff
80
1ff
1ff
1ff
1ff
1ff
1ff
4
1ff
1ff
8
1ff
1ff
40
2
1ff
1ff
4
1ff
1ff
40
1ff
1ff
1ff
1ff
1ff
1ff
100
1ff
1ff
80
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1
4
1ff
1ff
10
1ff
1ff
8
1ff
1ff
1ff
2
1ff
1ff
20
1ff
1ff
100
1ff
1ff
1ff
10
1ff
1ff
1
1ff
1ff
80
 
/sudoku/trunk/verif/puzzles/puzzle_15.hex
0,0 → 1,82
1
1ff
1ff
1ff
10
1ff
1ff
1ff
1ff
1ff
1ff
20
1ff
1ff
100
1ff
1ff
1ff
1ff
80
1ff
2
1ff
1ff
1ff
1ff
8
1ff
8
1ff
1ff
4
1ff
1ff
1ff
80
1ff
1ff
40
1ff
1ff
1ff
1ff
20
1ff
100
1ff
1ff
1ff
1ff
1ff
1
1ff
1ff
1ff
4
1ff
80
1ff
1ff
1ff
1ff
2
1ff
1ff
1ff
1ff
1ff
8
1ff
10
1ff
1ff
1ff
1ff
1ff
1
1ff
40
1ff
1ff
 
/sudoku/trunk/verif/puzzles/puzzle_52.hex
0,0 → 1,82
80
1ff
1ff
20
1ff
1ff
8
1ff
1ff
1ff
4
1ff
1ff
2
1ff
1ff
1ff
1ff
1ff
1ff
2
1ff
1ff
40
1ff
1ff
1
20
1ff
1ff
100
1ff
1ff
1ff
1ff
1ff
1ff
8
1ff
1ff
10
1ff
1ff
40
1ff
1ff
1ff
100
1ff
1ff
1ff
1ff
1ff
4
1
1ff
1ff
2
1ff
1ff
80
1ff
1ff
1ff
80
1ff
1ff
1ff
1ff
1ff
20
1ff
1ff
1ff
40
1ff
1ff
10
1ff
1ff
8
 
/sudoku/trunk/verif/puzzles/puzzle_16.hex
0,0 → 1,82
1ff
1ff
4
100
1ff
1ff
1ff
1ff
1ff
1ff
8
1ff
1ff
40
1ff
1ff
1ff
1
20
1ff
1ff
1ff
1ff
2
1ff
1ff
1ff
80
1ff
1ff
1ff
1ff
1ff
1ff
1ff
2
1ff
40
1ff
1ff
10
1ff
1ff
4
1ff
1ff
1ff
100
1ff
1ff
1ff
8
1ff
1ff
2
1ff
1ff
1ff
1ff
1
1ff
1ff
80
1ff
1ff
1ff
1ff
8
1ff
1ff
10
1ff
1ff
1ff
1ff
20
1ff
1ff
100
1ff
1ff
 
/sudoku/trunk/verif/puzzles/puzzle_53.hex
0,0 → 1,82
100
1ff
1ff
20
1ff
1ff
10
1ff
1ff
1ff
80
1ff
1ff
100
1ff
1ff
8
1ff
1ff
1ff
4
1ff
1ff
2
1ff
1ff
20
8
1ff
1ff
100
1ff
1ff
40
1ff
1ff
1ff
2
1ff
1ff
20
1ff
1ff
10
1ff
1ff
1ff
100
1ff
1ff
80
1ff
1ff
1ff
40
1ff
1ff
1
1ff
1ff
4
1ff
1ff
1ff
1
1ff
1ff
8
1ff
1ff
2
1ff
1ff
1ff
1ff
1ff
1ff
20
1ff
1ff
1ff
 
/sudoku/trunk/verif/puzzles/puzzle_17.hex
0,0 → 1,82
1ff
1ff
4
2
1ff
1ff
1ff
1ff
1ff
1ff
8
1ff
1ff
100
1ff
1ff
1ff
1ff
20
1ff
1ff
1ff
1ff
80
1ff
1
1ff
2
1ff
1ff
1ff
1ff
1ff
1ff
1ff
4
1ff
1
1ff
1ff
1ff
20
1ff
8
1ff
1ff
1ff
40
1ff
1ff
1ff
10
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1
1ff
1ff
2
1ff
100
1ff
1ff
8
1ff
1ff
20
1ff
1ff
1ff
1ff
10
1ff
1ff
40
1ff
1ff
 
/sudoku/trunk/verif/puzzles/puzzle_54.hex
0,0 → 1,82
10
1ff
1ff
100
1ff
1ff
1
1ff
1ff
1ff
1ff
1ff
1ff
1
1ff
1ff
8
1ff
1ff
1ff
4
1ff
1ff
80
1ff
1ff
10
80
1ff
1ff
8
1ff
1ff
1ff
1ff
1ff
1ff
20
1ff
1ff
80
1ff
1ff
40
1ff
1ff
1ff
2
1ff
1ff
10
1ff
1ff
4
20
1ff
1ff
1ff
1ff
1ff
80
1ff
1ff
1ff
100
1ff
1ff
1ff
1ff
1ff
20
1ff
1ff
1ff
8
1ff
1ff
40
1ff
1ff
2
 
/sudoku/trunk/verif/puzzles/puzzle_18.hex
0,0 → 1,82
1ff
1ff
1ff
8
1ff
1ff
1ff
2
1ff
20
1ff
1ff
1ff
100
1ff
1ff
1ff
80
1ff
1ff
40
1ff
1ff
10
1
1ff
1ff
8
1ff
1ff
1ff
1ff
1
2
1ff
1ff
1ff
10
1ff
1ff
8
1ff
1ff
4
1ff
1ff
1ff
20
40
1ff
1ff
1ff
1ff
1ff
1ff
1ff
8
100
1ff
1ff
1ff
10
1ff
1
1ff
1ff
1ff
80
1ff
8
1ff
1ff
1ff
4
1ff
1ff
1ff
1ff
1ff
1ff
2
 
/sudoku/trunk/verif/puzzles/puzzle_55.hex
0,0 → 1,82
1
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
4
1ff
1ff
8
1ff
1ff
2
1ff
1ff
1ff
10
1ff
1ff
4
1ff
1ff
1ff
40
1ff
1ff
2
1ff
1ff
80
1ff
1ff
1ff
8
1ff
1ff
100
1ff
1ff
40
1ff
1ff
1ff
4
1ff
1ff
80
1ff
1ff
20
2
1ff
1ff
1ff
1ff
1ff
10
1ff
1ff
1ff
1ff
1ff
1ff
20
1ff
1ff
4
1ff
1ff
1ff
20
1ff
1ff
1
1ff
1ff
80
 
/sudoku/trunk/verif/puzzles/puzzle_19.hex
0,0 → 1,82
1ff
1ff
1ff
1ff
1ff
1ff
40
1ff
1
1ff
1ff
8
1ff
1ff
1ff
1ff
4
1ff
1ff
80
10
1ff
1ff
1ff
1ff
20
1ff
20
1ff
1ff
100
1ff
1
1ff
1ff
1ff
1ff
1
1ff
1ff
1ff
40
1ff
1ff
10
1ff
1ff
1ff
1ff
4
1ff
2
1ff
1ff
1ff
2
1ff
1ff
1ff
80
1ff
10
1ff
80
1ff
1
1ff
2
100
1ff
1ff
1ff
1ff
20
1ff
1ff
40
1ff
1ff
1ff
1ff
 
/sudoku/trunk/verif/puzzles/puzzle_56.hex
0,0 → 1,82
20
1ff
1ff
80
1ff
1ff
2
1ff
1ff
1ff
40
1ff
1ff
20
1ff
1ff
8
1ff
1ff
1ff
2
1ff
1ff
1ff
1ff
1ff
1
40
1ff
1ff
1ff
1ff
1ff
100
1ff
1ff
1ff
100
1ff
1ff
40
1ff
1ff
20
1ff
1ff
1ff
80
1ff
1ff
10
1ff
1ff
1ff
1
1ff
1ff
2
1ff
1ff
4
1ff
1ff
1ff
1ff
1ff
1ff
8
1ff
1ff
2
1ff
1ff
1ff
4
1ff
1ff
1
1ff
1ff
10
 
/sudoku/trunk/verif/puzzles/puzzle_57.hex
0,0 → 1,82
100
1ff
1ff
1
1ff
1ff
2
1ff
1ff
1ff
20
1ff
1ff
1ff
1ff
1ff
8
1ff
1ff
1ff
1
1ff
1ff
40
1ff
1ff
100
1
1ff
1ff
4
1ff
1ff
100
1ff
1ff
1ff
10
1ff
1ff
80
1ff
1ff
1ff
1ff
1ff
1ff
40
1ff
1ff
100
1ff
1ff
80
10
1ff
1ff
2
1ff
1ff
4
1ff
1ff
1ff
40
1ff
1ff
8
1ff
1ff
1
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
20
 
/sudoku/trunk/verif/puzzles/puzzle_58.hex
0,0 → 1,82
8
1ff
1ff
100
1ff
1ff
80
1ff
1ff
1ff
4
1ff
1ff
80
1ff
1ff
40
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
10
1ff
1ff
4
1ff
1ff
1ff
1ff
1ff
1ff
2
1ff
1ff
10
1ff
1ff
1
1ff
1ff
1ff
100
1ff
1ff
8
1ff
1ff
10
40
1ff
1ff
1ff
1ff
1ff
20
1ff
1ff
1ff
80
1ff
1ff
2
1ff
1ff
4
1ff
1ff
1ff
2
1ff
1ff
1
1ff
1ff
8
 
/sudoku/trunk/verif/puzzles/puzzle_59.hex
0,0 → 1,82
4
1ff
1ff
8
1ff
1ff
20
1ff
1ff
1ff
8
1ff
1ff
2
1ff
1ff
80
1ff
1ff
1ff
10
1ff
1ff
1ff
1ff
1ff
100
100
1ff
1ff
1
1ff
1ff
2
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
10
1ff
1ff
1ff
20
1ff
1ff
4
1ff
1ff
1ff
1ff
1ff
1ff
2
1ff
1ff
8
1ff
1ff
1ff
80
1ff
1ff
40
1ff
1ff
4
1ff
1ff
1ff
1
1ff
1ff
80
1ff
1ff
10
 
/sudoku/trunk/verif/puzzles/puzzle_0.hex
0,0 → 1,82
80
10
1ff
1ff
1ff
2
8
1ff
1ff
40
2
1ff
1ff
1ff
1ff
1ff
1ff
100
1ff
1ff
8
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1
1ff
40
1ff
1ff
2
4
1ff
10
1ff
1ff
1ff
100
1ff
1ff
1ff
8
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
80
1ff
1ff
40
1ff
1ff
1
40
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
4
20
1ff
8
1ff
 
/sudoku/trunk/verif/puzzles/puzzle_1.hex
0,0 → 1,82
1ff
1ff
10
4
1ff
1ff
1ff
1ff
1ff
80
1ff
1ff
1ff
1ff
1ff
1ff
2
1ff
1ff
40
1ff
1ff
1
1ff
10
1ff
1ff
8
1ff
1ff
1ff
1ff
10
4
1ff
1ff
1ff
1
1ff
1ff
40
1ff
1ff
1ff
20
1ff
1ff
4
2
1ff
1ff
1ff
80
1ff
1ff
20
1ff
10
1ff
1ff
1ff
1ff
100
1ff
1ff
8
1ff
1ff
1ff
1ff
4
1ff
1ff
1ff
1ff
1ff
1ff
100
40
1ff
1ff
 
/sudoku/trunk/verif/puzzles/puzzle_2.hex
0,0 → 1,82
1
2
1ff
1ff
8
1ff
1ff
1ff
1ff
1ff
1ff
10
1ff
20
100
1ff
1
1ff
1ff
1ff
100
1ff
1ff
1ff
10
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
40
1ff
40
1ff
1ff
1ff
10
2
1ff
100
1ff
1ff
4
1ff
1ff
1ff
1ff
1ff
1ff
2
1ff
100
1ff
20
1ff
1ff
1ff
10
1ff
8
1ff
1ff
100
1ff
1ff
80
1ff
1
1ff
1ff
4
1ff
1ff
1ff
100
1ff
8
 
/sudoku/trunk/verif/puzzles/puzzle_3.hex
0,0 → 1,82
1ff
1ff
1ff
10
40
1ff
1ff
4
1ff
1
1ff
1ff
1ff
1ff
1ff
1ff
2
1ff
40
1ff
1ff
1ff
2
4
8
1ff
1ff
1ff
1ff
1ff
1ff
80
1ff
1ff
1ff
8
1ff
1ff
40
1ff
1ff
8
1ff
1ff
1ff
8
100
1ff
1ff
1ff
1ff
20
1ff
10
1ff
8
2
1ff
1ff
1ff
4
1ff
1ff
1ff
1ff
1ff
40
1ff
1ff
100
1ff
1ff
1ff
1ff
1
80
1ff
1ff
1ff
1ff
1ff
 
/sudoku/trunk/verif/puzzles/puzzle_4.hex
0,0 → 1,82
40
1ff
1ff
1
10
2
4
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
100
2
1ff
1ff
1ff
1ff
4
1ff
1ff
1ff
1ff
1ff
1
1ff
1ff
1ff
1ff
8
40
1ff
80
1ff
1ff
1ff
1ff
1ff
1ff
1ff
20
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
100
1ff
1ff
1ff
10
1ff
20
1ff
8
1ff
100
1ff
40
1ff
1ff
1ff
80
1ff
1ff
1ff
1ff
20
1ff
1
1ff
 
/sudoku/trunk/verif/puzzles/puzzle_5.hex
0,0 → 1,82
1
1ff
1ff
1ff
1ff
40
1ff
100
1ff
1ff
4
1ff
1ff
2
1ff
1ff
1ff
80
1ff
1ff
100
20
1ff
1ff
10
1ff
1ff
1ff
1ff
10
4
1ff
1ff
100
1ff
1ff
1ff
1
1ff
1ff
80
1ff
1ff
1ff
2
20
1ff
1ff
1ff
1ff
8
1ff
1ff
1ff
4
1ff
1ff
1ff
1ff
1ff
1ff
1
1ff
1ff
8
1ff
1ff
1ff
1ff
1ff
1ff
40
1ff
1ff
40
1ff
1ff
1ff
4
1ff
1ff
 
/sudoku/trunk/verif/puzzles/puzzle_4a.hex
0,0 → 1,82
2
1ff
1ff
1
1ff
1ff
4
1ff
1ff
1ff
1
1ff
1ff
4
1ff
1ff
8
1ff
1ff
1ff
8
1ff
1ff
40
1ff
1ff
1
40
1ff
1ff
80
1ff
1ff
100
1ff
1ff
1ff
80
1ff
1ff
100
1ff
1ff
4
1ff
1ff
1ff
1ff
1ff
1ff
4
1ff
1ff
2
100
1ff
1ff
10
1ff
1ff
20
1ff
1ff
1ff
40
1ff
1ff
20
1ff
1ff
2
1ff
1ff
1ff
1
1ff
1ff
8
1ff
1ff
80
 
/sudoku/trunk/verif/puzzles/puzzle_6.hex
0,0 → 1,82
1
1ff
1ff
1ff
4
8
1ff
80
1ff
1ff
1ff
1ff
80
1ff
1ff
10
1ff
1ff
1ff
1ff
8
1ff
20
1ff
1ff
2
1
1ff
1
80
1ff
1ff
1ff
1ff
1ff
1ff
4
1ff
1ff
1
1ff
2
1ff
1ff
20
1ff
1ff
1ff
1ff
1ff
1ff
80
1
1ff
10
2
1ff
1ff
40
1ff
100
1ff
1ff
1ff
1ff
20
1ff
1ff
100
1ff
1ff
1ff
1ff
100
1ff
20
8
1ff
1ff
1ff
2
 
/sudoku/trunk/verif/puzzles/puzzle_4b.hex
0,0 → 1,82
8
1ff
1ff
4
1ff
1ff
10
1ff
1ff
1ff
100
1ff
1ff
10
1ff
1ff
1
1ff
1ff
1ff
2
1ff
1ff
1ff
1ff
1ff
100
100
1ff
1ff
2
1ff
1ff
20
1ff
1ff
1ff
20
1ff
1ff
4
1ff
1ff
2
1ff
1ff
1ff
40
1ff
1ff
20
1ff
1ff
8
20
1ff
1ff
8
1ff
1ff
2
1ff
1ff
1ff
80
1ff
1ff
40
1ff
1ff
4
1ff
1ff
1ff
1ff
1ff
1ff
4
1ff
1ff
10
 
/sudoku/trunk/verif/puzzles/puzzle_7.hex
0,0 → 1,82
1ff
1ff
1ff
100
2
1ff
1ff
1ff
1ff
1ff
1ff
20
80
1ff
4
1ff
1ff
1ff
1
100
1ff
1ff
40
1ff
1ff
1ff
20
2
4
1ff
1ff
8
1ff
1
1ff
1ff
1ff
1ff
1
1ff
1ff
1ff
40
1ff
1ff
1ff
1ff
80
1ff
4
1ff
1ff
2
100
40
1ff
1ff
1ff
80
1ff
1ff
100
1
1ff
1ff
1ff
10
1ff
40
2
1ff
1ff
1ff
1ff
1ff
1ff
20
8
1ff
1ff
1ff
 
/sudoku/trunk/verif/puzzles/puzzle_4c.hex
0,0 → 1,82
1ff
1ff
1ff
100
1ff
1ff
10
1ff
1ff
1ff
1
1ff
1ff
40
1ff
1ff
80
1ff
1ff
1ff
10
1ff
1ff
2
1ff
1ff
20
2
1ff
1ff
40
1ff
1ff
8
1ff
1ff
1ff
10
1ff
1ff
2
1ff
1ff
100
1ff
1ff
1ff
100
1ff
1ff
20
1ff
1ff
80
40
1ff
1ff
80
1ff
1ff
100
1ff
1ff
1ff
8
1ff
1ff
4
1ff
1ff
1
1ff
1ff
1ff
4
1ff
1ff
40
1ff
1ff
8
 
/sudoku/trunk/verif/puzzles/puzzle_8.hex
0,0 → 1,82
1ff
20
1ff
10
1ff
8
1ff
4
1ff
1
1ff
1ff
1ff
100
1ff
1ff
1ff
80
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
100
1ff
1ff
1ff
10
1ff
1ff
1ff
20
1ff
8
1ff
20
1ff
2
1ff
40
1ff
40
1ff
1ff
1ff
8
1ff
1ff
1ff
10
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
8
1ff
1ff
1ff
80
1ff
1ff
1ff
1
1ff
10
1ff
2
1ff
4
1ff
8
1ff
 
/sudoku/trunk/verif/puzzles/puzzle_4d.hex
0,0 → 1,82
20
1ff
1ff
100
1ff
1ff
40
1ff
1ff
1ff
1ff
1ff
1ff
20
1ff
1ff
8
1ff
1ff
1ff
4
1ff
1ff
1ff
1ff
1ff
100
80
1ff
1ff
4
1ff
1ff
2
1ff
1ff
1ff
2
1ff
1ff
10
1ff
1ff
100
1ff
1ff
1ff
20
1ff
1ff
80
1ff
1ff
1
2
1ff
1ff
80
1ff
1ff
100
1ff
1ff
1ff
8
1ff
1ff
2
1ff
1ff
1
1ff
1ff
1ff
80
1ff
1ff
8
1ff
1ff
10
 
/sudoku/trunk/verif/puzzles/puzzle_9.hex
0,0 → 1,82
40
1ff
1ff
1ff
1ff
1ff
8
1ff
1ff
1ff
2
1ff
1ff
40
1ff
1ff
80
1ff
1ff
1ff
4
1ff
1ff
80
1ff
40
100
100
1ff
1ff
10
1ff
1ff
4
1ff
1ff
1ff
20
1ff
1ff
2
1ff
1ff
100
1ff
1ff
1ff
1
1ff
100
40
1ff
1ff
20
1ff
1ff
1ff
4
1ff
1ff
100
1ff
1ff
1ff
4
1ff
1ff
8
1ff
1ff
20
1ff
1ff
1ff
100
1ff
1ff
1
1ff
4
10
 
/sudoku/trunk/verif/puzzles/puzzle_4e.hex
0,0 → 1,82
1ff
1ff
1ff
80
1ff
1ff
8
1ff
1ff
1ff
40
1ff
1ff
2
1ff
1ff
80
1ff
1ff
1ff
20
1ff
1ff
100
1ff
1ff
4
1ff
1ff
1ff
40
1ff
1ff
1ff
1ff
1ff
1ff
4
1ff
1ff
100
1ff
1ff
8
1ff
1ff
1ff
100
1ff
1ff
20
1ff
1ff
10
80
1ff
1ff
4
1ff
1ff
40
1ff
1ff
1ff
8
1ff
1ff
20
1ff
1ff
2
1ff
1ff
1ff
4
1ff
1ff
40
1ff
1ff
20
 
/sudoku/trunk/verif/puzzles/puzzle_4f.hex
0,0 → 1,82
1ff
1ff
1ff
4
1ff
1ff
100
1ff
1ff
1ff
8
1ff
1ff
40
1ff
1ff
10
1ff
1ff
1ff
10
1ff
1ff
80
1ff
1ff
1ff
4
1ff
1ff
8
1ff
1ff
40
1ff
1ff
1ff
20
1ff
1ff
80
1ff
1ff
1
1ff
1ff
1ff
8
1ff
1ff
10
1ff
1ff
2
2
1ff
1ff
10
1ff
1ff
1ff
1ff
1ff
1ff
10
1ff
1ff
1
1ff
1ff
40
1ff
1ff
1ff
20
1ff
1ff
100
1ff
1ff
80
 
/sudoku/trunk/verif/puzzles/puzzle_20.hex
0,0 → 1,82
1ff
1ff
2
4
1ff
1ff
1ff
1ff
1ff
80
10
1ff
1ff
8
1ff
1ff
1ff
1ff
100
40
1ff
10
1ff
1
1ff
1ff
1ff
8
1ff
1ff
1ff
1ff
1ff
80
100
1ff
1ff
2
1ff
100
1
1ff
1ff
1ff
4
1ff
1ff
1ff
1ff
1ff
8
1ff
1ff
20
1ff
1ff
1ff
1ff
1ff
1ff
10
1ff
100
1ff
1ff
1ff
1ff
1ff
10
1ff
1
1ff
1ff
1ff
40
1ff
4
1ff
1ff
1ff
80
 
/sudoku/trunk/verif/puzzles/puzzle_21.hex
0,0 → 1,82
1ff
1ff
4
1ff
1ff
1ff
20
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1
1ff
100
1ff
1ff
40
1ff
1ff
10
1ff
1ff
1ff
1ff
1ff
1
80
1ff
1ff
1ff
1ff
10
1ff
1ff
2
1ff
1ff
40
1ff
1
1ff
1ff
20
1ff
100
1ff
1ff
1ff
1ff
40
2
1ff
1ff
1ff
80
4
1ff
1ff
1
1ff
1ff
1ff
1ff
2
1ff
1ff
1ff
1ff
1ff
8
1ff
1ff
1ff
20
40
4
1ff
1ff
 
/sudoku/trunk/verif/puzzles/puzzle_22.hex
0,0 → 1,82
1ff
1ff
4
1ff
8
1ff
1ff
1
1ff
1ff
1ff
1ff
1
100
2
1ff
1ff
1ff
1ff
1ff
1ff
4
1ff
1ff
1ff
1ff
40
1ff
1ff
8
1ff
20
1ff
1ff
1ff
1ff
10
1ff
1ff
1ff
4
8
1ff
1ff
2
1ff
80
1ff
100
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
40
1ff
1ff
1ff
20
40
1ff
1ff
1ff
1ff
1ff
1ff
10
80
1ff
2
100
1ff
1ff
1ff
1ff
4
1ff
 
/sudoku/trunk/verif/puzzles/puzzle_23.hex
0,0 → 1,82
1ff
1ff
4
1ff
10
1ff
8
1ff
1ff
40
1ff
1ff
1ff
20
1ff
1ff
1ff
1ff
1ff
10
1ff
80
1ff
1ff
1ff
20
1ff
10
1ff
1ff
1ff
1ff
4
1ff
1ff
8
1ff
1
1ff
1ff
40
1ff
1ff
80
1ff
2
1ff
1ff
8
1ff
1ff
1ff
1ff
40
1ff
8
1ff
1ff
1ff
80
1ff
10
1ff
1ff
1ff
1ff
1ff
8
1ff
1ff
1ff
100
1ff
1ff
20
1ff
1
1ff
2
1ff
1ff
 
/sudoku/trunk/verif/puzzles/puzzle_24.hex
0,0 → 1,82
1ff
1
1ff
1ff
1ff
40
1ff
1ff
1ff
1ff
1ff
1ff
80
10
1ff
100
1ff
1ff
1ff
1ff
4
1ff
1ff
1ff
1ff
1ff
8
1ff
2
1ff
1ff
8
1ff
1ff
1ff
1ff
40
10
1ff
100
20
1ff
1ff
1ff
1ff
1
1ff
1ff
1ff
1ff
80
1ff
2
1ff
1ff
1ff
20
2
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
4
1ff
1ff
1ff
1ff
1ff
1ff
10
40
1ff
80
 
/sudoku/trunk/verif/puzzles/puzzle_25.hex
0,0 → 1,82
1ff
4
1ff
1ff
1ff
1ff
1ff
80
2
1ff
1ff
2
1ff
100
1ff
1ff
1ff
1ff
1ff
1ff
8
1ff
1ff
20
40
1ff
1ff
1ff
1ff
1ff
1ff
8
4
1ff
1ff
1ff
1ff
1
1ff
1ff
1ff
1ff
10
1ff
1ff
40
1ff
1ff
20
1ff
10
1ff
2
1ff
1ff
100
1ff
2
1ff
1ff
1ff
1ff
20
1ff
1ff
20
10
1ff
1ff
1ff
1ff
100
1ff
1ff
1ff
1ff
1ff
1ff
4
1
1ff
 
/sudoku/trunk/verif/puzzles/puzzle_26.hex
0,0 → 1,82
1ff
4
2
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
2
1ff
1ff
8
1ff
100
1ff
40
1ff
1ff
10
1ff
1ff
1ff
1ff
1
1ff
1ff
1ff
4
1ff
100
80
1ff
1ff
1ff
2
1ff
1ff
20
1ff
1ff
1ff
20
80
1ff
1
1ff
1ff
2
1ff
1ff
1ff
1ff
10
4
1ff
1ff
1ff
1ff
10
40
1ff
1ff
1ff
1ff
1ff
1ff
4
1ff
1ff
1ff
1ff
8
40
1
1ff
1ff
 
/sudoku/trunk/verif/puzzles/puzzle_27.hex
0,0 → 1,82
1ff
8
1ff
2
1ff
1ff
1ff
1ff
80
1ff
1ff
1
1ff
10
1ff
1ff
8
1ff
2
1ff
1ff
80
1ff
1ff
40
1ff
1ff
1ff
1ff
80
1ff
1ff
1ff
1ff
100
40
1ff
1ff
1ff
20
1ff
1ff
4
1ff
1ff
1ff
100
10
40
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
20
1ff
40
1ff
8
1ff
1
1ff
1ff
1ff
2
1ff
1ff
1ff
1ff
1ff
4
1
1ff
1ff
 
/sudoku/trunk/verif/puzzles/puzzle_28.hex
0,0 → 1,82
1ff
8
1ff
4
1ff
1ff
100
1ff
1ff
1ff
40
1ff
1ff
1ff
10
1ff
2
1ff
80
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
20
1ff
1ff
1ff
1ff
1ff
4
10
2
1ff
1ff
10
1ff
1ff
1ff
1ff
100
1ff
1ff
1ff
8
1ff
1ff
1ff
20
1ff
1ff
1ff
1ff
1ff
100
1ff
1ff
1ff
1ff
80
1ff
1ff
1ff
1ff
8
2
1ff
40
1ff
1ff
100
1ff
1
20
1ff
1ff
1ff
1ff
 
/sudoku/trunk/verif/puzzles/puzzle_29.hex
0,0 → 1,82
1ff
10
2
1ff
1ff
20
80
1ff
1ff
1ff
1ff
1ff
1ff
1ff
40
1ff
2
1ff
1ff
1ff
1ff
1ff
1ff
1ff
20
1ff
1ff
1ff
1ff
8
80
1ff
1ff
100
1ff
1ff
2
1ff
1ff
8
1
1ff
1ff
1ff
1ff
1ff
1ff
1
1ff
1ff
1ff
1ff
1ff
80
1ff
1ff
20
1
1ff
1ff
4
80
1ff
1ff
1ff
1ff
1ff
100
1ff
1ff
1ff
20
4
1ff
1ff
20
1ff
1ff
1
1ff
100
 
/sudoku/trunk/verif/puzzles/puzzle_1a.hex
0,0 → 1,82
1ff
1ff
1ff
1ff
1
1ff
1ff
1ff
2
1ff
1ff
4
1ff
1ff
1ff
1ff
8
1ff
1ff
2
1ff
1ff
1ff
10
20
1ff
1ff
1ff
1ff
1ff
1ff
1ff
40
80
1ff
1ff
1
1ff
1ff
1ff
1ff
1ff
1ff
1ff
10
1ff
1ff
8
100
1ff
1ff
1ff
1ff
1ff
1ff
1ff
100
8
1ff
1ff
1ff
1
1ff
1ff
10
1ff
1ff
1ff
1ff
4
1ff
1ff
80
1ff
1ff
1ff
20
1ff
1ff
1ff
1ff
 
/sudoku/trunk/verif/puzzles/puzzle_1b.hex
0,0 → 1,82
1ff
1ff
1ff
1ff
2
1ff
20
80
1ff
100
1ff
1ff
4
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
20
1ff
4
1ff
1ff
1ff
100
1ff
1ff
1ff
20
1ff
1ff
40
1ff
1
1ff
1ff
1ff
1ff
80
1ff
1ff
4
1ff
20
1ff
1ff
80
1ff
2
1ff
1ff
1ff
1ff
1ff
1ff
10
1ff
1ff
1ff
8
1ff
2
1ff
1
1ff
100
1ff
1ff
1ff
80
1ff
100
1ff
1ff
1ff
40
1ff
 
/sudoku/trunk/verif/puzzles/puzzle_1c.hex
0,0 → 1,82
1ff
1ff
1ff
1
1ff
1ff
2
1ff
40
1ff
1ff
1ff
1ff
8
1ff
1ff
1ff
10
1ff
80
1ff
1ff
1ff
4
1ff
1ff
1ff
1ff
1ff
10
1ff
1ff
40
1ff
1ff
100
1ff
1
1ff
1ff
10
1ff
1ff
4
1ff
2
1ff
1ff
100
1ff
1ff
10
1ff
1ff
1ff
1ff
1ff
20
1ff
1ff
1ff
8
1ff
1
1ff
1ff
1ff
40
1ff
1ff
1ff
1ff
80
1ff
2
1ff
1ff
100
1ff
1ff
1ff
 
/sudoku/trunk/verif/puzzles/puzzle_1d.hex
0,0 → 1,82
1ff
1ff
1ff
4
1ff
1ff
1ff
80
20
1ff
1ff
40
20
1ff
1ff
1
1ff
1ff
1ff
1ff
1ff
1ff
10
1ff
1ff
1ff
8
1ff
1ff
20
1ff
1
1ff
1ff
1ff
1ff
10
1ff
8
1ff
1ff
1ff
4
1ff
2
1ff
100
1ff
1ff
8
1ff
40
1ff
1ff
2
1ff
1ff
1ff
4
1ff
20
1ff
1ff
1ff
1ff
1
1ff
1ff
10
8
1ff
1ff
8
4
1ff
1ff
1ff
100
1ff
1ff
1ff
 
/sudoku/trunk/verif/puzzles/puzzle_1e.hex
0,0 → 1,82
1ff
1ff
1ff
4
1ff
1ff
10
1ff
1ff
1ff
10
1ff
1ff
1
1ff
1ff
4
1ff
1ff
1ff
40
1ff
1ff
8
1ff
1ff
1
2
1ff
1ff
1ff
1ff
1ff
8
1ff
1ff
1ff
20
1ff
1ff
100
1ff
1ff
1ff
1ff
1ff
1ff
1
1ff
1ff
20
1ff
1ff
2
80
1ff
1ff
40
1ff
1ff
2
1ff
1ff
1ff
100
1ff
1ff
80
1ff
1ff
10
1ff
1ff
1ff
10
1ff
1ff
100
1ff
1ff
40
 
/sudoku/trunk/verif/puzzles/puzzle_5a.hex
0,0 → 1,82
100
1ff
1ff
8
1ff
1ff
1
1ff
1ff
1ff
8
1ff
1ff
1
1ff
1ff
100
1ff
1ff
1ff
20
1ff
1ff
1ff
1ff
1ff
8
8
1ff
1ff
20
1ff
1ff
40
1ff
1ff
1ff
100
1ff
1ff
2
1ff
1ff
4
1ff
1ff
1ff
2
1ff
1ff
80
1ff
1ff
1ff
2
1ff
1ff
100
1ff
1ff
1ff
1ff
1ff
1ff
10
1ff
1ff
4
1ff
1ff
1ff
1ff
1ff
1ff
40
1ff
1ff
1
1ff
1ff
80
 
/sudoku/trunk/verif/puzzles/puzzle_1f.hex
0,0 → 1,82
1ff
1ff
1ff
8
1ff
1ff
10
1ff
1ff
1ff
40
1ff
1ff
1ff
4
1ff
1ff
1ff
1ff
1ff
8
2
1
1ff
1ff
20
1ff
1ff
4
1ff
1ff
80
1ff
1
1ff
1ff
80
1ff
1ff
40
1ff
1ff
1ff
1ff
20
100
10
1ff
4
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
100
1ff
1ff
1ff
1ff
1
1ff
20
1ff
1ff
1ff
1ff
1ff
2
1ff
1ff
1ff
4
1ff
1ff
20
1ff
80
8
 
/sudoku/trunk/verif/puzzles/puzzle_5b.hex
0,0 → 1,82
1
1ff
1ff
80
1ff
1ff
4
1ff
1ff
1ff
4
1ff
1ff
10
1ff
1ff
2
1ff
1ff
1ff
8
1ff
1ff
1
1ff
1ff
80
40
1ff
1ff
8
1ff
1ff
2
1ff
1ff
1ff
8
1ff
1ff
1
1ff
1ff
20
1ff
1ff
1ff
10
1ff
1ff
80
1ff
1ff
1
1ff
1ff
1ff
40
1ff
1ff
20
1ff
1ff
1ff
80
1ff
1ff
1ff
1ff
1ff
4
1ff
1ff
1ff
2
1ff
1ff
20
1ff
1ff
10
 
/sudoku/trunk/verif/puzzles/puzzle_5c.hex
0,0 → 1,82
1
1ff
1ff
80
1ff
1ff
4
1ff
1ff
1ff
4
1ff
1ff
10
1ff
1ff
2
1ff
1ff
1ff
8
1ff
1ff
1
1ff
1ff
80
40
1ff
1ff
8
1ff
1ff
2
1ff
1ff
1ff
8
1ff
1ff
1
1ff
1ff
20
1ff
1ff
1ff
10
1ff
1ff
80
1ff
1ff
1
1ff
1ff
1ff
40
1ff
1ff
20
1ff
1ff
1ff
80
1ff
1ff
1ff
1ff
1ff
4
1ff
1ff
1ff
2
1ff
1ff
20
1ff
1ff
10
 
/sudoku/trunk/verif/puzzles/puzzle_a.hex
0,0 → 1,82
1ff
1ff
1ff
1ff
40
1ff
1ff
2
1ff
80
1ff
1ff
1ff
1ff
1ff
1ff
1ff
20
1ff
1
1ff
2
1ff
10
1ff
1ff
1ff
100
1ff
10
8
1ff
1ff
1ff
1ff
80
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
4
1ff
1ff
1ff
1ff
80
10
1ff
1
1ff
1ff
1ff
4
1ff
2
1ff
80
1ff
8
1ff
1ff
1ff
1ff
1ff
1ff
1ff
100
1ff
40
1ff
1ff
20
1ff
1ff
1ff
1ff
 
/sudoku/trunk/verif/puzzles/puzzle_b.hex
0,0 → 1,82
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1
2
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
4
1ff
1ff
2
4
1ff
1ff
8
1ff
1ff
1ff
1ff
1
80
1ff
1ff
1ff
1ff
10
1ff
20
1ff
1ff
40
1ff
80
1ff
1ff
1ff
1ff
1ff
1ff
1ff
100
1ff
1ff
1ff
1ff
1ff
80
10
1ff
1ff
1ff
1ff
1ff
100
1ff
1ff
1ff
8
1ff
10
1ff
1ff
8
40
1ff
1ff
1ff
20
1ff
1ff
1ff
 
/sudoku/trunk/verif/puzzles/puzzle_c.hex
0,0 → 1,82
1ff
1ff
1ff
1ff
1ff
1ff
1ff
4
100
1ff
1ff
1ff
1ff
1ff
1
1ff
1ff
10
1ff
1ff
4
1ff
10
1ff
80
1ff
1ff
1ff
1ff
80
1ff
100
1ff
1ff
1ff
20
1ff
40
1ff
1ff
1ff
2
1ff
1ff
1ff
1
1ff
1ff
8
1ff
1ff
1ff
1ff
1ff
1ff
1ff
100
1ff
80
1ff
1ff
10
1ff
1ff
2
1ff
1ff
1ff
1ff
20
1ff
1ff
8
1ff
1ff
40
1ff
1ff
1ff
1ff
1ff
 
/sudoku/trunk/verif/puzzles/puzzle_30.hex
0,0 → 1,82
4
1ff
1ff
40
1ff
1ff
1ff
2
1ff
1ff
1ff
80
1ff
8
1ff
1ff
1ff
100
1ff
1ff
1ff
1ff
10
1ff
1ff
1ff
1
1ff
1ff
2
8
1ff
1ff
1ff
1ff
1ff
10
1ff
1ff
1ff
4
1ff
8
1ff
1ff
1ff
1ff
1ff
1ff
1ff
80
1ff
4
1ff
1ff
1ff
8
20
1ff
1ff
1ff
1ff
1ff
100
1ff
1ff
2
1ff
4
1ff
1ff
1ff
1ff
1
1ff
1ff
1ff
1ff
1ff
20
40
 
/sudoku/trunk/verif/puzzles/puzzle_d.hex
0,0 → 1,82
1
2
1ff
4
1ff
1ff
1ff
1ff
8
4
10
1ff
1ff
1ff
1ff
1
1ff
1ff
1ff
1ff
8
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
10
8
1ff
1ff
2
1ff
1ff
20
1ff
1ff
1ff
40
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
80
1ff
100
1ff
1ff
1ff
4
1
1ff
1ff
10
1ff
1ff
1ff
1ff
1ff
1ff
1ff
100
1ff
40
1ff
1ff
1ff
1ff
1ff
20
1ff
1ff
1ff
80
 
/sudoku/trunk/verif/puzzles/puzzle_31.hex
0,0 → 1,82
4
80
1ff
10
1ff
1ff
1ff
2
100
1ff
1ff
10
1ff
8
1ff
1ff
4
1ff
1ff
1ff
1ff
1ff
1ff
1ff
10
1ff
1ff
1ff
2
1ff
8
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
80
1ff
8
1ff
100
1ff
80
1ff
2
1ff
1ff
1ff
40
1ff
1ff
1ff
20
1ff
1ff
1ff
1ff
1ff
1ff
2
1ff
1ff
1ff
1ff
1ff
80
20
8
1ff
100
1ff
4
1ff
1ff
 
/sudoku/trunk/verif/puzzles/puzzle_e.hex
0,0 → 1,82
1ff
1ff
1ff
1ff
100
1ff
1ff
10
1ff
1ff
1
1ff
1ff
1ff
1ff
1ff
4
1ff
1ff
1ff
2
4
1ff
1ff
40
1ff
1ff
1ff
1ff
8
10
1ff
1ff
1ff
40
1ff
80
1ff
1ff
1ff
1ff
1ff
2
1ff
1ff
1ff
1ff
1ff
1ff
1ff
20
8
1ff
1ff
1ff
100
1ff
1ff
1
1ff
1ff
1ff
1ff
1ff
80
1ff
1ff
20
1ff
1ff
1ff
1ff
1ff
1ff
10
8
1ff
1ff
1ff
1ff
40
 
/sudoku/trunk/verif/puzzles/puzzle_32.hex
0,0 → 1,82
10
1ff
1ff
2
1ff
1ff
4
1ff
1ff
1ff
1ff
1ff
1ff
80
1ff
1ff
100
1ff
1ff
1ff
2
1ff
1ff
8
1ff
1ff
20
20
1ff
1ff
1
1ff
1ff
100
1ff
1ff
1ff
1
1ff
1ff
1ff
1ff
1ff
8
1ff
1ff
1ff
40
1ff
1ff
4
1ff
1ff
80
40
1ff
1ff
4
1ff
1ff
8
1ff
1ff
1ff
100
1ff
1ff
40
1ff
1ff
2
1ff
1ff
1ff
10
1ff
1ff
20
1ff
1ff
100
 
/sudoku/trunk/verif/puzzles/puzzle_f.hex
0,0 → 1,82
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
80
1ff
1ff
4
1ff
1ff
1ff
8
1ff
1ff
1ff
100
1ff
1ff
2
1ff
1ff
20
1ff
1ff
1ff
1ff
1ff
40
100
1ff
1ff
1ff
1ff
1ff
1ff
1ff
20
1
2
1ff
1ff
1ff
20
1ff
10
1ff
2
1ff
40
1ff
1ff
1ff
80
1ff
1ff
1ff
10
1ff
1ff
1ff
1
1ff
1ff
1ff
1ff
1ff
2
1ff
8
1ff
10
1ff
1ff
1ff
1ff
1ff
4
 
/sudoku/trunk/verif/puzzles/puzzle_33.hex
0,0 → 1,82
10
1ff
1ff
8
1ff
1ff
80
1ff
1ff
1ff
1ff
1ff
1ff
100
1ff
1ff
1
1ff
1ff
1ff
2
1ff
1ff
1
1ff
1ff
10
20
1ff
1ff
4
1ff
1ff
8
1ff
1ff
1ff
10
1ff
1ff
40
1ff
1ff
1ff
1ff
1ff
1ff
8
1ff
1ff
1ff
1ff
1ff
80
4
1ff
1ff
20
1ff
1ff
40
1ff
1ff
1ff
20
1ff
1ff
1ff
1ff
1ff
80
1ff
1ff
1ff
80
1ff
1ff
2
1ff
1ff
1
 
/sudoku/trunk/verif/puzzles/puzzle_34.hex
0,0 → 1,82
10
1ff
1ff
40
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
4
1ff
1ff
40
1ff
1ff
1ff
80
1ff
1ff
10
1ff
1ff
4
20
1ff
1ff
1
1ff
1ff
8
1ff
1ff
1ff
80
1ff
1ff
2
1ff
1ff
100
1ff
1ff
1ff
100
1ff
1ff
80
1ff
1ff
1
1ff
1ff
1ff
8
1ff
1ff
4
1ff
1ff
1ff
20
1ff
1ff
100
1ff
1ff
8
1ff
1ff
1ff
2
1ff
1ff
20
1ff
1ff
100
 
/sudoku/trunk/verif/puzzles/puzzle_35.hex
0,0 → 1,82
10
1ff
1ff
80
1ff
1ff
8
1ff
1ff
1ff
80
1ff
1ff
100
1ff
1ff
10
1ff
1ff
1ff
40
1ff
1ff
20
1ff
1ff
2
1ff
1ff
8
1ff
1ff
4
1ff
1ff
20
1ff
4
1ff
1ff
1ff
1ff
1ff
1ff
1ff
100
1ff
1ff
1
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
40
1ff
1ff
80
1ff
1ff
1ff
8
1ff
1ff
10
1ff
1ff
1
1ff
1ff
1ff
2
1ff
1ff
1
1ff
1ff
8
 
/sudoku/trunk/verif/puzzles/puzzle_36.hex
0,0 → 1,82
20
1ff
1ff
1ff
1ff
1ff
1ff
1ff
4
1ff
40
1ff
1ff
80
1ff
1ff
100
1ff
1ff
1ff
2
1ff
1ff
1ff
10
1ff
1ff
1ff
1ff
1ff
4
1ff
1ff
1ff
1ff
1ff
1ff
80
1ff
1ff
1
1ff
1ff
40
1ff
1ff
1ff
1ff
1ff
1ff
2
1ff
1ff
1ff
1ff
1ff
10
1ff
1ff
1ff
1
1ff
1ff
1ff
100
1ff
1ff
8
1ff
1ff
80
1ff
4
1ff
1ff
1ff
1ff
1ff
1ff
1ff
2
 
/sudoku/trunk/verif/puzzles/puzzle_37.hex
0,0 → 1,82
20
1ff
1ff
1ff
1ff
1ff
1ff
1
1ff
1ff
1ff
40
1ff
1ff
1ff
1ff
1ff
1ff
1ff
10
1ff
1ff
80
4
1ff
2
1ff
1ff
1ff
1ff
1ff
8
1ff
4
1ff
1ff
1ff
1ff
2
80
1ff
20
1ff
1ff
1ff
1ff
40
1ff
1ff
1ff
1ff
1ff
10
1ff
1ff
1ff
1ff
1ff
1ff
100
1
1ff
1ff
1ff
1ff
80
2
4
10
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1
1ff
1ff
1ff
8
 
/sudoku/trunk/verif/puzzles/puzzle_38.hex
0,0 → 1,82
20
1ff
1ff
1ff
1ff
1ff
4
1ff
1ff
1ff
10
1ff
1ff
100
1ff
1ff
80
1ff
1ff
1ff
2
1ff
1ff
20
1ff
1ff
100
80
1ff
1ff
1ff
1ff
1ff
40
1ff
1ff
1ff
40
1ff
1ff
10
1ff
1ff
8
1ff
1ff
1ff
1ff
1ff
1ff
1
1ff
1ff
10
1
1ff
1ff
4
1ff
1ff
10
1ff
1ff
1ff
8
1ff
1ff
2
1ff
1ff
20
1ff
1ff
1ff
80
1ff
1ff
40
1ff
1ff
2
 
/sudoku/trunk/verif/puzzles/puzzle_39.hex
0,0 → 1,82
20
1ff
1ff
1
1ff
1ff
40
1ff
1ff
1ff
1ff
1ff
1ff
40
1ff
1ff
80
1ff
1ff
1ff
100
1ff
1ff
80
1ff
1ff
4
40
1ff
1ff
8
1ff
1ff
10
1ff
1ff
1ff
4
1ff
1ff
1ff
1ff
1ff
2
1ff
1ff
1ff
8
1ff
1ff
10
1ff
1ff
80
1
1ff
1ff
2
1ff
1ff
8
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
10
1ff
1ff
1ff
20
1ff
1ff
100
1ff
1ff
1ff
 
/sudoku/trunk/verif/puzzles/puzzle_2a.hex
0,0 → 1,82
1ff
20
1ff
1ff
1ff
1ff
1ff
40
1ff
80
40
1ff
4
1ff
1ff
10
100
1ff
1ff
1ff
10
8
1ff
1ff
2
1ff
1ff
1ff
1ff
100
1ff
10
20
8
1ff
1ff
1ff
1ff
1ff
100
1ff
1ff
1ff
80
1ff
2
1ff
40
80
1ff
1ff
1ff
1ff
1ff
40
1ff
1ff
1ff
1ff
8
1ff
1ff
2
1ff
1ff
80
1ff
1ff
1ff
40
1
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
100
 
/sudoku/trunk/verif/puzzles/puzzle_2b.hex
0,0 → 1,82
1ff
20
1ff
1ff
1ff
1ff
1ff
40
1ff
100
1ff
1ff
1ff
80
1ff
1ff
1ff
20
1ff
1ff
4
1ff
1ff
100
1
1ff
1ff
1ff
1ff
80
1ff
100
10
1ff
1ff
1ff
1ff
2
1ff
8
1ff
1ff
1ff
20
1ff
1ff
1ff
1ff
2
1
1ff
80
1ff
1ff
1ff
1ff
10
1ff
1ff
1ff
20
1ff
1ff
4
1ff
1ff
1ff
8
1ff
1ff
1ff
80
1ff
8
1ff
1ff
1ff
1ff
1ff
2
1ff
 
/sudoku/trunk/verif/puzzles/puzzle_2c.hex
0,0 → 1,82
1
1ff
1ff
1ff
10
1ff
1ff
1ff
1ff
1ff
1ff
1ff
2
1ff
1
1ff
1ff
1ff
1ff
1ff
4
1ff
40
1ff
1ff
20
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
100
20
2
1ff
1ff
1ff
1ff
1ff
1ff
40
1ff
80
10
100
4
1ff
1ff
1ff
1ff
1ff
4
1ff
1ff
20
1ff
1ff
80
1ff
1ff
40
1ff
1ff
1ff
1ff
1
1ff
1ff
10
1ff
1ff
1ff
1ff
8
1ff
40
1ff
 
/sudoku/trunk/verif/puzzles/puzzle_2d.hex
0,0 → 1,82
1
1ff
1ff
1ff
100
1ff
1ff
4
1ff
1ff
1ff
2
1ff
1ff
4
1ff
10
1ff
40
1ff
1ff
80
1ff
1ff
1ff
1ff
1ff
1ff
1ff
4
1ff
1ff
40
1ff
1ff
1ff
100
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
8
80
1ff
1ff
1ff
20
1ff
1ff
1ff
2
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1ff
1
8
1ff
1ff
40
100
1ff
1ff
1ff
40
1ff
20
80
1ff
1ff
 
/sudoku/trunk/verif/puzzles/puzzle_2e.hex
0,0 → 1,82
1
1ff
1ff
20
1ff
1ff
1ff
1ff
1ff
1ff
40
1ff
4
1ff
100
1ff
8
1ff
1ff
1ff
8
1ff
40
1ff
1ff
1ff
2
1ff
1
1ff
40
1ff
1ff
1ff
1ff
100
1ff
4
40
1ff
1ff
1ff
2
1ff
1ff
10
1ff
1ff
1ff
1ff
1ff
1ff
1ff
20
1ff
1ff
1ff
1ff
1ff
10
100
1ff
1ff
1ff
1ff
2
1ff
4
1ff
1ff
1ff
1ff
40
80
1ff
1ff
1
1ff
1ff
1ff
1ff
 
/sudoku/trunk/verif/puzzles/puzzle_2f.hex
0,0 → 1,82
4
1ff
1ff
10
1ff
1ff
1
1ff
1ff
1ff
40
1ff
1ff
1ff
1ff
1ff
80
1ff
1ff
1ff
80
1ff
1ff
8
1ff
1ff
20
20
1ff
1ff
8
1ff
1ff
100
1ff
1ff
1ff
4
1ff
1ff
20
1ff
1ff
10
1ff
1ff
1ff
40
1ff
1ff
1
1ff
1ff
8
80
1ff
1ff
1
1ff
1ff
4
1ff
1ff
1ff
1ff
1ff
1ff
2
1ff
1ff
20
1ff
1ff
1ff
2
1ff
1ff
100
1ff
1ff
1ff
 
/sudoku/trunk/verif/tb_search.v
0,0 → 1,111
module tb_search();
reg clk;
reg rst;
reg start;
wire done;
wire [728:0] outGrid;
wire [728:0] inGrid;
 
reg [8:0] mem [80:0];
 
initial
begin
clk = 0;
rst = 1;
 
$readmemh("puzzle_9.hex", mem);
$display("mem[0] = %x, mem[80] = %x",
mem[0], mem[80]);
#1000
rst = 0;
end
 
always@(posedge clk)
begin
if(rst)
start <= 1'b1;
else
start <= start ? 1'b0 : start;
end
always
clk = #5 !clk;
 
sudoku_search uut (
// Outputs
.outGrid (outGrid[728:0]),
.done (done),
.error (),
// Inputs
.clk (clk),
.rst (rst),
.start (start),
.inGrid (inGrid[728:0])
);
 
assign inGrid = {mem[0],mem[1],mem[2],mem[3],mem[4],mem[5],mem[6],mem[7],mem[8],mem[9],mem[10],mem[11],mem[12],mem[13],mem[14],mem[15],mem[16],mem[17],mem[18],mem[19],mem[20],mem[21],mem[22],mem[23],mem[24],mem[25],mem[26],mem[27],mem[28],mem[29],mem[30],mem[31],mem[32],mem[33],mem[34],mem[35],mem[36],mem[37],mem[38],mem[39],mem[40],mem[41],mem[42],mem[43],mem[44],mem[45],mem[46],mem[47],mem[48],mem[49],mem[50],mem[51],mem[52],mem[53],mem[54],mem[55],mem[56],mem[57],mem[58],mem[59],mem[60],mem[61],mem[62],mem[63],mem[64],mem[65],mem[66],mem[67],mem[68],mem[69],mem[70],mem[71],mem[72],mem[73],mem[74],mem[75],mem[76],mem[77],mem[78],mem[79],mem[80]};
 
reg [31:0] r_cnt;
 
wire [8:0] result [80:0];
wire [8:0] result_dec [80:0];
genvar i;
integer y,x;
generate
for(i=0;i<81;i=i+1)
begin: unflatten
assign result[i] = outGrid[(9*(i+1))-1:9*i];
hot2dec h (.hot(result[i]), .dec(result_dec[i]));
end
endgenerate
 
always@(posedge clk)
begin
if(rst)
begin
r_cnt <= 32'd0;
end
else
begin
r_cnt <= start ? 32'd0 : r_cnt + 32'd1;
if(done)
begin
$write("\n");
for(y=0;y<9;y=y+1)
begin
for(x=0;x<9;x=x+1)
begin
$write("%d ", result_dec[y*9+x]);
end
$write("\n");
end
$display("solved in %d cycles", r_cnt);
$finish();
end // if (done)
end // else: !if(rst)
end // always@ (posedge clk)
endmodule // tb_search
 
 
module hot2dec(input [8:0] hot, output [8:0] dec);
assign dec = (hot == 9'd1) ? 9'd1 :
(hot == 9'd2) ? 9'd2 :
(hot == 9'd4) ? 9'd3 :
(hot == 9'd8) ? 9'd4 :
(hot == 9'd16) ? 9'd5 :
(hot == 9'd32) ? 9'd6 :
(hot == 9'd64) ? 9'd7 :
(hot == 9'd128) ? 9'd8 :
(hot == 9'd256) ? 9'd9 :
9'd0;
endmodule

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.