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

Subversion Repositories tcp_socket

[/] [tcp_socket/] [trunk/] [chips2/] [test_suite/] [arbiter.v] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 jondawson
//name : arbiter
2
//tag : c components
3
//input : input_a:16
4
//input : input_b:16
5
//output : output_z:16
6
//source_file : test.c
7
///=======
8
///
9
///*Created by C2CHIP*
10
 
11
// Register Allocation
12
// ===================
13
//         Register                 Name                   Size          
14
//            0             arbiter return address            2            
15
//            1              temporary_register             2            
16
 
17
`timescale 1ns/1ps
18
module arbiter(input_a,input_b,input_a_stb,input_b_stb,output_z_ack,clk,rst,output_z,output_z_stb,input_a_ack,input_b_ack);
19
  integer file_count;
20
  input     [15:0] input_a;
21
  input     [15:0] input_b;
22
  input     input_a_stb;
23
  input     input_b_stb;
24
  input     output_z_ack;
25
  input     clk;
26
  input     rst;
27
  output    [15:0] output_z;
28
  output    output_z_stb;
29
  output    input_a_ack;
30
  output    input_b_ack;
31
  reg       [15:0] timer;
32
  reg       [3:0] program_counter;
33
  reg       [15:0] address_2;
34
  reg       [15:0] data_out_2;
35
  reg       [15:0] data_in_2;
36
  reg       write_enable_2;
37
  reg       [15:0] address_4;
38
  reg       [31:0] data_out_4;
39
  reg       [31:0] data_in_4;
40
  reg       write_enable_4;
41
  reg       [15:0] register_0;
42
  reg       [15:0] register_1;
43
  reg       [15:0] s_output_z_stb;
44
  reg       [15:0] s_output_z;
45
  reg       [15:0] s_input_a_ack;
46
  reg       [15:0] s_input_b_ack;
47
 
48
  //////////////////////////////////////////////////////////////////////////////
49
  // FSM IMPLEMENTAION OF C PROCESS                                             
50
  //                                                                            
51
  // This section of the file contains a Finite State Machine (FSM) implementing
52
  // the C process. In general execution is sequential, but the compiler will   
53
  // attempt to execute instructions in parallel if the instruction dependencies
54
  // allow. Further concurrency can be achieved by executing multiple C         
55
  // processes concurrently within the device.                                  
56
 
57
  always @(posedge clk)
58
  begin
59
 
60
    //implement timer
61
    timer <= 16'h0000;
62
 
63
    case(program_counter)
64
 
65
      16'd0:
66
      begin
67
        program_counter <= 16'd1;
68
        program_counter <= 16'd3;
69
        register_0 <= 16'd1;
70
      end
71
 
72
      16'd1:
73
      begin
74
        program_counter <= 16'd3;
75
        program_counter <= program_counter;
76
      end
77
 
78
      16'd3:
79
      begin
80
        program_counter <= 16'd2;
81
        register_1 <= 0;
82
        register_1[0] <= input_a_stb;
83
      end
84
 
85
      16'd2:
86
      begin
87
        program_counter <= 16'd6;
88
        if (register_1 == 0)
89
          program_counter <= 4;
90
      end
91
 
92
      16'd6:
93
      begin
94
        program_counter <= 16'd7;
95
        register_1 <= input_a;
96
        program_counter <= 6;
97
        s_input_a_ack <= 1'b1;
98
       if (s_input_a_ack == 1'b1 && input_a_stb == 1'b1) begin
99
          s_input_a_ack <= 1'b0;
100
          program_counter <= 16'd7;
101
        end
102
      end
103
 
104
      16'd7:
105
      begin
106
        program_counter <= 16'd5;
107
        s_output_z <= register_1;
108
        program_counter <= 7;
109
        s_output_z_stb <= 1'b1;
110
        if (s_output_z_stb == 1'b1 && output_z_ack == 1'b1) begin
111
          s_output_z_stb <= 1'b0;
112
          program_counter <= 5;
113
        end
114
      end
115
 
116
      16'd5:
117
      begin
118
        program_counter <= 16'd4;
119
        program_counter <= 16'd4;
120
      end
121
 
122
      16'd4:
123
      begin
124
        program_counter <= 16'd12;
125
        register_1 <= 0;
126
        register_1[0] <= input_b_stb;
127
      end
128
 
129
      16'd12:
130
      begin
131
        program_counter <= 16'd13;
132
        if (register_1 == 0)
133
          program_counter <= 10;
134
      end
135
 
136
      16'd13:
137
      begin
138
        program_counter <= 16'd15;
139
        register_1 <= input_b;
140
        program_counter <= 13;
141
        s_input_b_ack <= 1'b1;
142
       if (s_input_b_ack == 1'b1 && input_b_stb == 1'b1) begin
143
          s_input_b_ack <= 1'b0;
144
          program_counter <= 16'd15;
145
        end
146
      end
147
 
148
      16'd15:
149
      begin
150
        program_counter <= 16'd14;
151
        s_output_z <= register_1;
152
        program_counter <= 15;
153
        s_output_z_stb <= 1'b1;
154
        if (s_output_z_stb == 1'b1 && output_z_ack == 1'b1) begin
155
          s_output_z_stb <= 1'b0;
156
          program_counter <= 14;
157
        end
158
      end
159
 
160
      16'd14:
161
      begin
162
        program_counter <= 16'd10;
163
        program_counter <= 16'd10;
164
      end
165
 
166
      16'd10:
167
      begin
168
        program_counter <= 16'd11;
169
        program_counter <= 16'd3;
170
      end
171
 
172
      16'd11:
173
      begin
174
        program_counter <= 16'd9;
175
        program_counter <= register_0;
176
      end
177
 
178
    endcase
179
    if (rst == 1'b1) begin
180
      program_counter <= 0;
181
      s_input_a_ack <= 0;
182
      s_input_b_ack <= 0;
183
      s_output_z_stb <= 0;
184
    end
185
  end
186
  assign input_a_ack = s_input_a_ack;
187
  assign input_b_ack = s_input_b_ack;
188
  assign output_z_stb = s_output_z_stb;
189
  assign output_z = s_output_z;
190
 
191
endmodule

powered by: WebSVN 2.1.0

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