⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 t160b3b.v

📁 memory control source code
💻 V
📖 第 1 页 / 共 2 页
字号:
        ReadData(`AddrSize'hF8000);

        #200

        oeb = `VIH;

        begin:  WriteSuspend_

          $display("EMBEDDED WRITE SUSPEND TEST");

          #200

          StartProgram(`AddrSize'h00000, `MaxOutputs'h00A5);

          #200

          oeb = `VIH;

          #200

          oeb = `VIL;

          #200

          oeb = `VIH;

          #((`AC_ProgramTime_Word_27_12/2)*`TimerPeriod_)

          Suspend;

          #200

          SetReadMode;

          #200

          ReadData(`AddrSize'h01000);

          #200

          ReadData(`AddrSize'h00F00);

          #200

          oeb = `VIH;

          #500

          Resume;  //Write Operation

          #200

          oeb = `VIL;

//          #500

          #(((`AC_ProgramTime_Word_27_12/2)*`TimerPeriod_)-2000)

          begin: Poll

            forever

              begin

                oeb = `VIH;

                #500

                oeb = `VIL;

                #500

                if (dq[7] == `VIH)

                  disable Poll;

              end

          end

          #300

          SetReadMode;

          #200

          ReadData(`AddrSize'h00000);

          #200

          oeb = `VIH;

        end  //WriteSuspend_

        #300

        Resume;  //Erase Operation

        #200

        oeb = `VIL;

        #(((`AC_EraseTime_Main_27_12/2)*`TimerPeriod_)-1000)

        begin: Poll

          forever

            begin

              oeb = `VIH;

              #1000

              oeb = `VIL;

              #1000

              if (dq[7] == `VIH)

                disable Poll;

            end

        end

        #200

        ClearCSRMode;

        #300

        SetReadMode;

        #200

        ReadData(`AddrSize'h03000);

        #200

        address = `AddrSize'hF0000;

        #200

        address = `AddrSize'h03FFF;

        #200

        address = `AddrSize'hF4000;

        #200

        oeb = `VIH;

      end  //EraseSuspend_

    $display("LOW Vpp OPERATION TEST");

        #200

        vpp =1300;

        #100

        ProgramData(`AddrSize'h33333, `MaxOutputs'h3333);

        #200

        EraseBlock(`AddrSize'hF8F00);

        #200

        vpp = 12000;

        #200

        SetReadMode;

        #200

        ReadData(`AddrSize'h33333);

        #200

        address = `AddrSize'hF8000;

        #200

        address = `AddrSize'hFFFFF;

        #200

        oeb = `VIH;

        #1000

        powerdown;

        #1000 $finish;

    end



always @(dq or address or ceb or rpb or oeb or web or wpb or vcc or vpp)

    begin

    $display(

        "%d Addr = %h, Data = %h, CEb=%b, RPb=%b, OEb=%b, WEb=%d, WPb=%b, vcc=%d, vpp = %d",

        $time, address, dq, ceb, rpb, oeb, web, wpb, vcc, vpp);

  end



task powerup;

  begin

    $display("  POWERUP TASK");

    rpb = `VIL;         //reset

    #200

    address = 0;

    #200

    web = `VIH;         //write enable high

    #200

    oeb = `VIH;         //output ts

    #200

    ceb = `VIH;         //disabled

    #200

    vcc = 3300;         //power up vcc

    #5000

    vpp = 12000;        //ramp up vpp

    #5000

    rpb = `VIH;         //out of reset

    #500

    wpb = `VIL;         //blocks locked

    #200

    oeb = `VIL;         //enable outputs

    #200

    ceb = `VIL;         //enable chip

  end

endtask





task powerdown;

  begin

    $display("  POWERDOWN TASK");

    address = 0;

    #200

    rpb = `VIL;     //reset

    #200

    oeb = `VIH;     //output ts

    #200

    web = `VIH;     //we high

    #200

    ceb = `VIH;     //disabled

    #200

    vpp = 0;        //power down vpp

    #5000

    vcc = 0;        //ramp down vcc

  end

endtask





task ReadData;

  input [`AddrSize-1:0] addr;

  begin

    $display("  READDATA TASK");

    oeb = `VIH;

    #200

    address = addr;

    #200

    oeb = `VIL;

  end

endtask



task SetReadMode;

  begin

    $display("  SETREADMODE TASK");

    oeb = `VIH;

    #200

    dq_reg = `ReadArrayCmd;

    #200

    web = `VIL;

    #200

    web = `VIH;

    #200

    dq_reg = `MaxOutputs'hz;

  end

endtask



task ReadID;

  begin

    $display("  READID TASK");

    oeb = `VIH;

    #200

    address = `AddrSize'h0;

    #200

    dq_reg = `ReadIDCmd;

    #200

    web = `VIL;

    #200

    web = `VIH;

    #200

    dq_reg = `MaxOutputs'hz;

    #200

    oeb = `VIL;

    #200

    address = `AddrSize'h1;

  end

endtask





task ReadCSRMode;

  begin

    $display("  READCSR MODE TASK");

    oeb = `VIH;

    #200

    dq_reg = `ReadCSRCmd;

    #200

    web = `VIL;

    #200

    web = `VIH;

    #200

    dq_reg = `MaxOutputs'hz;

    #200

    oeb = `VIL;

  end

endtask



task ClearCSRMode;

  begin

    $display("  CLEARCSRMODE TASK");

    oeb = `VIH;

    #200

    dq_reg = `ClearCSRCmd;

    #200

    web = `VIL;

    #200

    web = `VIH;

    #200

    dq_reg = `MaxOutputs'hz;

  end

