Advertisement
Guest User

Untitled

a guest
Apr 8th, 2014
40
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module wb_ram
  2.   #(//Wishbone parameters
  3.     parameter dw    = 32,
  4.  
  5.     //Memory parameters
  6.     parameter depth = 256,
  7.     parameter aw    = $clog2(depth))
  8.    (input           wb_clk_i,
  9.     input           wb_rst_i,
  10.  
  11.     input  [aw-1:0] wb_adr_i,
  12.     input  [dw-1:0] wb_dat_i,
  13.     input     [3:0] wb_sel_i,
  14.     input           wb_we_i,
  15.     input     [1:0] wb_bte_i,
  16.     input     [2:0] wb_cti_i,
  17.     input           wb_cyc_i,
  18.     input           wb_stb_i,
  19.  
  20.     output reg      wb_ack_o,
  21.     output          wb_err_o,
  22.     output [dw-1:0] wb_dat_o);
  23.  
  24. reg  [aw-1:0] adr_r;
  25. wire [aw-1:0] next_adr;
  26.  
  27. wire valid = wb_cyc_i & wb_stb_i;
  28.  
  29. reg valid_r;
  30.  
  31. wire new_cycle = valid  & !valid_r;
  32.  
  33. wb_next_adr #(.aw(aw)) wb_next_adr0(adr_r, wb_cti_i, wb_bte_i, next_adr);
  34.  
  35. wire [aw-1:0] adr = new_cycle ? wb_adr_i : next_adr;
  36.  
  37.  
  38. always@(posedge wb_clk_i) begin
  39.   adr_r <= adr;
  40.   valid_r <= valid;
  41.  
  42.   //Ack generation
  43.   wb_ack_o <= valid & (!((wb_cti_i == 3'b000) | (wb_cti_i == 3'b111)) | !wb_ack_o);
  44. end
  45.  
  46. wire ram_we = wb_we_i & valid & wb_ack_o;
  47.  
  48. //TODO: Check for burst address errors
  49. assign wb_err_o =  1'b0;
  50.  
  51. wb_ram_generic
  52.   #(.aw (aw),
  53.      .depth(depth))
  54. ram0
  55.   (.clk (wb_clk_i),
  56.    .we  ({4{ram_we}} & wb_sel_i),
  57.    .din (wb_dat_i),
  58.     //.addr(new_cycle ? wb_adr_i : ram_we ? adr : next_adr),
  59.     .addr(ram_we ? adr_r : adr),   
  60.    .dout (wb_dat_o));
  61.  
  62. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement