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

Subversion Repositories i2clcd

[/] [i2clcd/] [trunk/] [i2clcd/] [rtl/] [verilog/] [i2clcd.v] - Diff between revs 8 and 9

Only display areas with differences | Details | Blame | View Log

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

powered by: WebSVN 2.1.0

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