亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ddr.v

?? 256Mb_ddr 實現ddr_dimm操作
?? V
?? 第 1 頁 / 共 4 頁
字號:
/****************************************************************************************
*
*    File Name:  ddr.v
*
*****************************************************************************************/

// DO NOT CHANGE THE TIMESCALE
// MAKE SURE YOUR SIMULATOR USE "PS" RESOLUTION
`timescale 1ns / 1ps

module ddr (Clk, Clk_n, Cke, Cs_n, Ras_n, Cas_n, We_n, Ba , Addr, Dm, Dq, Dqs);
    `include "ddr_parameters.vh"

    // Port Declarations
    input                         Clk;
    input                         Clk_n;
    input                         Cke;
    input                         Cs_n;
    input                         Ras_n;
    input                         Cas_n;
    input                         We_n;
    input                 [1 : 0] Ba;
    input     [ADDR_BITS - 1 : 0] Addr;
    input       [DM_BITS - 1 : 0] Dm;
    inout       [DQ_BITS - 1 : 0] Dq;
    inout      [DQS_BITS - 1 : 0] Dqs;

    // Internal Wires (fixed width)
    wire                 [31 : 0] Dq_in;
    wire                  [3 : 0] Dqs_in;
    wire                  [3 : 0] Dm_in;
    
    assign Dq_in   [DQ_BITS - 1 : 0] = Dq;
    assign Dqs_in [DQS_BITS - 1 : 0] = Dqs;
    assign Dm_in   [DM_BITS - 1 : 0] = Dm;

    // Data pair
    reg                  [31 : 0] dq_rise;
    reg                   [3 : 0] dm_rise;
    reg                  [31 : 0] dq_fall;
    reg                   [3 : 0] dm_fall;
    reg                   [7 : 0] dm_pair;
    reg                  [31 : 0] Dq_buf;
    
    // Mode Register
    reg       [ADDR_BITS - 1 : 0] Mode_reg;

    // Internal System Clock
    reg                           CkeZ, Sys_clk;

    // Internal Dqs initialize
    reg                           Dqs_int;

    // Dqs buffer
    reg        [DQS_BITS - 1 : 0] Dqs_out;

    // Dq buffer
    reg         [DQ_BITS - 1 : 0] Dq_out;

    // Read pipeline variables
    reg                           Read_cmnd [0 : 6];
    reg                   [1 : 0] Read_bank [0 : 6];
    reg        [COL_BITS - 1 : 0] Read_cols [0 : 6];

    // Write pipeline variables
    reg                           Write_cmnd [0 : 3];
    reg                   [1 : 0] Write_bank [0 : 3];
    reg        [COL_BITS - 1 : 0] Write_cols [0 : 3];

    // Auto precharge variables
    reg                           Read_precharge  [0 : 3];
    reg                           Write_precharge [0 : 3];
    integer                       Count_precharge [0 : 3];

    // Manual precharge variables
    reg                           A10_precharge  [0 : 6];
    reg                   [1 : 0] Bank_precharge [0 : 6];
    reg                           Cmnd_precharge [0 : 6];

    // Burst terminate variables
    reg                           Cmnd_bst [0 : 6];

    // Memory Banks
`ifdef FULL_MEM
    reg         [DQ_BITS - 1 : 0] mem_array  [0 : (1<<full_mem_bits)-1];
`else
    reg         [DQ_BITS - 1 : 0] mem_array  [0 : (1<<part_mem_bits)-1];
    reg   [full_mem_bits - 1 : 0] addr_array [0 : (1<<part_mem_bits)-1];
    reg   [part_mem_bits     : 0] mem_used;
    initial mem_used = 0;
`endif

    // Dqs edge checking
    integer i;
    reg  [3 :0] expect_pos_dqs;
    reg  [3 :0] expect_neg_dqs;

    // Burst counter
    reg        [COL_BITS - 1 : 0] Burst_counter;

    // Precharge variables
    reg                           Pc_b0, Pc_b1, Pc_b2, Pc_b3;

    // Activate variables
    reg                           Act_b0, Act_b1, Act_b2, Act_b3;

    // Data IO variables
    reg                           Data_in_enable;
    reg                           Data_out_enable;

    // Internal address mux variables
    reg                   [1 : 0] Prev_bank;
    reg                   [1 : 0] Bank_addr;
    reg        [COL_BITS - 1 : 0] Cols_addr, Cols_brst, Cols_temp;
    reg       [ADDR_BITS - 1 : 0] Rows_addr;
    reg       [ADDR_BITS - 1 : 0] B0_row_addr;
    reg       [ADDR_BITS - 1 : 0] B1_row_addr;
    reg       [ADDR_BITS - 1 : 0] B2_row_addr;
    reg       [ADDR_BITS - 1 : 0] B3_row_addr;

    // DLL Reset variable
    reg                           DLL_enable;
    reg                           DLL_reset;
    reg                           DLL_done;
    integer                       DLL_count;
    integer                       aref_count;
    integer                       Prech_count;
    reg                           power_up_done;

    // Write DQS for tDSS, tDSH, tDQSH, tDQSL checks
    wire      wdqs_valid = Write_cmnd[2] || Write_cmnd[1] || Data_in_enable;

    // Commands Decode
    wire      Active_enable   = ~Cs_n & ~Ras_n &  Cas_n &  We_n;
    wire      Aref_enable     = ~Cs_n & ~Ras_n & ~Cas_n &  We_n;
    wire      Burst_term      = ~Cs_n &  Ras_n &  Cas_n & ~We_n;
    wire      Ext_mode_enable = ~Cs_n & ~Ras_n & ~Cas_n & ~We_n &  Ba[0] & ~Ba[1];
    wire      Mode_reg_enable = ~Cs_n & ~Ras_n & ~Cas_n & ~We_n & ~Ba[0] & ~Ba[1];
    wire      Prech_enable    = ~Cs_n & ~Ras_n &  Cas_n & ~We_n;
    wire      Read_enable     = ~Cs_n &  Ras_n & ~Cas_n &  We_n;
    wire      Write_enable    = ~Cs_n &  Ras_n & ~Cas_n & ~We_n;

    // Burst Length Decode
    wire [3:0] burst_length = 1 << (Mode_reg[2:0]);
    reg  [3:0] read_precharge_truncation;
    // CAS Latency Decode
    wire [2:0] cas_latency_x2 = (Mode_reg[6:4] === 3'o6) ? 5 : 2*Mode_reg[6:4];

    // DQS Buffer
    assign    Dqs = Dqs_out;

    // DQ Buffer
    assign    Dq  = Dq_out;

    // Timing Check
    time      MRD_chk;
    time      RFC_chk;
    time      RRD_chk;
    time      RAS_chk0, RAS_chk1, RAS_chk2, RAS_chk3;
    time      RAP_chk0, RAP_chk1, RAP_chk2, RAP_chk3;
    time      RC_chk0, RC_chk1, RC_chk2, RC_chk3;
    time      RCD_chk0, RCD_chk1, RCD_chk2, RCD_chk3;
    time      RP_chk0, RP_chk1, RP_chk2, RP_chk3;
    time      WR_chk0, WR_chk1, WR_chk2, WR_chk3;

    initial begin
        CkeZ = 1'b0;
        Sys_clk = 1'b0;
        {Pc_b0, Pc_b1, Pc_b2, Pc_b3} = 4'b0000;
        {Act_b0, Act_b1, Act_b2, Act_b3} = 4'b1111;
        Dqs_int = 1'b0;
        Dqs_out = {DQS_BITS{1'bz}};
        Dq_out = {DQ_BITS{1'bz}};
        Data_in_enable = 1'b0;
        Data_out_enable = 1'b0;
        DLL_enable = 1'b0;
        DLL_reset = 1'b0;
        DLL_done = 1'b0;
        DLL_count = 0;
        aref_count = 0;
        Prech_count = 0;
        power_up_done = 0;
        MRD_chk = 0;
        RFC_chk = 0;
        RRD_chk = 0;
        {RAS_chk0, RAS_chk1, RAS_chk2, RAS_chk3} = 0;
        {RAP_chk0, RAP_chk1, RAP_chk2, RAP_chk3} = 0;
        {RC_chk0, RC_chk1, RC_chk2, RC_chk3} = 0;
        {RCD_chk0, RCD_chk1, RCD_chk2, RCD_chk3} = 0;
        {RP_chk0, RP_chk1, RP_chk2, RP_chk3} = 0;
        {WR_chk0, WR_chk1, WR_chk2, WR_chk3} = 0;
        $timeformat (-9, 3, " ns", 12);
    end

    // System Clock
    always begin
        @ (posedge Clk) begin
            Sys_clk = CkeZ;
            CkeZ = Cke;
        end
        @ (negedge Clk) begin
            Sys_clk = 1'b0;
        end
    end

    // Check to make sure that we have a Deselect or NOP command on the bus when CKE is brought high
    always @(Cke) begin
        if (Cke === 1'b1) begin
            if (!((Cs_n) || (~Cs_n &  Ras_n & Cas_n &  We_n))) begin
                $display ("%m: at time %t MEMORY ERROR:  You must have a Deselect or NOP command applied", $time);
                $display ("%m:           when the Clock Enable is brought High.");
            end 
        end
    end

    // Check the initialization sequence
    initial begin
        @ (posedge Cke) begin
            @ (posedge DLL_enable) begin
                aref_count = 0;
                @ (posedge DLL_reset) begin
                    @ (Prech_count) begin
                        if (aref_count >= 2) begin
                            if (DEBUG) $display ("%m: at time %t MEMORY:  Power Up and Initialization Sequence is complete", $time);
                            power_up_done = 1;
                        end else begin
                            aref_count = 0;
                            @ (aref_count >= 2) begin
                                if (DEBUG) $display ("%m: at time %t MEMORY:  Power Up and Initialization Sequence is complete", $time);
                                power_up_done = 1;
                            end
                        end
                    end
                end
            end
        end
    end

    // Write Memory
    task write_mem;
        input [full_mem_bits - 1 : 0] addr;
        input       [DQ_BITS - 1 : 0] data;
        reg       [part_mem_bits : 0] i;
        begin
`ifdef FULL_MEM
            mem_array[addr] = data;