endtask





task StartProgram;

  input [`AddrSize-1:0] addr;

  input [`MaxOutputs-1:0] data;

  begin

    $display("  STARTPROGRAM TASK");

    #200

    address = addr;

    #200

    dq_reg = `Program2Cmd;

    #200

    web = `VIL;

    #200

    web = `VIH;

    #200

    dq_reg = data;

    #200

    web = `VIL;

    #200

    web = `VIH;

    #200

    dq_reg = `MaxOutputs'hz;

  end

endtask





task ProgramData;

  input [`AddrSize-1:0] addr;

  input [`MaxOutputs-1:0] data;

  begin

    $display("  PROGRAMDATA TASK");

    StartProgram(addr, data);

    #200

    oeb = `VIL;

    #((`AC_ProgramTime_Word_27_12*`TimerPeriod_)-500)

    begin:  Poll

      forever

        begin

          oeb = `VIH;

          #200

          oeb = `VIL;

          #200

          if (dq[7] == `VIH)

            disable Poll;

        end //forever

    end //Poll

    #300

    ClearCSRMode;

    end

endtask





task StartProgram2;

  input [`AddrSize-1:0] addr;

  input [`MaxOutputs-1:0] data;

  begin

    $display("  STARTPROGRAM2 TASK");

    #200

    address = addr;

    #200

    dq_reg = `Program2Cmd;

    #200

    web = `VIL;

    #10

    ceb = `VIL;

    #200

    ceb = `VIH;

    #10

    web = `VIH;

    #200

    dq_reg = data;

    #200

    web = `VIL;

    #10

    ceb = `VIL;

    #200

    ceb = `VIH;

    #10

    web = `VIH;

    #200

    ceb = `VIL;

    dq_reg = `MaxOutputs'hz;

  end

endtask





task ProgramData2;

  input [`AddrSize-1:0] addr;

  input [`MaxOutputs-1:0] data;

  begin

    $display("  PROGRAMDATA2 TASK");

    ceb = `VIH;

    StartProgram2(addr, data);

    #200

    oeb = `VIL;

    #((`AC_ProgramTime_Word_27_12*`TimerPeriod_)-500)

    begin:  Poll

      forever

        begin

          oeb = `VIH;

          #200

          oeb = `VIL;

          #200

          if (dq[7] == `VIH)

            disable Poll;

        end //forever

    end //Poll

    #300

    ClearCSRMode;

  end

endtask





task StartErase;

  input [`AddrSize-1:0] BlockAddr;

  begin

    $display("  STARTERASE TASK");

    #200

    address = BlockAddr;

    #200

    dq_reg = `EraseBlockCmd;

    #200

    web = `VIL;

    #200

    web = `VIH;

    #200

    dq_reg = `ConfirmCmd;

    #200

    web = `VIL;

    #200

    web = `VIH;

    #200

    dq_reg = `MaxOutputs'hz;

  end

endtask





task EraseBlock;

  input [`AddrSize-1:0] BlockAddr;

  time EraseTime;

  begin

    $display("  ERASEBLOCK TASK");

    StartErase(BlockAddr);

    #200

    oeb = `VIL;

    if (BlockAddr < `AddrSize'h08000)

      EraseTime = ((`AC_EraseTime_Param_27_12*`TimerPeriod_)-5000);

    else

      EraseTime = ((`AC_EraseTime_Main_27_12*`TimerPeriod_)-5000);

    #EraseTime

    begin:  Poll

      forever

        begin

          oeb = `VIH;

          #1000

          oeb = `VIL;

          #1000

          if (dq[7] == `VIH)

            disable Poll;

        end //forever

    end //Poll

    #300

    ClearCSRMode;

  end

endtask



task Suspend;

  begin

    $display("  SUSPEND TASK");

    #200

    dq_reg = `SuspendCmd;

    #200

    web = `VIL;

    #200

    web = `VIH;

    #200

    dq_reg = `MaxOutputs'hz;

    #200

    oeb = `VIL;

    #3000

    begin:  Poll

      forever

        begin

          oeb = `VIH;

          #500

          oeb = `VIL;

          #500

          if (dq[7] == `VIH)

            disable Poll;

       end //forever

    end //Poll

    #300

    ClearCSRMode;

  end

endtask



task Resume;

  begin

    $display("  RESUME TASK");

    #200

    dq_reg = `ResumeCmd;

    #200

    web = `VIL;

    #200

    web = `VIH;

    #200

    dq_reg = `MaxOutputs'hz;

/*    #200

    oeb = `VIL;

    #(((`AC_EraseTime_Main_27_12/2)*`TimerPeriod_)-1000)

    begin:  Poll

      forever

        begin

          oeb = `VIH;

          #1000

          oeb = `VIL;

          #1000

          if (dq[7] == `VIH)

            disable Poll;

        end //forever

    end //Poll

    #300

    ClearCSRMode;

*/

  end

endtask



endmodule

    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -