| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- `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 DataOutWidth = 16,
- parameter DataInWidth = 16,
- parameter AddrWidth = 12
- )
- (
- input Clk_i,
- input RstN_i,
- input ForceRstN_i,
- input [DataInWidth-1:0] SmcD_i,
- input [AddrWidth-1:0] SmcA_i,
- input SmcAwe_i,
- input SmcAmsN_i,
- input SmcAoe_i,
- input SmcAre_i,
- input [1:0] SmcBe_i,
-
- output [DataOutWidth-1:0] Data_o,
- output [AddrWidth-1:0] Addr_o,
- output Val_o
- );
- //================================================================================
- // REG/WIRE
-
- reg [AddrWidth-1:0] smcAddr;
- reg [DataInWidth-1:0] smcData;
- reg val;
- reg valReg;
-
- reg smcAwe;
- reg smcAweR;
- reg smcAweRR;
-
- reg smcAmsN;
- reg smcAmsNR;
-
- wire smcAweNeg = (!smcAweRR&smcAweR);
-
-
- reg [DataOutWidth-1:0] dataOutReg;
- reg [AddrWidth-1:0] addrDataReg;
- //================================================================================
- // LOCALPARAM
- //================================================================================
- // ASSIGNMENTS
- assign Data_o = dataOutReg;
- assign Addr_o = addrDataReg;
- assign Val_o = valReg;
-
-
- //================================================================================
- // CODING
-
- always @(posedge Clk_i) begin
- if (RstN_i&ForceRstN_i) begin
- smcAmsN <= SmcAmsN_i;
- smcAmsNR <= smcAmsN;
-
- smcAwe <= SmcAwe_i;
- smcAweR <= smcAwe;
- smcAweRR <= smcAweR;
- end else begin
- smcAmsN <= 0;
- smcAmsNR <= 0;
-
- smcAwe <= 0;
- smcAweR <= 0;
- smcAweRR <= 0;
- end
- end
-
- always @(posedge Clk_i) begin
- if (RstN_i&ForceRstN_i) begin
- if (!smcAmsNR) begin
- if (smcAweNeg) begin
- smcData <= SmcD_i;
- smcAddr <= SmcA_i;
- val <= 1;
- end else begin
- val <= 0;
- end
- end
- end else begin
- smcData <= 0;
- smcAddr <= 0;
- val <= 0;
- end
- end
- always @(posedge Clk_i) begin
- if (RstN_i&ForceRstN_i) begin
- if (val) begin
- addrDataReg <= smcAddr;
- dataOutReg <= {dataOutReg[DataInWidth-1:0],smcData};
- valReg <= val;
- end else begin
- valReg <= 1'b0;
- end
- end else begin
- dataOutReg <= 0;
- addrDataReg <= 0;
- valReg <= 1'b0;
- end
- end
- endmodule
|