| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- `timescale 1ns / 1ps
- //////////////////////////////////////////////////////////////////////////////////
- // Company:
- // Engineer:
- //
- // Create Date: 10.10.2018 01:07:38
- // Design Name:
- // Module Name: sram_ctrl2
- // Project Name:
- // Target Devices:
- // Tool Versions:
- // Description:
- //
- // Dependencies:
- //
- // Revision:
- // Revision 0.01 - File Created
- // Additional Comments:
- //
- //////////////////////////////////////////////////////////////////////////////////
- module SmcRx
- #(
- parameter DataInOutWidth = 16,
- parameter AddrWidth = 12
- )
- (
- input Clk_i,
- input Rst_i,
- inout [DataInOutWidth-1:0] SmcD_i,
- input [AddrWidth-2:0] SmcA_i,
- input SmcAwe_i,
- input SmcAmsN_i,
- input SmcAoe_i,
- input SmcAre_i,
- input [1:0] SmcBe_i,
-
- input [DataInOutWidth-1:0] AnsData_i,
-
- output [DataInOutWidth-1:0] Data_o,
- output [AddrWidth-1:0] Addr_o,
- output Val_o
- );
- //================================================================================
- // REG/WIRE
-
-
- reg [DataInOutWidth-1:0] inDataReg;
- reg [AddrWidth-1:0] addrReg;
- reg valReg;
-
- reg [DataInOutWidth-1:0] outDataReg;
- //================================================================================
- // LOCALPARAM
- //================================================================================
- // ASSIGNMENTS
- assign Data_o = inDataReg;
- assign Addr_o = addrReg;
- assign Val_o = valReg;
-
- assign SmcD_i = (!SmcAoe_i && !SmcAre_i)? AnsData_i:16'bz;
- //================================================================================
- // CODING
-
- always @(posedge Clk_i) begin
- if (!Rst_i) begin
- if (!SmcAmsN_i) begin
- if (!SmcAwe_i) begin
- addrReg <= {SmcA_i,1'b0};
- inDataReg <= SmcD_i;
- valReg <= 1'b1;
- end else begin
- valReg <= 0;
- end
-
- if (!SmcAoe_i) begin
- addrReg <= {SmcA_i,1'b0};
- outDataReg <= AnsData_i;
- end
- end
- else begin
- valReg <= 0;
- end
- end else begin
- inDataReg <= 0;
- outDataReg <= 0;
- addrReg <= 0;
- valReg <= 0;
- end
- end
- endmodule
|