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

Subversion Repositories sudoku

[/] [sudoku/] [branches/] [zynq/] [rtl/] [Slave.v] - Blame information for rev 6

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 6 dsheffie
`include "piece.v"
2
`include "sudoku.v"
3
`include "sudoku_search.v"
4
`include "wrap_search.v"
5
`include "minPiece.v"
6
 
7
 
8
module Slave(input clk,
9
             input         reset,
10
             input [7:0]   io_write_valid,
11
             output        io_write_ready,
12
             input [3:0]   io_write_byteEnable,
13
             input [31:0]  io_write_data,
14
             input [7:0]   io_read_valid,
15
             output        io_read_ready,
16
             output [31:0] io_read_data);
17
 
18
   /* DBS verilog notes:
19
    * rst -> active high reset...
20
    * io_write_valid -> one hot code for write
21
    * io_read_valid -> one hot code for read
22
    */
23
   reg [31:0]               rf[7:0];
24
 
25
   wire w_read = |io_read_valid;
26
   wire w_write = |io_write_valid;
27
 
28
   assign io_read_ready = |io_read_valid;
29
   assign io_write_ready = |io_write_valid;
30
 
31
   wire [2:0]               r_addr;
32
   wire [2:0]               w_addr;
33
 
34
   assign r_addr = io_read_valid == 8'd1 ? 3'd0 :
35
                   io_read_valid == 8'd2 ? 3'd1 :
36
                   io_read_valid == 8'd4 ? 3'd2 :
37
                   io_read_valid == 8'd8 ? 3'd3 :
38
                   io_read_valid == 8'd16 ? 3'd4 :
39
                   io_read_valid == 8'd32 ? 3'd5 :
40
                   io_read_valid == 8'd64 ? 3'd6 :
41
                   3'd7;
42
 
43
   assign w_addr = io_write_valid == 8'd1 ? 3'd0 :
44
                   io_write_valid == 8'd2 ? 3'd1 :
45
                   io_write_valid == 8'd4 ? 3'd2 :
46
                   io_write_valid == 8'd8 ? 3'd3 :
47
                   io_write_valid == 8'd16 ? 3'd4 :
48
                   io_write_valid == 8'd32 ? 3'd5 :
49
                   io_write_valid == 8'd64 ? 3'd6 :
50
                   3'd7;
51
 
52
   assign io_read_data =  w_read ? rf[r_addr] : 32'hffffffff;
53
 
54
   wire [8:0]               w_dout;
55
     wire                  w_start;
56
 
57
   assign w_start = rf[7][0];
58
 
59
   wire                    w_wr;
60
   wire [6:0]               w_saddr;
61
   wire [8:0]               w_din;
62
   assign w_wr = rf[1][31];
63
   assign w_saddr = rf[1][6:0];
64
   assign w_din = rf[1][15:7];
65
 
66
 
67
   wire                    w_done, w_error;
68
 
69
   always@(posedge clk)
70
     begin
71
        if(reset)
72
          begin
73
             rf[0] <= 32'd0;
74
             rf[1] <= 32'd0;
75
             rf[2] <= 32'd0;
76
             rf[3] <= 32'd0;
77
             rf[7] <= 32'd0;
78
          end
79
        else
80
          begin
81
             rf[0] <= {32'd0, w_error, w_done};
82
             /* fire for one cycle */
83
             rf[7] <= (w_write && (w_addr == 3'd7)) ? io_write_data : 32'd0;
84
 
85
             if(w_write && (w_addr == 3'd1))
86
               begin
87
                  rf[1] <= io_write_data;
88
               end
89
             rf[2] <= {23'd0, w_dout};
90
 
91
          end
92
     end
93
 
94
    wrap_search solver0 (
95
                        // Outputs
96
                        .dout           (w_dout),
97
                        .done           (w_done),
98
                        .error          (w_error),
99
                        // Inputs
100
                        .clk            (clk),
101
                        .rst            (reset),
102
                        .start          (w_start),
103
                        .addr           (w_saddr),
104
                        .wr             (w_wr),
105
                        .din            (w_din)
106
                        );
107
 
108
 
109
 
110
 
111
endmodule
112
 

powered by: WebSVN 2.1.0

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