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

📄 t160b3t.v

📁 verilog 写的 memory controller
💻 V
📖 第 1 页 / 共 2 页
字号:
        #200
        oeb = `VIH;
        begin:  WriteSuspend_
          $display("EMBEDDED WRITE SUSPEND TEST");
          #200
          StartProgram(`AddrSize'hFF000, `MaxOutputs'h3800);
          #200
          oeb = `VIH;
          #200
          oeb = `VIL;
          #200
          oeb = `VIH;
          #((`AC_ProgramTime_Word_27_12/2)*`TimerPeriod_)
          Suspend;
          #200
          SetReadMode;
          #200
          ReadData(`AddrSize'hFE000);
          #200
          ReadData(`AddrSize'hFFFFF);
          #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'hFF000);
          #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'hFD000);
        #200
        address = `AddrSize'h08000;
        #200
        address = `AddrSize'hFCFFF;
        #200
        address = `AddrSize'h0A000;
        #200
        oeb = `VIH;
      end  //EraseSuspend_
    $display("LOW Vpp OPERATION TEST");
        #200
        vpp =1300;
        #100
        ProgramData(`AddrSize'h33333, `MaxOutputs'h3333);
        #200
        EraseBlock(`AddrSize'h17000);
        #200
        vpp = 12000;
        #200
        SetReadMode;
        #200
        ReadData(`AddrSize'h33333);
        #200
        address = `AddrSize'h10000;
        #200
        address = `AddrSize'h17FFF;
        #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 + -