📄 mt48lc4m32b2.v
字号:
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 + -