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

Subversion Repositories i2cgpio

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 2 to Rev 3
    Reverse comparison

Rev 2 → Rev 3

/i2cgpio/trunk/rtl/verilog/i2cgpio.v
0,0 → 1,64
// rtl program for i2c_gpio.v
 
`define P0_P9_OP 4'b1010 //0x0A
//`define P0_P3_OP 4'b1011 //0x0B
`define P0_P3_OP 4'b0111 //0x07
`define P4_P7_OP 4'b1110 //0xE0
//`define P8_P9_OP 4'b1101 //0x0D
 
module i2c_gpio(clk, cs, sr_in, sda_out, sr_out, gpio);
 
input clk,cs;
input sr_in;
output sda_out;
output sr_out;
output [7:0] gpio;
 
reg [7:0] sr;
reg [7:0] addrreg;
reg sda_out;
reg sr_out ;
reg [7:0] gpio;
reg [7:0] ram;
wire [3:0] addr;
wire [3:0] data;
 
assign addr = sr[3:0];
assign data = sr[7:4];
always@(posedge clk)
begin
if (cs == 1'b0)
begin
sr_out <= sr[7];
sr[7:1] <= sr[6:0];
sr[0] <= sr_in;
end
begin
if (addr[0] == 1'b0) // low bit zero - start bit
begin
if(addr[3:0] == 4'h0E) // 0xD is the address of the slave
begin
sda_out = 1'b1; // high bit for Acknowledge to master
if(addr[3]== 1'b1) // high bit for write
begin
case (addr[3:0]) // data[3:0] for data write
// `P0_P9_OP : gpio[7:4] <= {sr[0], sr[1], sr[2], sr[3], sr[4], sr[5], sr[6], sr[7]};
`P0_P3_OP : gpio[3:0] <= {data[0], data[1], data[2], data[3]};
`P4_P7_OP : gpio[3:0] <= {data[3], data[2], data[1], data[0]};
// `P8_P9_OP : gpio[9:8] <= {sr[0], sr[0]};
// default : gpio[7:0] <= {sr[0], sr[0], sr[0], sr[0],
// sr[0], sr[0], sr[0], sr[0]};
endcase
sda_out = 1'b1; // high bit for Acknowledge master
end
else
begin
sda_out = 1'bz;
end
end
end
end
end
endmodule
 
 

powered by: WebSVN 2.1.0

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