`else
            begin : loop
                for (i = 0; i < mem_used; i = i + 1) begin
                    if (addr_array[i] === addr) begin
                        disable loop;
                    end
                end
            end
            if (i === mem_used) begin
                if (i === (1<<part_mem_bits)) begin
                    $display ("At time %t ERROR: Memory overflow.\n  Write to Address %h with Data %h will be lost.\n  You must increase the part_mem_bits parameter or `define FULL_MEM.", $time, addr, data);
                end else begin
                    mem_used = mem_used + 1;
                    addr_array[i] = addr;
                end
            end
            mem_array[i] = data;
`endif
        end
    endtask

    // Read Memory
    task read_mem;
        input [full_mem_bits - 1 : 0] addr;
        output      [DQ_BITS - 1 : 0] data;
        reg       [part_mem_bits : 0] i;
        begin
`ifdef FULL_MEM
            data = mem_array[addr];
`else
            begin : loop
                for (i = 0; i < mem_used; i = i + 1) begin
                    if (addr_array[i] === addr) begin
                        disable loop;
                    end
                end
            end
            if (i <= mem_used) begin
                data = mem_array[i];
            end
`endif
        end
    endtask

    // Burst Decode
    task Burst_Decode;
    begin

        // Advance Burst Counter
        if (Burst_counter < burst_length) begin
            Burst_counter = Burst_counter + 1;
        end

        // Burst Type
        if (Mode_reg[3] === 1'b0) begin                         // Sequential Burst
            Cols_temp = Cols_addr + 1;
        end else if (Mode_reg[3] === 1'b1) begin                // Interleaved Burst
            Cols_temp[2] =  Burst_counter[2] ^ Cols_brst[2];
            Cols_temp[1] =  Burst_counter[1] ^ Cols_brst[1];
            Cols_temp[0] =  Burst_counter[0] ^ Cols_brst[0];
        end

        // Burst Length
        if (burst_length === 2) begin
            Cols_addr [0] = Cols_temp [0];
        end else if (burst_length === 4) begin
            Cols_addr [1 : 0] = Cols_temp [1 : 0];
        end else if (burst_length === 8) begin
            Cols_addr [2 : 0] = Cols_temp [2 : 0];
        end else begin
            Cols_addr = Cols_temp;
        end

        // Data Counter
        if (Burst_counter >= burst_length) begin
            Data_in_enable = 1'b0;
            Data_out_enable = 1'b0;
            read_precharge_truncation = 4'h0;        end
        
    end
    endtask

    // Manual Precharge Pipeline
    task Manual_Precharge_Pipeline;
    begin
        // A10 Precharge Pipeline
        A10_precharge[0] = A10_precharge[1];
        A10_precharge[1] = A10_precharge[2];
        A10_precharge[2] = A10_precharge[3];
        A10_precharge[3] = A10_precharge[4];
        A10_precharge[4] = A10_precharge[5];
        A10_precharge[5] = A10_precharge[6];

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费三级欧美电影| 中文字幕av资源一区| 国产精品美女久久久久久2018| 99国产精品一区| 婷婷综合在线观看| 国产视频一区在线播放| 91麻豆swag| 狠狠色狠狠色综合系列| 樱桃国产成人精品视频| 欧美精品一区二区三区很污很色的 | 欧美色男人天堂| 国精品**一区二区三区在线蜜桃| 奇米精品一区二区三区在线观看一 | 国产午夜精品理论片a级大结局| 91精品一区二区三区久久久久久| 成人黄色777网| 久久国产视频网| 性做久久久久久免费观看欧美| 国产欧美一区二区精品性色 | 欧美一级在线观看| eeuss鲁一区二区三区| 精品中文av资源站在线观看| 亚洲综合视频网| 亚洲三级电影网站| 欧美国产视频在线| 亚洲欧美日韩电影| 亚洲欧美在线aaa| 中文字幕av免费专区久久| 国产精品久久久久7777按摩| 国产亚洲一区二区三区| 日韩伦理av电影| 五月开心婷婷久久| 国产成人亚洲精品青草天美| 精品亚洲国产成人av制服丝袜 | 椎名由奈av一区二区三区| 亚洲国产精品影院| 亚洲资源中文字幕| 九一九一国产精品| 91国偷自产一区二区三区成为亚洲经典| 国产成人在线网站| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 91精品国产福利| 亚洲免费av网站| 狠狠狠色丁香婷婷综合激情| 欧美性欧美巨大黑白大战| 色琪琪一区二区三区亚洲区| 色婷婷综合久色| 精品福利二区三区| 亚洲一区二区成人在线观看| 国产成人精品影院| 日韩欧美高清dvd碟片| 精品久久久影院| 久久精品免视看| 日韩精品久久久久久| 理论电影国产精品| 欧美性色黄大片| 亚洲欧美在线aaa| 国产一区二区不卡在线| 懂色中文一区二区在线播放| 91首页免费视频| 久久免费视频色| 亚洲色图色小说| 床上的激情91.| 91福利精品视频| 国产精品久久二区二区| 高清成人在线观看| 日韩欧美中文字幕制服| 久久精品视频在线免费观看| 日本vs亚洲vs韩国一区三区| 91成人国产精品| 尤物视频一区二区| 91免费看片在线观看| 国产精品久久久久天堂| 成人h精品动漫一区二区三区| 国产亚洲欧美色| 国产综合成人久久大片91| 欧美成人高清电影在线| 麻豆精品国产传媒mv男同| 97精品超碰一区二区三区| 欧美高清在线精品一区| 成人精品视频一区| 国产精品国产三级国产普通话99| 国产成人自拍网| 中文字幕在线观看不卡| 色综合天天视频在线观看| 一区二区三区中文字幕| 国产美女精品人人做人人爽 | 成人av在线电影| 国产精品麻豆视频| 972aa.com艺术欧美| 亚洲人精品一区| 欧美优质美女网站| 国产欧美一区在线| 97国产一区二区| 亚洲bt欧美bt精品| 欧美videos中文字幕| 国产+成+人+亚洲欧洲自线| 亚洲视频一二区| 在线视频欧美精品| 美日韩一区二区三区| 国产日韩欧美综合一区| 99re这里只有精品首页| 天堂一区二区在线| 久久欧美一区二区| 在线观看一区不卡| 韩国精品在线观看| 亚洲精品中文在线观看| 欧美精品丝袜中出| 亚洲夂夂婷婷色拍ww47 | 久久精品亚洲一区二区三区浴池| 成人午夜视频在线观看| 一区二区三区四区亚洲| 精品久久免费看| 色综合久久中文字幕| 久久99国产精品久久99果冻传媒| 国产免费观看久久| 欧美精品在线观看一区二区| 国产iv一区二区三区| 亚洲大型综合色站| 国产精品久久久久久久久快鸭 | 国产传媒欧美日韩成人| 亚洲一区二区三区中文字幕| 久久综合久色欧美综合狠狠| 久久99热这里只有精品| 亚洲欧美日韩在线播放| 久久午夜老司机| 欧美视频精品在线观看| 成人午夜精品一区二区三区| 免费观看在线色综合| 亚洲精品久久嫩草网站秘色| 久久久天堂av| 欧美日韩成人一区| 麻豆精品视频在线观看| 亚洲小说欧美激情另类| 国产精品黄色在线观看 | 风间由美一区二区三区在线观看| 五月天视频一区| 亚洲精品亚洲人成人网| 欧美激情一区二区三区蜜桃视频| 欧美精品粉嫩高潮一区二区| 91啪在线观看| 99久久伊人网影院| 国产精品一区在线观看乱码| 1024亚洲合集| 国产精品美女一区二区三区| 2021久久国产精品不只是精品| 欧美二区在线观看| 欧美亚洲综合在线| 欧美在线视频你懂得| 色噜噜夜夜夜综合网| 99国产精品国产精品久久| 国产激情91久久精品导航| 国产资源精品在线观看| 久久国产精品区| 伦理电影国产精品| 久久99精品久久久| 国精产品一区一区三区mba视频| 久久精品国产亚洲一区二区三区| 视频精品一区二区| 日本免费新一区视频| 国产精品久久99| 中文字幕一区二区视频| 亚洲欧美一区二区三区极速播放| 一色桃子久久精品亚洲| 一区二区中文视频| 亚洲在线视频免费观看| 亚洲chinese男男1069| 日本在线播放一区二区三区| 蜜臀av性久久久久蜜臀av麻豆| 麻豆国产精品777777在线| 国产精品资源在线看| 成人免费的视频| 日本高清不卡视频| 欧美人牲a欧美精品| 日韩欧美国产午夜精品| 国产偷国产偷亚洲高清人白洁 | 欧美日韩一级黄| 欧美电影精品一区二区| 国产欧美日韩精品一区| 亚洲乱码国产乱码精品精可以看 | 久久综合色综合88| 亚洲视频一区二区在线观看| 一级精品视频在线观看宜春院 | 亚洲丰满少妇videoshd| 美女视频黄频大全不卡视频在线播放| 国精产品一区一区三区mba视频| 国产宾馆实践打屁股91| 欧美性猛片aaaaaaa做受| 精品久久久久一区二区国产| 中文字幕亚洲成人| 日本视频中文字幕一区二区三区| 国产91丝袜在线播放| 欧美午夜电影网| 久久精品亚洲精品国产欧美kt∨ | 免费高清在线一区| www.欧美精品一二区| 欧美丰满高潮xxxx喷水动漫| 欧美国产成人精品| 日日夜夜精品视频天天综合网| 国产a视频精品免费观看|