본문 바로가기
verilog

DDR_SRAM

by dbdan114 2024. 12. 31.

`include "DigitSupply.vh"

 

module DDR_SRAM #(

parameter ADDR_WIDTH = 1

parameter DATA_WIDTH = 1

)(

    inout [DATA_WIDTH - 1 : 0] inoutData,

    input [ADDR_WIDTH - 1 : 0] Address,

    input Clock,

    input Enable,

    input Read,

    input Write,

    input nClock

);

    reg [DATA_WIDTH - 1 : 0] inoutData;

    tri [ADDR_WIDTH - 1 : 0] Address;

    tri Clock;

    tri Enable;

    tri Read;

    tri Write;

    tri nClock;

 

    tri [1:0] ChargedPullDigit;

    tri [1:0] ChargedSupplyDigit;

 

    tri PosEdgeClock;

    tri NegEdgeClock;

    tri DualEdgeClock;

 

 

    tri BufferedEnable

    tri AndedOfEdgeClock_Enable;

 

    tri [$pow(2,ADDR_WIDTH) - 1:0] DecodedEnable;

    tri [$pow(2,ADDR_WIDTH) - 1:0] DecodedRead;

    tri [$pow(2,ADDR_WIDTH) - 1:0] DecodedWrite;

 

    genvar perDecoded;

    genvar perData;

   

    _pmos ChargeFor0(ChargedPullDigit[0], PullDigit[0],1`b0);

    _nmos ChargeFor1(ChargedPullDigit[1], PullDigit[1],1`b1);

 

    _pmos ChargeFor_rVss(ChargedSupplyDigit[0], SupplyDigit[0], ChargedPullDigit[0]);

    _nmos ChargeFor_rVdd(ChargedSupplyDigit[1], SupplyDigit[1], ChargedPullDigit[0] );

 

    PosEdge MakePosEdge(PosEdgeClock, 2`b10, Clock);

    PosEdge  MakeNegEdge(NegEdgeClock, 2`b10, nClock);

    or_B_to_A MakeDualEdge(DualEdgeClock,ChargedSupplyDigit, NegEdgeClock, PosEdgeClock);

 

    and_B_to_A(BufferedEnable,ChargedSupplyDigit,ChargedSupplyDigit[1], Enable);

    and_B_to_A(AndedOfEdgeClock_Enable,ChargedSupplyDigit,BufferedEnable, DualEdgeClock );

    

    DecodeAddress #(.ADDR_WIDTH( ADDR_WIDTH)) DecodeEnable(DecodedEnable,ChargedSupplyDigit,AndedOfEdgeClock_Enable, Address);

 

    generate

        for(perDecoded=0; perDecoded < $pow(2,ADDR_WIDTH);perDecoded = perDecoded + 1)

        begin:Check_ DecodedRead

            and_B_to_A DecodeRead(DecodedRead[perDecoded],ChargedSupplyDigit, DecodedEnable[perDecoded], Read);

        end

    endgenerate

    

generate

        for(perDecoded=0; perDecoded < $pow(2,ADDR_WIDTH);perDecoded = perDecoded + 1)

        begin:Check_ DecodedWrite

            and_B_to_A DecodeWrite(DecodedWrite[perDecoded],ChargedSupplyDigit,DecodedEnable[perDecoded], Write);

        end

    endgenerate

    

  generate

        for(perDecoded=0; perDecoded < $pow(2,ADDR_WIDTH);perDecoded = perDecoded + 1)

        begin:Check_perDecoded

        generate

            for(perData=0; perData< DATA_WIDTH; perData = perData + 1)

            begin:Check_perData

                D_Latch MakeSRAM(inoutData[perData],DecodedRead[perDecoded], inoutData[perData],DecodedWrite[perDecoded]);

            end

        endgenerate

        end

    endgenerate

 

endmodule

'verilog' 카테고리의 다른 글

Advanced DDR_SPS_DRAM  (0) 2025.01.12
Advanced SDR_SPS_DRAM  (0) 2025.01.11
SDR_SRAM  (0) 2024.12.31
DDR_SPS_DRAM  (1) 2024.07.24
SDR_SPS_DRAM  (1) 2024.07.24