Advertisement
Guest User

Untitled

a guest
Dec 18th, 2018
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module SB_SPRAM256KA(
  2.     input [13:0]      address,
  3.     input [15:0]      datain,
  4.     input [3:0]       maskwren,
  5.     input             wren,
  6.     input             chipselect,
  7.     input             clock,
  8.     input             standby,
  9.     input             sleep,
  10.     input             poweroff,
  11.     output wire [15:0] dataout
  12. );
  13.     reg [15:0] memory [14'h3FFF:0];
  14.     reg [15:0] output_buffer;
  15.  
  16.     integer i;
  17.  
  18.     // Default values
  19.     wire [13:0] address_def = (address === 14'hzzzz) ? 14'h0 : address;
  20.     wire [15:0] datain_def = (datain === 16'hzzzz) ? 16'h0 : datain;
  21.     wire [3:0] maskwren_def = (maskwren === 4'hz) ? 4'hF : maskwren;
  22.     wire wren_def = (wren === 1'bz) ? 1'b0 : wren;
  23.     wire chipselect_def = (chipselect === 1'bz) ? 1'b0 : chipselect;
  24.  
  25.     wire standby_def = (standby === 1'bz) ? 1'b0 : standby;
  26.     wire sleep_def = (sleep === 1'bz) ? 1'b0 : sleep;
  27.     wire poweroff_def = (poweroff === 1'bz) ? 1'b0 : poweroff;
  28.  
  29.     wire [15:0] mask = {
  30.         {8{maskwren_def[3]}},
  31.         {8{maskwren_def[2]}},
  32.         {8{maskwren_def[1]}},
  33.         {8{maskwren_def[0]}}
  34.     };
  35.  
  36.     assign dataout = (poweroff & !sleep) ? memory[address] : 16'hzzzz;
  37.  
  38.     always @(posedge clock) begin
  39.         if (!poweroff_def) begin
  40.             for (i = 0; i <= 14'h3FFF; i = i + 1) begin
  41.                 memory[i] = 16'hx;
  42.             end
  43.         end else if (!standby_def && chipselect_def && wren_def) begin
  44.             memory[address_def] = (memory[address_def] & ~mask) | (datain & mask);
  45.         end
  46.     end
  47. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement