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

Subversion Repositories oms8051mini

[/] [oms8051mini/] [trunk/] [rtl/] [spi/] [spi_cfg.v] - Diff between revs 2 and 11

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 2 Rev 11
Line 97... Line 97...
// Reg Bus Interface Signal
// Reg Bus Interface Signal
//---------------------------------
//---------------------------------
input             reg_cs         ;
input             reg_cs         ;
input             reg_wr         ;
input             reg_wr         ;
input [3:0]       reg_addr       ;
input [3:0]       reg_addr       ;
input [31:0]      reg_wdata      ;
input [7:0]       reg_wdata      ;
input [3:0]       reg_be         ;
input             reg_be         ;
 
 
// Outputs
// Outputs
output [31:0]     reg_rdata      ;
output [7:0]      reg_rdata      ;
output            reg_ack        ;
output            reg_ack        ;
 
 
 
 
 
 
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
Line 113... Line 113...
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
 
 
wire           sw_rd_en;
wire           sw_rd_en;
wire           sw_wr_en;
wire           sw_wr_en;
wire  [3:0]    sw_addr ; // addressing 16 registers
wire  [3:0]    sw_addr ; // addressing 16 registers
wire  [3:0]    wr_be   ;
wire           wr_be   ;
 
 
reg   [31:0]  reg_rdata      ;
reg   [7:0]   reg_rdata;
reg           reg_ack     ;
reg           reg_ack     ;
 
 
wire [31:0]    reg_0;  // Software_Reg_0
wire [31:0]   spi_ctrl; // Software-Reg_12
wire [31:0]    reg_1;  // Software-Reg_1
wire [7:0]    reg_12; // Software-Reg_12
wire [31:0]    reg_2;  // Software-Reg_2
wire [7:0]    reg_13; // Software-Reg_13
wire [31:0]    reg_3;  // Software-Reg_3
wire [7:0]    reg_14; // Software-Reg_14
wire [31:0]    reg_4;  // Software-Reg_4
wire [7:0]    reg_15; // Software-Reg_15
wire [31:0]    reg_5;  // Software-Reg_5
reg  [7:0]    reg_out;
wire [31:0]    reg_6;  // Software-Reg_6
 
wire [31:0]    reg_7;  // Software-Reg_7
 
wire [31:0]    reg_8;  // Software-Reg_8
 
wire [31:0]    reg_9;  // Software-Reg_9
 
wire [31:0]    reg_10; // Software-Reg_10
 
wire [31:0]    reg_11; // Software-Reg_11
 
wire [31:0]    reg_12; // Software-Reg_12
 
wire [31:0]    reg_13; // Software-Reg_13
 
wire [31:0]    reg_14; // Software-Reg_14
 
wire [31:0]    reg_15; // Software-Reg_15
 
reg  [31:0]    reg_out;
 
 
 
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// Main code starts here
// Main code starts here
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
 
 
Line 157... Line 146...
 
 
always @ (posedge mclk or negedge reset_n)
always @ (posedge mclk or negedge reset_n)
begin : preg_out_Seq
begin : preg_out_Seq
   if (reset_n == 1'b0)
   if (reset_n == 1'b0)
   begin
   begin
      reg_rdata [31:0]  <= 32'h0000_0000;
      reg_rdata [7:0]  <= 8'h00;
      reg_ack           <= 1'b0;
      reg_ack           <= 1'b0;
   end
   end
   else if (sw_rd_en && !reg_ack)
   else if (sw_rd_en && !reg_ack)
   begin
   begin
      reg_rdata [31:0]  <= reg_out [31:0];
      reg_rdata [7:0]  <= reg_out [7:0];
      reg_ack           <= 1'b1;
      reg_ack           <= 1'b1;
   end
   end
   else if (sw_wr_en && !reg_ack)
   else if (sw_wr_en && !reg_ack)
      reg_ack           <= 1'b1;
      reg_ack           <= 1'b1;
   else
   else
Line 214... Line 203...
 
 
 
 
always @( *)
always @( *)
begin : preg_sel_Com
begin : preg_sel_Com
 
 
  reg_out [31:0] = 32'd0;
  reg_out [7:0] = 8'd0;
 
 
  case (sw_addr [3:0])
  case (sw_addr [3:0])
    4'b0000 : reg_out [31:0] = reg_0 [31:0];
    4'b0000 : reg_out [7:0] = spi_ctrl [7:0];
    4'b0001 : reg_out [31:0] = reg_1 [31:0];
    4'b0001 : reg_out [7:0] = spi_ctrl [15:8];
    4'b0010 : reg_out [31:0] = reg_2 [31:0];
    4'b0010 : reg_out [7:0] = spi_ctrl [23:16];
    4'b0011 : reg_out [31:0] = reg_3 [31:0];
    4'b0011 : reg_out [7:0] = spi_ctrl [31:24];
    4'b0100 : reg_out [31:0] = reg_4 [31:0];
    4'b0100 : reg_out [7:0] = cfg_datain [7:0];
    4'b0101 : reg_out [31:0] = reg_5 [31:0];
    4'b0101 : reg_out [7:0] = cfg_datain [15:8];
    4'b0110 : reg_out [31:0] = reg_6 [31:0];
    4'b0110 : reg_out [7:0] = cfg_datain [23:16];
    4'b0111 : reg_out [31:0] = reg_7 [31:0];
    4'b0111 : reg_out [7:0] = cfg_datain [31:24];
    4'b1000 : reg_out [31:0] = reg_8 [31:0];
    4'b1000 : reg_out [7:0] = cfg_dataout [7:0];
    4'b1001 : reg_out [31:0] = reg_9 [31:0];
    4'b1001 : reg_out [7:0] = cfg_dataout [15:8];
    4'b1010 : reg_out [31:0] = reg_10 [31:0];
    4'b1010 : reg_out [7:0] = cfg_dataout [23:16];
    4'b1011 : reg_out [31:0] = reg_11 [31:0];
    4'b1011 : reg_out [7:0] = cfg_dataout [31:24];
    4'b1100 : reg_out [31:0] = reg_12 [31:0];
    4'b1100 : reg_out [7:0] = reg_12 [7:0];
    4'b1101 : reg_out [31:0] = reg_13 [31:0];
    4'b1101 : reg_out [7:0] = reg_13 [7:0];
    4'b1110 : reg_out [31:0] = reg_14 [31:0];
    4'b1110 : reg_out [7:0] = reg_14 [7:0];
    4'b1111 : reg_out [31:0] = reg_15 [31:0];
    4'b1111 : reg_out [7:0] = reg_15 [7:0];
  endcase
  endcase
end
end
 
 
 
 
 
 
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// Individual register assignments
// Individual register assignments
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// Logic for Register 0 : SPI Control Register
// Logic for Register 0 : SPI Control Register
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
wire         cfg_op_req         = reg_0[31];    // cpu request
wire         cfg_op_req         = spi_ctrl[31];    // cpu request
wire [1:0]   cfg_tgt_sel        = reg_0[24:23]; // target chip select
wire [1:0]   cfg_tgt_sel        = spi_ctrl[24:23]; // target chip select
wire [1:0]   cfg_op_type        = reg_0[22:21]; // SPI operation type
wire [1:0]   cfg_op_type        = spi_ctrl[22:21]; // SPI operation type
wire [1:0]   cfg_transfer_size  = reg_0[20:19]; // SPI transfer size
wire [1:0]   cfg_transfer_size  = spi_ctrl[20:19]; // SPI transfer size
wire [5:0]   cfg_sck_period     = reg_0[18:13]; // sck clock period
wire [5:0]   cfg_sck_period     = spi_ctrl[18:13]; // sck clock period
wire [4:0]   cfg_sck_cs_period  = reg_0[12:8];  // cs setup/hold period
wire [4:0]   cfg_sck_cs_period  = spi_ctrl[12:8];  // cs setup/hold period
wire [7:0]   cfg_cs_byte        = reg_0[7:0];   // cs bit information
wire [7:0]   cfg_cs_byte        = spi_ctrl[7:0];   // cs bit information
 
 
 
 
generic_register #(8,0  ) u_spi_ctrl_be0 (
generic_register #(8,0  ) u_spi_ctrl_be0 (
              .we            ({8{sw_wr_en_0 &
              .we            ({8{sw_wr_en_0 & wr_be   }}  ),
                                 wr_be[0]   }}  ),
 
              .data_in       (reg_wdata[7:0]    ),
              .data_in       (reg_wdata[7:0]    ),
              .reset_n       (reset_n           ),
              .reset_n       (reset_n           ),
              .clk           (mclk              ),
              .clk           (mclk              ),
 
 
              //List of Outs
              //List of Outs
              .data_out      (reg_0[7:0]        )
              .data_out      (spi_ctrl[7:0]     )
          );
          );
 
 
generic_register #(8,0  ) u_spi_ctrl_be1 (
generic_register #(8,0  ) u_spi_ctrl_be1 (
              .we            ({8{sw_wr_en_0 &
              .we            ({8{sw_wr_en_1 & wr_be   }}   ),
                                wr_be[1]   }}  ),
              .data_in       (reg_wdata[7:0]    ),
              .data_in       (reg_wdata[15:8]  ),
 
              .reset_n       (reset_n           ),
              .reset_n       (reset_n           ),
              .clk           (mclk              ),
              .clk           (mclk              ),
 
 
              //List of Outs
              //List of Outs
              .data_out      (reg_0[15:8]       )
              .data_out      (spi_ctrl[15:8]    )
          );
          );
 
 
generic_register #(8,0  ) u_spi_ctrl_be2 (
generic_register #(8,0  ) u_spi_ctrl_be2 (
              .we            ({8{sw_wr_en_0 &
              .we            ({8{sw_wr_en_2 & wr_be}}  ),
                                wr_be[2]   }}  ),
              .data_in       (reg_wdata[7:0]    ),
              .data_in       (reg_wdata[23:16] ),
 
              .reset_n       (reset_n           ),
              .reset_n       (reset_n           ),
              .clk           (mclk              ),
              .clk           (mclk              ),
 
 
              //List of Outs
              //List of Outs
              .data_out      (reg_0[23:16]       )
              .data_out      (spi_ctrl[23:16]   )
          );
          );
 
 
assign reg_0[30:24] = 7'h0;
assign spi_ctrl[30:24] = 7'h0;
 
 
req_register #(0  ) u_spi_ctrl_req (
req_register #(0  ) u_spi_ctrl_req (
              .cpu_we       ({sw_wr_en_0 &
              .cpu_we       ({sw_wr_en_3 & wr_be}),
                             wr_be[3]   }       ),
              .cpu_req      (reg_wdata[7]       ),
              .cpu_req      (reg_wdata[31]      ),
 
              .hware_ack    (hware_op_done      ),
              .hware_ack    (hware_op_done      ),
              .reset_n       (reset_n           ),
              .reset_n       (reset_n           ),
              .clk           (mclk              ),
              .clk           (mclk              ),
 
 
              //List of Outs
              //List of Outs
              .data_out      (reg_0[31]         )
              .data_out      (spi_ctrl[31]      )
          );
          );
 
 
 
 
 
 
 
 
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// Logic for Register 1 : SPI Data In Register
// Logic for Register 1 : SPI Data In Register
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
wire [31:0]   cfg_datain        = reg_1[31:0];
 
 
 
generic_register #(8,0  ) u_spi_din_be0 (
generic_register #(8,0  ) u_spi_din_be0 (
              .we            ({8{sw_wr_en_1 &
              .we            ({8{sw_wr_en_4 & wr_be   }}  ),
                                wr_be[0]   }}  ),
 
              .data_in       (reg_wdata[7:0]    ),
              .data_in       (reg_wdata[7:0]    ),
              .reset_n       (reset_n           ),
              .reset_n       (reset_n           ),
              .clk           (mclk              ),
              .clk           (mclk              ),
 
 
              //List of Outs
              //List of Outs
              .data_out      (reg_1[7:0]        )
              .data_out      (cfg_datain[7:0]   )
          );
          );
 
 
generic_register #(8,0  ) u_spi_din_be1 (
generic_register #(8,0  ) u_spi_din_be1 (
              .we            ({8{sw_wr_en_1 &
              .we            ({8{sw_wr_en_5 & wr_be   }}  ),
                                wr_be[1]   }}  ),
              .data_in       (reg_wdata[7:0]    ),
              .data_in       (reg_wdata[15:8]   ),
 
              .reset_n       (reset_n           ),
              .reset_n       (reset_n           ),
              .clk           (mclk              ),
              .clk           (mclk              ),
 
 
              //List of Outs
              //List of Outs
              .data_out      (reg_1[15:8]       )
              .data_out      (cfg_datain[15:8]  )
          );
          );
 
 
generic_register #(8,0  ) u_spi_din_be2 (
generic_register #(8,0  ) u_spi_din_be2 (
              .we            ({8{sw_wr_en_1 &
              .we            ({8{sw_wr_en_6 & wr_be   }}  ),
                                wr_be[2]   }}  ),
              .data_in       (reg_wdata[7:0]    ),
              .data_in       (reg_wdata[23:16]  ),
 
              .reset_n       (reset_n           ),
              .reset_n       (reset_n           ),
              .clk           (mclk              ),
              .clk           (mclk              ),
 
 
              //List of Outs
              //List of Outs
              .data_out      (reg_1[23:16]      )
              .data_out      (cfg_datain[23:16] )
          );
          );
 
 
 
 
generic_register #(8,0  ) u_spi_din_be3 (
generic_register #(8,0  ) u_spi_din_be3 (
              .we            ({8{sw_wr_en_1 &
              .we            ({8{sw_wr_en_7 & wr_be   }}  ),
                                wr_be[3]   }}  ),
              .data_in       (reg_wdata[7:0]    ),
              .data_in       (reg_wdata[31:24]  ),
 
              .reset_n       (reset_n           ),
              .reset_n       (reset_n           ),
              .clk           (mclk              ),
              .clk           (mclk              ),
 
 
              //List of Outs
              //List of Outs
              .data_out      (reg_1[31:24]      )
              .data_out      (cfg_datain[31:24] )
          );
          );
 
 
 
 
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// Logic for Register 2 : SPI Data output Register
// Logic for Register  : SPI Data output Register
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
assign  reg_2 = cfg_dataout;
assign  reg_2 = cfg_dataout;
 
 
 
 
 
 

powered by: WebSVN 2.1.0

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