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

Subversion Repositories tcp_socket

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

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

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