tsuckow

rom_wb

Mar 13th, 2011
114
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module rom_wb
  2. #(
  3.     parameter data_width = 8,
  4.     parameter addr_width = 8
  5. )
  6. (
  7.     dat_i,
  8.     dat_o,
  9.     adr_i,
  10.     we_i,
  11.     sel_i,
  12.     cyc_i,
  13.     stb_i,
  14.     ack_o,
  15.     cti_i,
  16.     clk_i,
  17.     rst_i
  18. );
  19.    
  20. // wishbone signals
  21. input      [data_width-1:0] dat_i;  
  22. output     [data_width-1:0] dat_o;
  23. input      [addr_width-1:0] adr_i;
  24. input                       we_i;
  25. input      [3:0]            sel_i;
  26. input                       cyc_i;
  27. input                       stb_i;
  28. output reg                  ack_o;
  29. input      [2:0]            cti_i;
  30.  
  31. input clk_i; // clock
  32. input rst_i; // async reset
  33.  
  34. InferableROM
  35. #(
  36.     .data_width (data_width),
  37.     .addr_width (addr_width-2)
  38. )
  39. myROM
  40. (
  41.     .q_a    (dat_o),
  42.     .addr_a (adr_i[addr_width-1:2]),
  43.     .clk    (clk_i)
  44. );
  45.  
  46. // ack_o
  47. always @ (posedge clk_i or posedge rst_i)
  48. if (rst_i)
  49.     ack_o <= 1'b0;
  50. else
  51.     if (!ack_o)
  52.     begin
  53.         if (cyc_i & stb_i)
  54.             ack_o <= 1'b1;
  55.     end  
  56.     else if ((sel_i != 4'b1111) | (cti_i == 3'b000) | (cti_i == 3'b111))
  57.         ack_o <= 1'b0;
  58.          
  59. endmodule
RAW Paste Data