Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2019
192
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // apb_master.sv
  2. // An APB bus master unit
  3.  
  4. module apb_master #
  5. (
  6.     // parameters
  7.     parameter DATA_WIDTH = 16,
  8.     parameter ADDR_WIDTH = 16
  9.  
  10. )
  11. (
  12.     // global
  13.     input  logic                    pclk,
  14.     input  logic                    preset_n,
  15.    
  16.     // to/from cpu
  17.     svif_mem.slave                  cpu_if,
  18.    
  19.     //to slaves
  20.     output logic [ADDR_WIDTH-1:0]   paddr,
  21.     output logic                    pwrite,
  22.     output logic [DATA_WIDTH-1:0]   pwdata,
  23.     output logic                    penable,
  24.    
  25.     //from interconnect multiplexer
  26.     input  logic [DATA_WIDTH-1:0]   prdata,
  27.     input  logic                    pready,
  28.     input  logic                    pslverr
  29.    
  30. );
  31.  
  32. // as all peripherals are memory mapped, psel is used to control the multiplexer for the slave responses
  33.  
  34. enum logic[1:0] {IDLE, SETUP, ACCESS} state;
  35.  
  36. //next state logic
  37. always_ff @(posedge pclk, negedge preset_n)
  38. if(!preset_n)
  39. begin
  40.     state <= IDLE;
  41. end
  42. else
  43. begin
  44.     case(state)
  45.         IDLE:   if(cpu_if.req)
  46.                     state <= SETUP;
  47.         SETUP:  state <= ACCESS;
  48.         ACCESS: if(pready)
  49.                     if(cpu_if.req)
  50.                         state <= SETUP;
  51.                     else
  52.                         state <= IDLE;
  53.         default: state <= IDLE;
  54.     endcase
  55. end
  56.  
  57. //output logic
  58. always_comb
  59. begin
  60.     penable = 0;
  61.  
  62.     pwrite = cpu_if.write;
  63.     pwdata = cpu_if.wdata;
  64.     paddr  = cpu_if.addr;
  65.    
  66.     cpu_if.rdata = prdata;
  67.     cpu_if.done  = pready;
  68.     //pslverr is used only in simulation
  69.    
  70.     case(state)    
  71.         IDLE:   begin end
  72.         SETUP:  begin end
  73.         ACCESS: begin penable = '1; end
  74.         default: begin end
  75.        
  76.     endcase
  77. end
  78.  
  79.  
  80. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement