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

Subversion Repositories i2c_master_slave_core

[/] [i2c_master_slave_core/] [trunk/] [i2c_master_slave_core/] [verilog/] [rtl/] [i2c_blk.v] - Blame information for rev 6

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 toomuch
//////////////////////////////////////////////////////////////////////////////////////////
2
//Design Engineer:      Ravi Gupta                                                      //
3
//Company Name   :      Toomuch Semiconductor   
4
//Email          :      ravi1.gupta@toomuchsemi.com                                     //
5
//                                                                                      //
6
//                                                                                      //      
7
//Purpose        :      This module will simply interconnect controller interface       //                                                                                                                                                          //                                  
8
//                      controller_interface with ms_core.                              //
9
//                                                                                      //              
10
//                                                                                      //
11
//Date           :      11-12-07                                                        //
12
//                                                                                      //
13
//                                                                                      //
14
//                                                                                      //
15
//                                                                                      //
16
//                                                                                      //
17
//                                                                                      //                                                              
18
//                                                                                      //
19
//////////////////////////////////////////////////////////////////////////////////////////
20
/*// synopsys translate_off
21
`include "oc8051_timescale.v"
22
// synopsys translate_on
23
 
24
`include "oc8051_defines.v"*/
25
 
26
 
27
module block(scl_oe,scl_in,scl_o,sda_oe,sda_in,sda_o,wb_add_i,wb_data_i,wb_data_o,wb_we_i,wb_stb_i,wb_cyc_i,irq,trans_comp,wb_clk_i,wb_rst_i,wb_ack_o);
28
 
29
//inout scl;                            //Bi-directional lines to follow i2c protocol for data transfer.
30
input sda_in;                           //sda input
31
output sda_oe;                          //control line for bidirectional buffer
32
output sda_o;                           //input line for bi_firectional buffer
33
input scl_in;
34
output  scl_o;
35
output scl_oe;
36
input [7:0]wb_data_i;                    //Bi-direction buses for transfering data to/from processor.
37
input [7:0]wb_add_i;                     //Transfer the addresses of intenal registers.
38
input wb_we_i;                          //signal from processor to indicate whether its a read or write cycle.
39
input wb_stb_i;                         //when asserted indicates address is valid.
40
input wb_cyc_i;                         //when asserted indicates data is valid.
41
output irq;                             //interupt signal to processor.
42
input wb_clk_i;                         //system clock.
43
input wb_rst_i;                         //asynchrnous reset active high.
44
inout trans_comp;                       //temprory signal for testing the core 
45
output [7:0]wb_data_o;
46
output wb_ack_o;
47
 
48
//declaratiion of internal signals
49
//////////////////////////////////
50
 
51
  //   control register
52
  wire [7:0] slave_add;                          //   I2C address
53
  wire arb_lost;                                //   indicates that arbitration for the i2c bus is lost
54
  wire bus_busy;                                //   indicates the i2c bus is busy
55
  wire [7:0] i2c_up;                             //   i2c data register
56
  wire [7:0] data;                               //   uC data register
57
  wire core_en;                                 //   i2c enable - used as i2c reset
58
  wire inter_en;                                //   interrupt enable
59
  wire inter;                                   //   interrupt pending
60
  wire mode;                                    //   i2c master/slave select
61
  wire master_rw;                               //   master read/write
62
  wire rep_start;                               //   generate a repeated start
63
  wire ack_rec;                                 //   value of received acknowledge
64
  wire slave_rw;                                //   slave read/write
65
  wire ack;                                     //   value of acknowledge to be transmitted
66
  wire byte_trans;                              //   indicates that one byte of data is being transferred
67
  wire slave_addressed;                         //   address of core matches with address transferred
68
  wire time_out;                                        //   max low period for SCL has excedded
69
  wire [7:0]time_out_reg;                        //   programmable max time for SCL low period
70
  wire [7:0]prescale;
71
  wire inter_rst;
72
  wire [7:0]wb_data_o;
73
  wire halt;
74
  wire data_en;
75
  wire time_rst;
76
  reg wb_ack_o;
77
  wire rst;
78
 
79
assign trans_comp = byte_trans;
80
 
81
always@(posedge wb_clk_i)
82
begin
83
        wb_ack_o <= #1 wb_stb_i & wb_cyc_i & ~wb_ack_o;
84
end
85
 
86
//port map for i2c controller 
87
////////////////////////////
88
 
89
core i2c_core
90
 
91
        (
92
                .clk(wb_clk_i),
93
                .rst(core_en),
94
                .sda_oe(sda_oe),
95
                .sda_in(sda_in),
96
                .sda_o(sda_o),
97
                .scl_oe(scl_oe),
98
                .scl_o(scl_o),
99
                .scl_in(scl_in),
100
                .ack(ack),
101
                .mode(mode),
102
                .rep_start(rep_start),
103
                .master_rw(master_rw),
104
                .data_in(data[7:0]),
105
                .slave_add(slave_add[7:0]),
106
                .bus_busy(bus_busy),
107
                .byte_trans(byte_trans),
108
                .slave_addressed(slave_addressed),
109
                .arb_lost(arb_lost),
110
                .slave_rw(slave_rw),
111
                .time_out(time_out),
112
                .inter(inter),
113
                .ack_rec(ack_rec),
114
                .i2c_up(i2c_up[7:0]),
115
                .time_out_reg(time_out_reg[7:0]),
116
                .prescale_reg(prescale[7:0]),
117
                .inter_en(inter_en),
118
                .inter_rst(inter_rst),
119
                .data_en(data_en),
120
                .halt_rst(halt),
121
                .h_rst(wb_rst_i),
122
                .time_rst(time_rst));
123
 
124
 
125
//port map for controller interface
126
///////////////////////////////////     
127
 
128
processor_interface processor_interface
129
 
130
        (
131
                .clk(wb_clk_i),
132
                .rst(wb_rst_i),
133
                .add_bus(wb_add_i[7:0]),
134
                .data_in(wb_data_i[7:0]),
135
                .as(wb_stb_i),
136
                .ds(wb_cyc_i),
137
                .rw(wb_we_i),
138
                .bus_busy(bus_busy),
139
                .byte_trans(byte_trans),
140
                .slave_addressed(slave_addressed),
141
                .arb_lost(arb_lost),
142
                .slave_rw(slave_rw),
143
                .inter(inter),
144
                .ack_rec(ack_rec),
145
                .core_en(core_en),
146
                .inter_en(inter_en),
147
                .mode(mode),
148
                .master_rw(master_rw),
149
                .ack(ack),
150
                .rep_start(rep_start),
151
                .data(data[7:0]),
152
                .i2c_data(i2c_up[7:0]),
153
                .slave_add(slave_add),
154
                .time_out_reg(time_out_reg[7:0]),
155
                .prescale(prescale[7:0]),
156
                .irq(irq),
157
                .time_out(time_out),
158
                .inter_rst(inter_rst),
159
                .halt(halt),
160
                .data_en(data_en),
161
                .time_rst(time_rst),
162
                .data_out(wb_data_o));
163
 
164
//always@(scl or sda)
165
//$display($time,"scl=%b\tsda=%b\t\n",scl,sda);
166
 
167
 
168
endmodule
169
 
170
 
171
 
172
 

powered by: WebSVN 2.1.0

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