PowRstMemWrapper.sv 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. module PowRstMemWrapper #(
  2. parameter AXI_DATA_WIDTH = 64,
  3. parameter RST_MEM_BASE_ADDR = 64'h1000
  4. )
  5. (
  6. input Clk_i,
  7. input Rst_i,
  8. input [AXI_DATA_WIDTH-1:0] WrData_i,
  9. input [AXI_DATA_WIDTH-1:0] WrAddr_i,
  10. input Val_i,
  11. input RdReq_i,
  12. output [AXI_DATA_WIDTH-1:0] Data_o,
  13. output reg DataVal_o
  14. );
  15. wire [5:0] addrA;
  16. wire [5:0] addrB;
  17. wire weA;
  18. wire reB;
  19. wire wrReq = (Val_i&(WrAddr_i==RST_MEM_BASE_ADDR));
  20. MemCtrl MemCtrl
  21. (
  22. .Clk_i(Clk_i),
  23. .Rst_i(Rst_i),
  24. .WrReq_i(wrReq),
  25. .RdReq_i(RdReq_i),
  26. .AddrA_o(addrA),
  27. .WeA_o(weA),
  28. .AddrB_o(addrB),
  29. .ReB_o(reB)
  30. );
  31. PowRstCmdMem PowRstMem
  32. (
  33. .clka(Clk_i), // input wire clka
  34. .ena(1'b1), // input wire ena
  35. .wea(weA), // input wire [0 : 0] wea
  36. .addra(addrA), // input wire [5 : 0] addra
  37. .dina(WrData_i), // input wire [31 : 0] dina
  38. .clkb(Clk_i), // input wire clkb
  39. .enb(reB), // input wire enb
  40. .addrb(addrB), // input wire [5 : 0] addrb
  41. .doutb(Data_o) // output wire [31 : 0] doutb
  42. );
  43. always @(posedge Clk_i) begin
  44. if (Rst_i) begin
  45. DataVal_o <= 0;
  46. end else begin
  47. DataVal_o <= reB;
  48. end
  49. end
  50. endmodule