OpenCores
URL https://opencores.org/ocsvn/an-fpga-implementation-of-low-latency-noc-based-mpsoc/an-fpga-implementation-of-low-latency-noc-based-mpsoc/trunk

Subversion Repositories an-fpga-implementation-of-low-latency-noc-based-mpsoc

[/] [an-fpga-implementation-of-low-latency-noc-based-mpsoc/] [trunk/] [mpsoc/] [rtl/] [src_peripheral/] [Other/] [wb_master_dummy_request.v] - Blame information for rev 48

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 48 alirezamon
/**************************************
2
* Module: wb_master_dummy_request
3
* Date:2017-05-14
4
* Author: alireza
5
*
6
* Description: This is a dummy wishnbone bus request sender.
7
*
8
***************************************/
9
 
10
// synthesis translate_off
11
`timescale 1ns / 1ps
12
// synthesis translate_on
13
 
14
 
15
module wb_master_dummy_request #(
16
         //wishbone port parameters
17
    parameter Dw            =   32,
18
    parameter S_Aw          =   7,
19
    parameter M_Aw          =   32,
20
    parameter TAGw          =   3,
21
    parameter SELw          =   4,
22
 
23
 
24
                parameter REQ_LEN_CLK_NUM = 10,
25
                parameter REQ_WAIT_CLK_NUM = 20
26
 
27
)(
28
 
29
         clk,
30
         reset,
31
     //wishbone master rd interface signals
32
    m_rd_sel_o,
33
    m_rd_addr_o,
34
    m_rd_cti_o,
35
    m_rd_stb_o,
36
    m_rd_cyc_o,
37
    m_rd_we_o,
38
    m_rd_dat_i,
39
    m_rd_ack_i
40
 
41
);
42
 
43
 
44
 
45
 
46
 
47
 //wishbone master wr interface signals
48
     function integer log2;
49
      input integer number; begin
50
         log2=(number <=1) ? 1: 0;
51
         while(2**log2<number) begin
52
            log2=log2+1;
53
         end
54
      end
55
    endfunction // log2 
56
 
57
 
58
 
59
 
60
        input reset,clk;
61
 
62
        //wishbone read master interface signals
63
    output  [SELw-1          :   0] m_rd_sel_o;
64
    output  [M_Aw-1          :   0] m_rd_addr_o;
65
    output  [TAGw-1          :   0] m_rd_cti_o;
66
    output                          m_rd_stb_o;
67
    output   reg                    m_rd_cyc_o;
68
    output                          m_rd_we_o;
69
    input   [Dw-1           :  0]   m_rd_dat_i;
70
    input                           m_rd_ack_i;
71
 
72
        assign m_rd_sel_o = {TAGw{1'b1}};
73
        assign m_rd_addr_o ={M_Aw{1'b0}};
74
        assign m_rd_cti_o = 3'd0;
75
        assign m_rd_stb_o = m_rd_cyc_o;
76
        assign m_rd_we_o= 1'b0;
77
 
78
 
79
         localparam
80
                ACTIVEw= log2(REQ_LEN_CLK_NUM),
81
                DELAYw = log2(REQ_WAIT_CLK_NUM),
82
                COUNTERw = (ACTIVEw > DELAYw)? ACTIVEw : DELAYw;
83
 
84
         reg [COUNTERw-1        :       0] counter,counter_next;
85
 
86
         localparam ST_NUM = 3;
87
 
88
         localparam [ST_NUM-1:0]
89
                DELAY_ST = 1,
90
                WAIT_FOR_ACK =2,
91
                HOLD_REQ =4;
92
 
93
 
94
 
95
        reg [ST_NUM-1   :       0] ps,ns;
96
 
97
 
98
 
99
 
100
 
101
 
102
 
103
        always @(*) begin
104
                ns = ps;
105
                counter_next =counter;
106
                m_rd_cyc_o=1'b0;
107
                case(ps)
108
                        DELAY_ST: begin
109
                                counter_next=counter + 1'b1;
110
                                if(counter == REQ_WAIT_CLK_NUM) begin
111
                                        ns= WAIT_FOR_ACK;
112
                                end
113
                        end
114
                        WAIT_FOR_ACK: begin
115
                                 m_rd_cyc_o=1'b1;
116
                                 counter_next= {COUNTERw{1'b0}};
117
                                 if(m_rd_ack_i)begin
118
                                        ns= HOLD_REQ;
119
                                 end
120
 
121
                        end
122
                        HOLD_REQ: begin
123
                                m_rd_cyc_o=1'b1;
124
                                counter_next=counter + 1'b1;
125
                                if(counter == REQ_LEN_CLK_NUM) begin
126
                                         counter_next= {COUNTERw{1'b0}};
127
                                         ns= DELAY_ST;
128
                                end
129
 
130
                        end
131
                        default: begin
132
 
133
                        end
134
                endcase
135
        end
136
 
137
        always @ (posedge clk or posedge reset)begin
138
                if(reset)begin
139
                        ps <= DELAY_ST;
140
                        counter<= {COUNTERw{1'b0}};
141
                end else begin
142
                        ps<=ns;
143
                        counter <= counter_next;
144
 
145
                end
146
        end
147
 
148
 
149
endmodule
150
 
151
 

powered by: WebSVN 2.1.0

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