mfsm.vhd
来自「NANDFlashController.zip」· VHDL 代码 · 共 824 行 · 第 1/2 页
VHD
824 行
NxST <= Sr_AdL1; else NxST <= Sr_AdL0; end if; when Sr_AdL1 => t_start <= '1'; t_cmd <= "001"; ADC_sel <= "10"; AMX_sel <= "01"; if (t_done = '1') then NxST <= Sr_AdL2; else NxST <= Sr_AdL1; end if; when Sr_AdL2 => t_start <= '1'; t_cmd <= "001"; ADC_sel <= "10"; AMX_sel <= "10"; if (t_done = '1') then NxST <= Sr_AdL3; else NxST <= Sr_AdL2; end if; when Sr_AdL3 => t_start <= '1'; t_cmd <= "001"; ADC_sel <= "10"; AMX_sel <= "11"; if (t_done = '1') then NxST <= Sr_CmdL2; else NxST <= Sr_AdL3; end if; when Sr_CmdL2 => cmd_reg <= C3&C0; cmd_reg_we <= '1'; NxST <= Sr_CmdL3; when Sr_CmdL3 => t_start <= '1'; t_cmd <= "000"; if (t_done = '1') then NxST <= Sr_WC0; else NxST <= Sr_CmdL3; end if; when Sr_WC0 => wCntRes <= '1'; NxST <= Sr_WC1; when Sr_WC1 => wCntCE <= '1'; if (tc8 = '1') then NxST <= Sr_wait; else NxST <= Sr_WC1; end if; when Sr_wait => if (R_nB = '0') then NxST <= Sr_wait; else NxST <= Sr_RPA0; end if; when Sr_RPA0 => t_start <= '1'; t_cmd <= "101"; BF_we <= '1'; if (t_done = '1') then NxST <= Sr_CmdL4; t_cmd <= "000"; else NxST <= Sr_RPA0; end if; when Sr_CmdL4 => cmd_reg <= C0&C5; cmd_reg_we <= '1'; set835 <= '1'; t_cmd <= "000"; NxST <= Sr_CmdL5; when Sr_CmdL5 => t_start <= '1'; t_cmd <= "000"; if (t_done = '1') then NxST <= Sr_AdL4; else NxST <= Sr_CmdL5; end if; when Sr_AdL4 => t_start <= '1'; t_cmd <= "001"; ADC_sel <= "10"; AMX_sel <= "00"; if (t_done ='1') then NxST <= Sr_AdL5; else NxST <= Sr_AdL4; end if; when Sr_AdL5 => t_start <= '1'; t_cmd <= "001"; ADC_sel <= "10"; AMX_sel <= "01"; if (t_done = '1') then NxST <= Sr_CmdL6; else NxST <= Sr_AdL5; end if; when Sr_CmdL6 => cmd_reg <= CE&C0; cmd_reg_we <= '1'; NxST <= Sr_CmdL7; when Sr_CmdL7 => t_start <= '1'; t_cmd <= "000"; wCntRes <= '1'; if (t_done = '1') then NxST <= Sr_RPA1; else NxST <= Sr_CmdL7; end if; when Sr_RPA1 => t_start <= '1'; t_cmd <= "100"; WrECC <= '1'; if (t_done = '1') then NxST <= Sr_wait1; t_cmd <= "011"; else NxST <= Sr_RPA1; end if; when Sr_wait1 => WrECC <= '1'; NxST <= Sr_wait2; when Sr_wait2 => WrECC <= '1'; NxST <= Sr_WC3; when Sr_WC3 => WrECC <= '1'; wCntCE <= '1'; if (tc4 = '0') then NxST <= Sr_WC3; else NxST <= Sr_Done; end if; when Sr_Done => setDone <= '1'; NxST <= Init; when Sw_RAR => RAR_we <= '1'; NxST <= Sw_CmdL0; when Sw_CmdL0 => cmd_reg <= C8&C0; cmd_reg_we <= '1'; NxST <= Sw_CmdL1; when Sw_CmdL1 => t_start <= '1'; t_cmd <= "000"; if (t_done = '1') then NxST <= Sw_AdL0; else NxST <= Sw_CmdL1; end if; when Sw_AdL0 => t_start <= '1'; t_cmd <= "001"; ADC_sel <= "10"; AMX_sel <= "00"; if (t_done = '1') then NxST <= Sw_AdL1; else NxST <= Sw_AdL0; end if; when Sw_AdL1 => t_start <= '1'; t_cmd <= "001"; ADC_sel <= "10"; AMX_sel <= "01"; if (t_done = '1') then NxST <= Sw_AdL2; else NxST <= Sw_AdL1; end if; when Sw_AdL2 => t_start <= '1'; t_cmd <= "001"; ADC_sel <= "10"; AMX_sel <= "10"; if (t_done = '1') then NxST <= Sw_AdL3; else NxST <= Sw_AdL2; end if; when Sw_AdL3 => t_start <= '1'; t_cmd <= "001"; ADC_sel <= "10"; AMX_sel <= "11"; if (t_done = '1') then NxST <= Sw_WPA0; else NxST <= Sw_AdL3; end if; when Sw_WPA0 => t_start <= '1'; t_cmd <= "111"; ADC_sel <= "00"; if (t_done = '1') then NxST <= Sw_CmdL2; t_cmd <= "000"; else NxST <= Sw_WPA0; end if; when Sw_CmdL2 => cmd_reg <= C8&C5; cmd_reg_we <= '1'; set835 <= '1'; t_cmd <= "000"; NxST <= Sw_CmdL3; when Sw_CmdL3 => t_start <= '1'; t_cmd <= "000"; if (t_done = '1') then NxST <= Sw_AdL4; else NxST <= Sw_CmdL3; end if; when Sw_AdL4 => t_start <= '1'; t_cmd <= "001"; ADC_sel <= "10"; AMX_sel <= "00"; if (t_done = '1') then NxST <= Sw_AdL5; else NxST <= Sw_AdL4; end if; when Sw_AdL5 => t_start <= '1'; t_cmd <= "001"; ADC_sel <= "10"; AMX_sel <= "01"; if (t_done = '1') then NxST <= Sw_WPA1; else NxST <= Sw_AdL5; end if; when Sw_WPA1 => t_start <= '1'; t_cmd <= "110"; ADC_sel <= "01"; EnEcc <= '1'; if (t_done = '1') then NxST <= Sw_CmdL4; t_cmd <= "000"; else NxST <= Sw_WPA1; end if; when Sw_CmdL4 => cmd_reg <= C1&C0; t_cmd <= "000"; cmd_reg_we <= '1'; NxST <= Sw_CmdL5; when Sw_CmdL5 => t_start <= '1'; t_cmd <= "000"; if (t_done = '1') then NxST <= Sw_WC1; else NxST <= Sw_CmdL5; end if; when Sw_WC1 => wCntRes <= '1'; NxST <= Sw_WC2; when Sw_WC2 => wCntCE <= '1'; if (tc8 = '1') then NxST <= Swait3; else NxST <= Sw_WC2; end if; when Swait3 => if (R_nB = '1') then NxST <= Sw_CmdL6; else NxST <= Swait3; end if; when Sw_CmdL6 => cmd_reg <= C7&C0; cmd_reg_we <= '1'; NxST <= Sw_CmdL7; when Sw_CmdL7 => t_start <= '1'; t_cmd <= "000"; if (t_done = '1') then NxST <= Sw_Wait4; else NxST <= Sw_CmdL7; end if; when Sw_Wait4 => NxST <= Sw_Wait5; when Sw_Wait5 => NxST <= Sw_DR1; when Sw_DR1 => t_start <= '1'; t_cmd <= "010"; if (t_done = '1') then NxST <= Sw_done; else NxST <= Sw_DR1; end if; when Sw_done => setDone <= '1'; NxST <= Init; if (io_0 = '1') then SetPrErr <= '1'; else SetPrErr <= '0'; end if; when Srst_RAR => NxST <= Srst_CmdL0; when Srst_CmdL0 => cmd_reg <= CF&CF; cmd_reg_we <= '1'; NxST <= Srst_CmdL1; when Srst_CmdL1 => t_start <= '1'; t_cmd <= "000"; if (t_done = '1') then NxST <= Srst_done; else NxST <= Srst_CmdL1; end if; when Srst_done => setDone <= '1'; NxST <= Init; when Srid_RAR => RAR_we <= '1'; NxST <= Srid_CmdL0; when Srid_CmdL0 => cmd_reg <= C9&C0; cmd_reg_we <= '1'; NxST <= Srid_CmdL1; when Srid_CmdL1 => t_start <= '1'; t_cmd <= "000"; if (t_done = '1') then NxST <= Srid_AdL0; else NxST <= Srid_CmdL1; end if; when Srid_AdL0 => t_start <= '1'; t_cmd <= "001"; ADC_sel <= "10"; AMX_sel <= "10"; if (t_done = '1') then NxST <= Srid_Wait; else NxST <= Srid_AdL0; end if; when Srid_Wait => wCntRes <= '1'; NxST <= Srid_DR1; when Srid_DR1 => t_start <= '1'; t_cmd <= "010"; BF_we <= '1'; if (t_done = '1') then NxST <= Srid_DR2; else NxST <= Srid_DR1; end if; when Srid_DR2 => t_start <= '1'; t_cmd <= "010"; BF_we <= '1'; if (t_done = '1') then NxST <= Srid_DR3; else NxST <= Srid_DR2; end if; when Srid_DR3 => t_start <= '1'; t_cmd <= "010"; BF_we <= '1'; if (t_done = '1') then NxST <= Srid_DR4; else NxST <= Srid_DR3; end if; when Srid_DR4 => t_start <= '1'; t_cmd <= "010"; BF_we <= '1'; if (t_done = '1') then NxST <= Srid_done; else NxST <= Srid_DR4; end if; when Srid_done => setDone <= '1'; NxST <= Init; when others => NxST <= Init; END CASE; END IF; END PROCESS;END ARCHITECTURE translated;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?