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

📄 mt48lc4m32b2.v

📁 mt48lc4m32b2.v 是128M sdram 中典型设计。。可以借鉴。
💻 V
📖 第 1 页 / 共 5 页
字号:
                        begin                            $display ("precharge command does not meet tRAS");                            $display ("time", $time);                        end                        statebank[bank] = precharge;                        statebank[bank] <= #tdevice_TRP idle;                    end                    else if (command == nop || command == bst                        || cur_bank != bank)                    begin                    end                    else if (command == rd)                    begin                        if (rcdt_out[bank])                        begin                            $display ("read command received too soon");                            $display ("after active",$time);                        end                        if (A[10] == 1'bx)                        begin                            $display ("A(10) = X during read command.");                            $display ("Next state unknown.");                        end                        MemAddr[bank][7:0] = 8'b0;// clr old addr                        // latch col addr                        if (Burst_Bits == 0)                            MemAddr[bank][7:0] = A[7:0];                        if (Burst_Bits == 1)                            MemAddr[bank][7:1] = A[7:1];                        if (Burst_Bits == 2)                            MemAddr[bank][7:2] = A[7:2];                        if (Burst_Bits == 3)                            MemAddr[bank][7:3] = A[7:3];                        if (Burst_Bits == 7)                            MemAddr[bank][7:7] = A[7:7];                        BurstIncProc(bank);                        StartAddr[bank] = BurstInc[bank] % 8;                        BaseLoc[bank] = MemAddr[bank];                        Loc = 4*(BaseLoc[bank] + BurstInc[bank]);                        generate_out(DataDrive,bank);                        BurstCnt[bank] = 1;                        NextStateAuto(bank, read);                        bank_tmp = bank;                    end                    else if (command == writ)                    begin                        if (rcdt_out[bank])                        begin                            $display ("write command received too soon");                            $display ("after active",$time);                        end                        if (A[10] == 1'bx)                        begin                            $display ("A(10) = X during write command.");                            $display ("Next state unknown.");                        end                        MemAddr[bank][7:0] = 8'b0; // clr old addr                        BurstIncProc(bank);                        // latch col addr                        if (Burst_Bits == 0)                            MemAddr[bank][7:0] = A[7:0];                        if (Burst_Bits == 1)                            MemAddr[bank][7:1] = A[7:1];                        if (Burst_Bits == 2)                            MemAddr[bank][7:2] = A[7:2];                        if (Burst_Bits == 3)                            MemAddr[bank][7:3] = A[7:3];                        if (Burst_Bits == 7)                            MemAddr[bank][7:7] = A[7:7];                        StartAddr[bank] = BurstInc[bank] % 8;                        BaseLoc[bank] = MemAddr[bank];                        Loc = 4*(BaseLoc[bank] + BurstInc[bank]);                        MemWrite(bank);                        BurstCnt[bank] = 1'b1;                        wrt_in = 1'b1;                        NextStateAuto(bank, write);                        written = 1'b1;                    end                    else if (cur_bank == bank || command == mrs)                    begin                        $display ("Illegal command received in");                        $display ("active state",$time);                    end                end                write :                begin                    if (command == bst)                    begin                        statebank[bank] = bank_act;                        BurstCnt[bank] = 1'b0;                    end                    else if (command == rd)                        if (cur_bank == bank)                        begin                            MemAddr[bank][7:0] = 8'b0;// clr old addr                            BurstIncProc(bank);                            // latch col addr                            if (Burst_Bits == 0)                                MemAddr[bank][7:0] = A[7:0];                            if (Burst_Bits == 1)                                MemAddr[bank][7:1] = A[7:1];                            if (Burst_Bits == 2)                                MemAddr[bank][7:2] = A[7:2];                            if (Burst_Bits == 3)                                MemAddr[bank][7:3] = A[7:3];                            if (Burst_Bits == 7)                                MemAddr[bank][7:7] = A[7:7];                            StartAddr[bank] = BurstInc[bank] % 8;                            BaseLoc[bank] = MemAddr[bank];                            Loc = 4*(BaseLoc[bank] + BurstInc[bank]);                            generate_out(DataDrive, bank);                            BurstCnt[bank] = 1'b1;                            NextStateAuto(bank, read);                        end                        else                            statebank[bank] = bank_act;                    else if (command == writ)                        if (cur_bank == bank)                        begin                            MemAddr[bank][7:0] = 8'b0;// clr old addr                            BurstIncProc(bank);                            // latch col addr                            if (Burst_Bits == 0)                                MemAddr[bank][7:0] = A[7:0];                            if (Burst_Bits == 1)                                MemAddr[bank][7:1] = A[7:1];                            if (Burst_Bits == 2)                                MemAddr[bank][7:2] = A[7:2];                            if (Burst_Bits == 3)                                MemAddr[bank][7:3] = A[7:3];                            if (Burst_Bits == 7)                                MemAddr[bank][7:7] = A[7:7];                            StartAddr[bank] = BurstInc[bank] % 8;                            BaseLoc[bank] = MemAddr[bank];                            Loc = 4*(BaseLoc[bank] + BurstInc[bank]);                            MemWrite(bank);                            BurstCnt[bank] = 1'b1;                            wrt_in = 1'b1;                            if (A[10])                                statebank[bank] = write_auto_pre;                        end                        else                            statebank[bank] = bank_act;                    else if (command == pre && (cur_bank == bank || A[10]))                    begin                        if (~ras_out[bank])                        begin                $display ("precharge command does not meet tRAS time",$time);                        end                        if (~DQM0_ipd)                        begin                            $display ("DQM0 should be held high, data is");                            $display ("lost.",$time);                        end                        if (~DQM1_ipd)                        begin                            $display ("DQM1 should be held high, data is");                            $display ("lost.",$time);                        end                        if (~DQM2_ipd)                        begin                            $display ("DQM2 should be held high, data is");                            $display ("lost.",$time);                        end                        if (~DQM2_ipd)                        begin                            $display ("DQM2 should be held high, data is");                            $display ("lost.",$time);                        end                        wrt_in = 1'b0;                        statebank[bank] = precharge;                        statebank[bank] <= #tdevice_TRP idle;                    end                    else if (command == nop || cur_bank != bank)                        if (BurstCnt[bank] == BurstLen || WB == single)                        begin                            statebank[bank] = bank_act;                            BurstCnt[bank] = 1'b0;                            ras_in[bank] = 1'b1;                        end                        else                        begin                            if (Burst == sequential)                                BurstInc[bank] = (BurstInc[bank]+1) % BurstLen;                            else                                BurstInc[bank] =                                intab[StartAddr[bank]*8 + BurstCnt[bank]];                            Loc = 4*(BaseLoc[bank] + BurstInc[bank]);                            MemWrite(bank);                            BurstCnt[bank] = BurstCnt[bank] + 1;                            wrt_in = 1'b1;                        end                    else if (cur_bank == bank)                    $display ("Illegal command received in write state",$time);                end                read :                begin                    if (command == bst)                    begin                        statebank[bank] = bank_act;                        BurstCnt[bank] = 1'b0;                    end                    else if (command == rd)                        if (cur_bank == bank)                        begin                            MemAddr[bank][7:0] = 8'b0;// clr old addr                            BurstIncProc(bank);                            // latch col addr                            if (Burst_Bits == 0)                                MemAddr[bank][7:0] = A[7:0];                            if (Burst_Bits == 1)                                MemAddr[bank][7:1] = A[7:1];                            if (Burst_Bits == 2)                                MemAddr[bank][7:2] = A[7:2];                            if (Burst_Bits == 3)                                MemAddr[bank][7:3] = A[7:3];                            if (Burst_Bits == 7)                                MemAddr[bank][7:7] = A[7:7];                            StartAddr[bank] = BurstInc[bank] % 8;                            BaseLoc[bank] = MemAddr[bank];                            Loc = 4*(BaseLoc[bank] + BurstInc[bank]);                            generate_out(DataDrive, bank);                            BurstCnt[bank] = 1'b1;                            NextStateAuto(bank, read);                        end                        else                            statebank[bank] = bank_act;                    else if (command == writ)                        if (cur_bank == bank)                        begin                            if (rcdt_out[bank])                            begin                $display ("write command received too soon after active",$time);                            end                            if (A[10] == 1'bx)                            begin                                $display ("A(10) = X during write command.");                                $display ("Next state unknown.");                            end                            MemAddr[bank][7:0] = 8'b0;// clr old addr                            BurstIncProc(bank);                            // latch col addr                            if (Burst_Bits == 0)                                MemAddr[bank][7:0] = A[7:0];                            if (Burst_Bits == 1)                                MemAddr[bank][7:1] = A[7:1];                            if (Burst_Bits == 2)                                MemAddr[bank][7:2] = A[7:2];                            if (Burst_Bits == 3)                                MemAddr[bank][7:3] = A[7:3];                            if (Burst_Bits == 7)                                MemAddr[bank][7:7] = A[7:7];                            StartAddr[bank] = BurstInc[bank] % 8;                            BaseLoc[bank] = MemAddr[bank];                            Loc = 4*(BaseLoc[bank] + BurstInc[bank]);                            MemWrite(bank);                            BurstCnt[bank] = 1'b1;                            wrt_in = 1'b1;                            NextStateAuto(bank,write);                        end                        else                            statebank[bank] = bank_act;                    else if (command == pre && (cur_bank == bank || A[10]))                    begin                        if (~ras_out[bank])                        begin                  $display ("Precharge command does not meet tRAS time",$time);                        end                        statebank[bank] = precharge;                        statebank[bank] <= #tdevice_TRP idle;                    end                    else if (command == nop || cur_bank != bank)                    begin                        if (BurstCnt[bank] == BurstLen)                        begin                            statebank[bank] = bank_act;                            BurstCnt[bank] = 1'b0;                            ras_in[bank] = 1'b1;                        end                        else                        begin                            if (Burst == sequential)                                BurstInc[bank] = (BurstInc[bank]+1) % BurstLen;                            else                                BurstInc[bank] =                                intab[StartAddr[bank]*8 + BurstCnt[bank]];                            Loc = 4*(BaseLoc[bank] + BurstInc[bank]);                            generate_out(DataDrive, bank);                            BurstCnt[bank] = BurstCnt[bank] + 1;                        end                    end                    else if (cur_bank == bank)                    $display ("Illegal command received in read state",$time);                end                write_auto_pre :                begin                    if (command == nop || cur_bank != bank)                        if (BurstCnt[bank] == BurstLen || WB == single)                        begin                            statebank[bank] = precharge;                            statebank[bank] <= #tdevice_TRP idle;                            BurstCnt[bank] = 1'b0;                            ras_in[bank] = 1'b1;                        end                        else                        begin                            if (Burst == sequential)                                BurstInc[bank] = (BurstInc[bank]+1) % BurstLen;                            else                                BurstInc[bank] =                                intab[StartAddr[bank]*8 + BurstCnt[bank]];                            Loc = 4*(BaseLoc[bank] + BurstInc[bank]);                            MemWrite(bank);                            BurstCnt[bank] = BurstCnt[bank] + 1;                            wrt_in = 1'b1;                        end                    else                    $display ("Illegal command received in write state.",$time);                end                read_auto_pre :                begin                    if (command == nop || (cur_bank != bank && command != rd                        && command != writ))                        if (BurstCnt[bank] == BurstLen)                        begin                            statebank[bank] = precharge;                            statebank[bank] <= #tdevice_TRP idle;                            BurstCnt[bank] = 1'b0;                            ras_in[bank] = 1'b1;                        end                        else                        begin                            if (Burst == sequential)                                BurstInc[bank] = (BurstInc[bank]+1) % BurstLen;                            else                                BurstInc[bank] =                                intab[StartAddr[bank]*8 + BurstCnt[bank]];                            Loc = 4*(BaseLoc[bank] + BurstInc[bank]);                            generate_out(DataDrive, bank);                            BurstCnt[bank] = BurstCnt[bank] + 1;                        end                    else if ((command == rd || command == writ) && cur_bank                        != bank)                    b

⌨️ 快捷键说明

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