SmcRx.v 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. `timescale 1ns / 1ps
  2. //////////////////////////////////////////////////////////////////////////////////
  3. // Company:
  4. // Engineer:
  5. //
  6. // Create Date: 10.10.2018 01:07:38
  7. // Design Name:
  8. // Module Name: sram_ctrl2
  9. // Project Name:
  10. // Target Devices:
  11. // Tool Versions:
  12. // Description:
  13. //
  14. // Dependencies:
  15. //
  16. // Revision:
  17. // Revision 0.01 - File Created
  18. // Additional Comments:
  19. //
  20. //////////////////////////////////////////////////////////////////////////////////
  21. module SmcRx
  22. #(
  23. parameter DataInOutWidth = 16,
  24. parameter AddrWidth = 12
  25. )
  26. (
  27. input Clk_i,
  28. input Rst_i,
  29. inout [DataInOutWidth-1:0] SmcD_i,
  30. input [AddrWidth-2:0] SmcA_i,
  31. input SmcAwe_i,
  32. input SmcAmsN_i,
  33. input SmcAoe_i,
  34. input SmcAre_i,
  35. input [1:0] SmcBe_i,
  36. input [DataInOutWidth-1:0] AnsData_i,
  37. output [1:0] Be_o,
  38. output [DataInOutWidth-1:0] Data_o,
  39. output [AddrWidth-1:0] Addr_o,
  40. output Val_o
  41. );
  42. //================================================================================
  43. // REG/WIRE
  44. reg [DataInOutWidth-1:0] inDataReg;
  45. reg [AddrWidth-1:0] addrReg;
  46. reg valReg;
  47. reg [DataInOutWidth-1:0] outDataReg;
  48. reg [1:0] beReg;
  49. //================================================================================
  50. // LOCALPARAM
  51. //================================================================================
  52. // ASSIGNMENTS
  53. assign Data_o = inDataReg;
  54. assign Addr_o = addrReg;
  55. assign Val_o = valReg;
  56. assign Be_o = beReg;
  57. assign SmcD_i = (!SmcAoe_i && !SmcAre_i)? AnsData_i:16'bz;
  58. assign SmcD_i = (!SmcAoe_i && !SmcAre_i)? AnsData_i:16'bz;
  59. //================================================================================
  60. // CODING
  61. always @(posedge Clk_i) begin
  62. if (!Rst_i) begin
  63. if (!SmcAmsN_i) begin
  64. if (!SmcAwe_i) begin
  65. addrReg <= {SmcA_i,1'b0};
  66. inDataReg <= SmcD_i;
  67. valReg <= 1'b1;
  68. beReg <= SmcBe_i;
  69. end else begin
  70. valReg <= 0;
  71. end
  72. if (!SmcAoe_i) begin
  73. addrReg <= {SmcA_i,1'b0};
  74. outDataReg <= AnsData_i;
  75. end
  76. end
  77. else begin
  78. valReg <= 0;
  79. end
  80. end else begin
  81. inDataReg <= 0;
  82. outDataReg <= 0;
  83. addrReg <= 0;
  84. valReg <= 0;
  85. beReg <= 2'b0;
  86. end
  87. end
  88. endmodule