aboutsummaryrefslogtreecommitdiff
path: root/rtl/modexpng_mmm_col_index.v
blob: b904795af7f696093de079420908ef26a62b075f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
module modexpng_mmm_col_index
(
    clk,
    index_last,
    fsm_state_next,
    col_index,
    col_index_done,
    col_index_zero,
    col_index_next,
    col_index_prev
);


    //
    // Includes
    //
    //`include "modexpng_parameters.vh"
    //`include "modexpng_parameters_x8.vh"
    `include "modexpng_mmm_fsm.vh"

    
    //
    // Parameters
    //
    parameter INDEX_WIDTH = 6;

    
    //
    // Ports
    //
    input                        clk;
    input  [    INDEX_WIDTH-1:0] index_last;
    input  [FSM_STATE_WIDTH-1:0] fsm_state_next;
    output [    INDEX_WIDTH-4:0] col_index;
    output                       col_index_done;
    output [    INDEX_WIDTH-4:0] col_index_zero;
    output [    INDEX_WIDTH-4:0] col_index_next;
    output [    INDEX_WIDTH-4:0] col_index_prev;
    

    //
    // Registers
    //
    reg  [INDEX_WIDTH-4:0] col_index_reg;
    reg  [INDEX_WIDTH-4:0] col_index_last;
    reg  [INDEX_WIDTH-4:0] col_index_dly;
    
    
    //
    // Mapping
    //
    assign col_index = col_index_reg;
    assign col_index_prev = col_index_dly;
    
    
    //
    // Handy Wires
    //
    assign col_index_done = col_index == col_index_last;
    assign col_index_zero = {(INDEX_WIDTH-3){1'b0}};
    assign col_index_next = col_index + 1'b1;
 
 
    //
    // Increment Logic
    //
    always @(posedge clk)
        //
        case (fsm_state_next)
            //
            FSM_STATE_MULT_SQUARE_COL_0_TRIG: begin
                col_index_reg  <= col_index_zero;
                col_index_last <= index_last[INDEX_WIDTH-1:3];
            end
            //
            FSM_STATE_MULT_SQUARE_COL_N_TRIG:
                col_index_reg <= col_index_next;
            //
        endcase
      
      
    //
    // Delay Logic
    //
    always @(posedge clk)
        //
        col_index_dly <= col_index;
    
    
endmodule