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

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

?? ddr.v

?? arm控制FPGA的DDR測試代碼
?? V
?? 第 1 頁 / 共 4 頁
字號:
            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];
        A10_precharge[6] = 1'b0;

        // Bank Precharge Pipeline
        Bank_precharge[0] = Bank_precharge[1];
        Bank_precharge[1] = Bank_precharge[2];
        Bank_precharge[2] = Bank_precharge[3];
        Bank_precharge[3] = Bank_precharge[4];
        Bank_precharge[4] = Bank_precharge[5];
        Bank_precharge[5] = Bank_precharge[6];
        Bank_precharge[6] = 2'b0;

        // Command Precharge Pipeline
        Cmnd_precharge[0] = Cmnd_precharge[1];
        Cmnd_precharge[1] = Cmnd_precharge[2];
        Cmnd_precharge[2] = Cmnd_precharge[3];
        Cmnd_precharge[3] = Cmnd_precharge[4];
        Cmnd_precharge[4] = Cmnd_precharge[5];
        Cmnd_precharge[5] = Cmnd_precharge[6];
        Cmnd_precharge[6] = 1'b0;

        // Terminate a Read if same bank or all banks
        if (Cmnd_precharge[0] === 1'b1) begin
            if (Bank_precharge[0] === Bank_addr || A10_precharge[0] === 1'b1) begin
                if (Data_out_enable === 1'b1) begin
                    Data_out_enable = 1'b0;
                    read_precharge_truncation = 4'hF;
                end
            end
        end
    end
    endtask

    // Burst Terminate Pipeline
    task Burst_Terminate_Pipeline;
    begin
        // Command Precharge Pipeline
        Cmnd_bst[0] = Cmnd_bst[1];
        Cmnd_bst[1] = Cmnd_bst[2];
        Cmnd_bst[2] = Cmnd_bst[3];
        Cmnd_bst[3] = Cmnd_bst[4];
        Cmnd_bst[4] = Cmnd_bst[5];
        Cmnd_bst[5] = Cmnd_bst[6];
        Cmnd_bst[6] = 1'b0;

        // Terminate a Read regardless of banks
        if (Cmnd_bst[0] === 1'b1 && Data_out_enable === 1'b1) begin
            Data_out_enable = 1'b0;
        end
    end
    endtask

    // Dq and Dqs Drivers
    task Dq_Dqs_Drivers;
    begin
        // read command pipeline
        Read_cmnd [0] = Read_cmnd [1];
        Read_cmnd [1] = Read_cmnd [2];
        Read_cmnd [2] = Read_cmnd [3];
        Read_cmnd [3] = Read_cmnd [4];
        Read_cmnd [4] = Read_cmnd [5];
        Read_cmnd [5] = Read_cmnd [6];
        Read_cmnd [6] = 1'b0;

        // read bank pipeline
        Read_bank [0] = Read_bank [1];
        Read_bank [1] = Read_bank [2];
        Read_bank [2] = Read_bank [3];
        Read_bank [3] = Read_bank [4];
        Read_bank [4] = Read_bank [5];
        Read_bank [5] = Read_bank [6];
        Read_bank [6] = 2'b0;

        // read column pipeline
        Read_cols [0] = Read_cols [1];
        Read_cols [1] = Read_cols [2];
        Read_cols [2] = Read_cols [3];
        Read_cols [3] = Read_cols [4];
        Read_cols [4] = Read_cols [5];
        Read_cols [5] = Read_cols [6];
        Read_cols [6] = 0;

        // Initialize Read command
        if (Read_cmnd [0] === 1'b1) begin
            Data_out_enable = 1'b1;
            Bank_addr = Read_bank [0];
            Cols_addr = Read_cols [0];
            Cols_brst = Cols_addr [2 : 0];
            Burst_counter = 0;

            // Row Address Mux
            case (Bank_addr)
                2'd0    : Rows_addr = B0_row_addr;
                2'd1    : Rows_addr = B1_row_addr;
                2'd2    : Rows_addr = B2_row_addr;
                2'd3    : Rows_addr = B3_row_addr;
                default : $display ("At time %t ERROR: Invalid Bank Address", $time);
            endcase
        end

        // Toggle Dqs during Read command
        if (Data_out_enable === 1'b1) begin
            Dqs_int = 1'b0;
            if (Dqs_out === {DQS_BITS{1'b0}}) begin
                Dqs_out = {DQS_BITS{1'b1}};
            end else if (Dqs_out === {DQS_BITS{1'b1}}) begin
                Dqs_out = {DQS_BITS{1'b0}};
            end else begin
                Dqs_out = {DQS_BITS{1'b0}};
            end
        end else if (Data_out_enable === 1'b0 && Dqs_int === 1'b0) begin
            Dqs_out = {DQS_BITS{1'bz}};
        end

        // Initialize dqs for Read command
        if (Read_cmnd [2] === 1'b1) begin
            if (Data_out_enable === 1'b0) begin
                Dqs_int = 1'b1;
                Dqs_out = {DQS_BITS{1'b0}};
            end
        end

        // Read latch
        if (Data_out_enable === 1'b1) begin
            // output data
            read_mem({Bank_addr, Rows_addr, Cols_addr}, Dq_out);
            if (Debug) begin
                $display ("At time %t READ : Bank = %h, Row = %h, Col = %h, Data = %h", $time, Bank_addr, Rows_addr, Cols_addr, Dq_out);
            end
        end else begin
            Dq_out = {DQ_BITS{1'bz}};
        end
    end
    endtask

    // Write FIFO and DM Mask Logic
    task Write_FIFO_DM_Mask_Logic;
    begin
        // Write command pipeline
        Write_cmnd [0] = Write_cmnd [1];
        Write_cmnd [1] = Write_cmnd [2];
        Write_cmnd [2] = Write_cmnd [3];
        Write_cmnd [3] = 1'b0;

        // Write command pipeline
        Write_bank [0] = Write_bank [1];
        Write_bank [1] = Write_bank [2];
        Write_bank [2] = Write_bank [3];
        Write_bank [3] = 2'b0;

        // Write column pipeline
        Write_cols [0] = Write_cols [1];
        Write_cols [1] = Write_cols [2];
        Write_cols [2] = Write_cols [3];
        Write_cols [3] = {COL_BITS{1'b0}};

        // Initialize Write command
        if (Write_cmnd [0] === 1'b1) begin
            Data_in_enable = 1'b1;
            Bank_addr = Write_bank [0];
            Cols_addr = Write_cols [0];
            Cols_brst = Cols_addr [2 : 0];
            Burst_counter = 0;

            // Row address mux
            case (Bank_addr)
                2'd0    : Rows_addr = B0_row_addr;
                2'd1    : Rows_addr = B1_row_addr;
                2'd2    : Rows_addr = B2_row_addr;
                2'd3    : Rows_addr = B3_row_addr;
                default : $display ("At time %t ERROR: Invalid Row Address", $time);
            endcase
        end

        // Write data
        if (Data_in_enable === 1'b1) begin

            // Data Buffer
            read_mem({Bank_addr, Rows_addr, Cols_addr}, Dq_buf);

            // write negedge Dqs on posedge Sys_clk
            if (Sys_clk) begin
                if (!dm_fall[0]) begin
                    Dq_buf [ 7 : 0] = dq_fall [ 7 : 0];
                end
                if (!dm_fall[1]) begin
                    Dq_buf [15 : 8] = dq_fall [15 : 8];
                end
                if (~&dm_fall) begin
                    if (Debug) begin
                        $display ("At time %t WRITE: Bank = %h, Row = %h, Col = %h, Data = %h", $time, Bank_addr, Rows_addr, Cols_addr, Dq_buf[DQ_BITS-1:0]);
                    end
                end
            // write posedge Dqs on negedge Sys_clk
            end else begin
                if (!dm_rise[0]) begin
                    Dq_buf [ 7 : 0] = dq_rise [ 7 : 0];
                end
                if (!dm_rise[1]) begin
                    Dq_buf [15 : 8] = dq_rise [15 : 8];
                end
                if (~&dm_rise) begin
                    if (Debug) begin
                        $display ("At time %t WRITE: Bank = %h, Row = %h, Col = %h, Data = %h", $time, Bank_addr, Rows_addr, Cols_addr, Dq_buf[DQ_BITS-1:0]);
                    end
                end
            end

            // Write Data
            write_mem({Bank_addr, Rows_addr, Cols_addr}, Dq_buf);

            // tWR start and tWTR check
            if (Sys_clk && &dm_pair === 1'b0)  begin
                case (Bank_addr)
                    2'd0    : WR_chk0 = $time;
                    2'd1    : WR_chk1 = $time;
                    2'd2    : WR_chk2 = $time;
                    2'd3    : WR_chk3 = $time;
                    default : $display ("At time %t ERROR: Invalid Bank Address (tWR)", $time);
                endcase

                // tWTR check
                if (Read_enable === 1'b1) begin
                    $display ("At time %t ERROR: tWTR violation during Read", $time);
                end
            end
        end
    end
    endtask

    // Auto Precharge Calculation
    task Auto_Precharge_Calculation;
    begin
        // Precharge counter
        if (Read_precharge [0] === 1'b1 || Write_precharge [0] === 1'b1) begin
            Count_precharge [0] = Count_precharge [0] + 1;
        end
        if (Read_precharge [1] === 1'b1 || Write_precharge [1] === 1'b1) begin
            Count_precharge [1] = Count_precharge [1] + 1;
        end
        if (Read_precharge [2] === 1'b1 || Write_precharge [2] === 1'b1) begin
            Count_precharge [2] = Count_precharge [2] + 1;
        end
        if (Read_precharge [3] === 1'b1 || Write_precharge [3] === 1'b1) begin
            Count_precharge [3] = Count_precharge [3] + 1;
        end

        // Read with AutoPrecharge Calculation
        //      The device start internal precharge when:
        //          1.  Meet tRAS requirement
        //          2.  BL/2 cycles after command
        if ((Read_precharge[0] === 1'b1) && ($time - RAS_chk0 >= tRAS)) begin
            if (Count_precharge[0] >= burst_length/2) begin
                Pc_b0 = 1'b1;
                Act_b0 = 1'b0;
                RP_chk0 = $time;
                Read_precharge[0] = 1'b0;
            end
        end
        if ((Read_precharge[1] === 1'b1) && ($time - RAS_chk1 >= tRAS)) begin
            if (Count_precharge[1] >= burst_length/2) begin
                Pc_b1 = 1'b1;
                Act_b1 = 1'b0;
                RP_chk1 = $time;
                Read_precharge[1] = 1'b0;
            end
        end

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本在线不卡视频| 欧美群妇大交群中文字幕| 在线成人av网站| 亚洲欧美另类图片小说| 成人app在线| 2023国产精品视频| 国产乱色国产精品免费视频| 欧美在线高清视频| 亚洲特级片在线| 91免费版在线| 亚洲大片一区二区三区| 在线日韩国产精品| 日韩精品成人一区二区在线| 91精品久久久久久蜜臀| 另类小说视频一区二区| 精品少妇一区二区三区在线视频| 日本成人中文字幕| 日韩精品一区二区三区视频播放| 麻豆精品国产91久久久久久| 欧美一区二区人人喊爽| 在线视频你懂得一区二区三区| 国产不卡免费视频| 欧美一级久久久久久久大片| 午夜精品久久久久久久久久久 | 色婷婷狠狠综合| 日本人妖一区二区| 欧美高清一级片在线观看| 99国产精品久久久久久久久久久| 亚洲午夜一区二区三区| 欧美电影免费观看完整版 | 亚洲午夜私人影院| 久久亚洲捆绑美女| 欧美探花视频资源| 国v精品久久久网| 日日摸夜夜添夜夜添国产精品 | 欧美色倩网站大全免费| 国产精品99久久久久久似苏梦涵 | 国产色婷婷亚洲99精品小说| 色狠狠一区二区| 成人动漫中文字幕| 理论电影国产精品| 五月天亚洲精品| 日韩一区欧美小说| 日本一区二区综合亚洲| 欧美一卡二卡三卡| 91麻豆精品国产91久久久久久| 99天天综合性| 成人国产在线观看| 国产成人福利片| 国产成人在线免费观看| 久久国产精品99久久久久久老狼| 亚洲一卡二卡三卡四卡五卡| 中文字幕亚洲欧美在线不卡| 日韩一区二区不卡| 欧美电视剧免费全集观看| 欧美精品免费视频| 日韩欧美在线1卡| 91精品国产综合久久久久久| 在线观看欧美黄色| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 国产精品家庭影院| 亚洲欧美另类久久久精品2019| 日韩理论片一区二区| 亚洲靠逼com| 青青草精品视频| 国内久久婷婷综合| av一区二区不卡| 欧美日韩一级黄| 久久久精品免费观看| 中文字幕精品综合| 亚洲福利视频一区| 国产精品一区在线观看你懂的| 人人狠狠综合久久亚洲| 男女性色大片免费观看一区二区 | 91精品国产高清一区二区三区蜜臀| 在线播放日韩导航| 欧美国产一区二区| 亚洲图片欧美视频| 高清不卡一区二区| 欧美日韩一区二区三区不卡| 久久午夜色播影院免费高清| 中文字幕一区二区三| 日本不卡123| 91视频观看视频| 久久九九久久九九| 日本女人一区二区三区| 91电影在线观看| 中文字幕av一区二区三区免费看 | 粉嫩绯色av一区二区在线观看| 欧洲精品视频在线观看| 久久久久国产精品厨房| 日韩精彩视频在线观看| 色偷偷久久一区二区三区| xnxx国产精品| 国产综合成人久久大片91| 欧美亚洲综合网| 亚洲一级二级三级在线免费观看| 高清av一区二区| 国产精品久久综合| 国产精品一二二区| 中文字幕不卡一区| 国产一区二区三区国产| 日韩午夜激情av| 丝袜a∨在线一区二区三区不卡| 一本到三区不卡视频| 国产精品乱码一区二三区小蝌蚪| 国模少妇一区二区三区| 久久综合国产精品| 91麻豆精品国产91久久久久久久久 | 亚洲免费av观看| 蜜桃视频在线观看一区二区| 在线观看av不卡| 不卡区在线中文字幕| 91麻豆精品国产91| 亚洲自拍偷拍网站| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 91小视频在线| 欧洲日韩一区二区三区| 3atv一区二区三区| 免费成人在线观看| 337p亚洲精品色噜噜噜| 日韩高清国产一区在线| 91超碰这里只有精品国产| 视频在线观看国产精品| 欧美一级精品在线| 蜜臀精品一区二区三区在线观看| 色婷婷综合久久久中文一区二区| 亚洲视频一二区| 欧美日韩国产另类不卡| 青草av.久久免费一区| 精品欧美乱码久久久久久 | 亚洲天堂成人在线观看| 欧美性xxxxxx少妇| 国产在线视视频有精品| 中文字幕欧美激情一区| 不卡一二三区首页| 视频一区在线播放| 国产精品天美传媒| 成人动漫视频在线| 精品一区二区久久久| 久久精品一区二区三区四区| 日本高清不卡在线观看| 精品在线观看免费| 一区二区三区四区不卡在线| 精品奇米国产一区二区三区| 99re这里都是精品| 国产精品中文字幕日韩精品 | 精品一区二区三区免费| 亚洲国产人成综合网站| 国产人成一区二区三区影院| 91精品国产美女浴室洗澡无遮挡| 国产不卡免费视频| 国产自产视频一区二区三区 | 欧美色视频一区| 91免费视频网| 久久99精品国产麻豆不卡| 亚洲一区av在线| 亚洲一区视频在线| 一区二区久久久久久| 亚洲精品中文在线观看| 国产精品久久久一本精品 | 欧美日产国产精品| 精品婷婷伊人一区三区三| 麻豆精品久久精品色综合| 亚洲国产欧美另类丝袜| 91精品国产aⅴ一区二区| 这里只有精品99re| 精品久久久久久久一区二区蜜臀| 777久久久精品| 91麻豆精品国产综合久久久久久 | 亚洲成人精品一区| 日韩国产高清在线| 国产一区在线观看麻豆| 午夜伊人狠狠久久| 免费国产亚洲视频| 国产大陆精品国产| 91久久精品一区二区三| 欧美精品18+| 久久久www免费人成精品| 国产日韩精品一区二区三区| 国产精品国产a| 青草av.久久免费一区| 国产呦精品一区二区三区网站| 成人黄色a**站在线观看| 在线观看视频一区二区| 欧美猛男gaygay网站| 日韩欧美一区二区三区在线| 国产欧美日韩视频一区二区| 亚洲欧美另类在线| 紧缚奴在线一区二区三区| 暴力调教一区二区三区| 日韩一级大片在线观看| 亚洲色图视频免费播放| 蜜臀久久99精品久久久画质超高清| 粉嫩av一区二区三区粉嫩| 日韩免费高清视频| 亚洲一二三四在线| 色欲综合视频天天天| 成人免费一区二区三区视频| 免费看黄色91|