fetch.sfl

stateの途中で最初に戻す

stateの途中で最初に戻す

  • タグ:
  • タグはありません
// 連続key onのために一旦初期状態に戻す
	stage src_read {
		reg_wr bk_count<3>;
		state_name st_getsl, st_getsh, st_head, st_data;
		first_state st_getsl;
		state st_getsl if((^ready) & f_key & ^read_wait.do){
			// 開始アドレス下位取得
			read(READ_AL, (DIR||0x00) + (0b000000||r_SRCN||f_loop||0b0));
			goto st_getsh;
		}
		state st_getsh any{
			key_on | ^f_key : goto st_getsl;
			else : if(^read_wait.do){
				// 開始アドレス上位取得
				read(READ_AH, (DIR||0x00) + (0b000000||r_SRCN||f_loop||0b1));
				goto st_head;
			}
		}
		state st_head any{
			key_on | ^f_key : goto st_getsl;
			else : if(src_empty & ^read_wait.do){
				// ヘッダ取得
				read(READ_HD, src_AH || src_AL);
				adinc();
				bk_count := 0b000;
				goto st_data;
			}
		}
		state st_data any{
			key_on | ^f_key : goto st_getsl;
			else : if(src_empty & ^read_wait.do){
				// ブロックデータ取得×8
				read(READ_BD, src_AH || src_AL);
				adinc();
				bk_count++;
				if(/&bk_count) any{
					f_end : par{
						goto st_getsl;
						if(^f_loop) finish;
					}
					else : goto st_head;
				}
			}
		}
	}