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

Subversion Repositories sudoku

[/] [sudoku/] [trunk/] [verif/] [tb_search.v] - Blame information for rev 4

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 dsheffie
module tb_search();
2
   reg clk;
3
   reg rst;
4
   reg start;
5
   wire done;
6 4 dsheffie
 
7
   reg [1023:0] puz_filename;
8
   integer      fh;
9
 
10 2 dsheffie
   wire [728:0] outGrid;
11
   wire [728:0] inGrid;
12
 
13
   reg [8:0]     mem [80:0];
14
 
15
 
16
   initial
17
     begin
18
        clk = 0;
19
        rst = 1;
20
 
21 4 dsheffie
        if($value$plusargs("puz=%s", puz_filename))
22
          begin
23
             $readmemh(puz_filename, mem);
24
          end
25
        else
26
          begin
27
             $display("no puzzle filename, use +puz=!");
28
             $finish();
29
          end
30
 
31 2 dsheffie
        #1000
32
          rst = 0;
33
     end
34
 
35
   always@(posedge clk)
36
     begin
37
        if(rst)
38
          start <= 1'b1;
39
        else
40
          start <= start ? 1'b0 : start;
41
     end
42
 
43
   always
44
     clk = #5 !clk;
45
 
46
 
47
 
48
   sudoku_search uut (
49
               // Outputs
50
               .outGrid                 (outGrid[728:0]),
51
               .done                    (done),
52
               .error                   (),
53
               // Inputs
54
               .clk                     (clk),
55
               .rst                     (rst),
56
               .start                   (start),
57
               .inGrid                  (inGrid[728:0])
58
               );
59
 
60
   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]};
61
 
62
   reg [31:0] r_cnt;
63
 
64
 
65
   wire [8:0] result [80:0];
66
   wire [8:0] result_dec [80:0];
67
 
68
   genvar     i;
69
   integer    y,x;
70
 
71
   generate
72
      for(i=0;i<81;i=i+1)
73
        begin: unflatten
74
           assign result[i] = outGrid[(9*(i+1))-1:9*i];
75
           hot2dec h (.hot(result[i]), .dec(result_dec[i]));
76
        end
77
   endgenerate
78
 
79
 
80
   always@(posedge clk)
81
     begin
82
        if(rst)
83
          begin
84
             r_cnt <= 32'd0;
85
          end
86
        else
87
          begin
88
             r_cnt <= start ? 32'd0 : r_cnt + 32'd1;
89
             if(done)
90
               begin
91
                  $write("\n");
92
                  for(y=0;y<9;y=y+1)
93
                    begin
94
                       for(x=0;x<9;x=x+1)
95
                         begin
96
                            $write("%d ", result_dec[y*9+x]);
97
                         end
98
                       $write("\n");
99
                    end
100
                  $display("solved in %d cycles", r_cnt);
101
                  $finish();
102
               end // if (done)
103
          end // else: !if(rst)
104
     end // always@ (posedge clk)
105
 
106
 
107
endmodule // tb_search
108
 
109
 
110
module hot2dec(input [8:0] hot, output [8:0] dec);
111
   assign dec = (hot == 9'd1) ? 9'd1 :
112
                (hot == 9'd2) ? 9'd2 :
113
                (hot == 9'd4) ? 9'd3 :
114
                (hot == 9'd8) ? 9'd4 :
115
                (hot == 9'd16) ? 9'd5 :
116
                (hot == 9'd32) ? 9'd6 :
117
                (hot == 9'd64) ? 9'd7 :
118
                (hot == 9'd128) ? 9'd8 :
119
                (hot == 9'd256) ? 9'd9 :
120
                9'd0;
121
endmodule

powered by: WebSVN 2.1.0

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