Adapt bos2k9_t to sd_host_t.
authorMalte S. Stretz <mss@apache.org>
Thu, 9 Jul 2009 13:12:36 +0000 (15:12 +0200)
committerMalte S. Stretz <mss@apache.org>
Thu, 9 Jul 2009 13:12:36 +0000 (15:12 +0200)
bos2k9.mpf
fhw_sd_t/sd_host_t.dat [new file with mode: 0644]
fhw_sd_t/sd_host_t.vhd

index ae1a002..f58a2e0 100644 (file)
@@ -214,7 +214,7 @@ NumericStdNoWarnings = 1
 Project_Version = 6
 Project_DefaultLib = work
 Project_SortMethod = unused
-Project_Files_Count = 26
+Project_Files_Count = 27
 Project_File_0 = $SRC/bos2k9_t.vhd
 Project_File_P_0 = vhdl_novitalcheck 0 file_type vhdl group_id 0 cover_nofec 0 vhdl_nodebug 0 vhdl_1164 1 vhdl_noload 0 vhdl_synth 0 vhdl_enable0In 0 folder work last_compile 1247142896 vhdl_disableopt 0 vhdl_vital 0 cover_excludedefault 0 vhdl_warn1 1 vhdl_warn2 1 vhdl_explicit 1 vhdl_showsource 1 vhdl_warn3 1 cover_covercells 0 vhdl_0InOptions {} vhdl_warn4 1 voptflow 1 cover_optlevel 3 vhdl_options {} vhdl_warn5 1 toggle - ood 0 cover_noshort 0 compile_to work compile_order 25 cover_nosub 0 dont_compile 0 vhdl_use93 93
 Project_File_1 = $SRC/bos2k9_globals.vhd
@@ -257,25 +257,29 @@ Project_File_19 = $SRC/fhw_sd_t/sd_parser_t.vhd
 Project_File_P_19 = vhdl_novitalcheck 0 file_type vhdl group_id 0 cover_nofec 0 vhdl_nodebug 0 vhdl_1164 1 vhdl_noload 0 vhdl_synth 0 vhdl_enable0In 0 folder fhw_sd_t last_compile 1246470166 vhdl_disableopt 0 cover_excludedefault 0 vhdl_vital 0 vhdl_warn1 1 vhdl_showsource 1 vhdl_explicit 1 vhdl_warn2 1 vhdl_0InOptions {} cover_covercells 0 vhdl_warn3 1 vhdl_options {} cover_optlevel 3 voptflow 1 vhdl_warn4 1 ood 0 toggle - vhdl_warn5 1 compile_to fhw_sd_t cover_noshort 0 compile_order 18 dont_compile 0 cover_nosub 0 vhdl_use93 93
 Project_File_20 = $SRC/stefanvhdl/txt_util.vhd
 Project_File_P_20 = vhdl_novitalcheck 0 file_type vhdl group_id 0 cover_nofec 0 vhdl_nodebug 0 vhdl_1164 1 vhdl_noload 0 vhdl_synth 0 vhdl_enable0In 0 folder stefanvhdl last_compile 1246389381 vhdl_disableopt 0 cover_excludedefault 0 vhdl_vital 0 vhdl_warn1 1 vhdl_showsource 1 vhdl_explicit 1 vhdl_warn2 1 vhdl_0InOptions {} cover_covercells 0 vhdl_warn3 1 vhdl_options {} cover_optlevel 3 voptflow 1 vhdl_warn4 1 ood 0 toggle - vhdl_warn5 1 compile_to stefanvhdl cover_noshort 0 compile_order 24 dont_compile 0 cover_nosub 0 vhdl_use93 93
-Project_File_21 = $SRC/mf_block_ram.vhd
-Project_File_P_21 = vhdl_novitalcheck 0 file_type vhdl group_id 0 cover_nofec 0 vhdl_nodebug 0 vhdl_1164 1 vhdl_noload 0 vhdl_synth 0 vhdl_enable0In 0 folder work last_compile 1247141112 vhdl_disableopt 0 vhdl_vital 0 cover_excludedefault 0 vhdl_warn1 1 vhdl_warn2 1 vhdl_explicit 1 vhdl_showsource 1 vhdl_warn3 1 cover_covercells 0 vhdl_0InOptions {} vhdl_warn4 1 voptflow 1 cover_optlevel 3 vhdl_options {} vhdl_warn5 1 toggle - ood 0 cover_noshort 0 compile_to work compile_order 22 cover_nosub 0 dont_compile 0 vhdl_use93 93
-Project_File_22 = $SRC/fhw_sd/sd_flow_e.vhd
-Project_File_P_22 = vhdl_novitalcheck 0 file_type vhdl group_id 0 cover_nofec 0 vhdl_nodebug 0 vhdl_1164 1 vhdl_noload 0 vhdl_synth 0 vhdl_enable0In 0 folder fhw_sd last_compile 1247129220 vhdl_disableopt 0 cover_excludedefault 0 vhdl_vital 0 vhdl_warn1 1 vhdl_showsource 1 vhdl_explicit 1 vhdl_warn2 1 vhdl_0InOptions {} cover_covercells 0 vhdl_warn3 1 vhdl_options {} cover_optlevel 3 voptflow 1 vhdl_warn4 1 ood 0 toggle - vhdl_warn5 1 compile_to fhw_sd cover_noshort 0 compile_order 9 dont_compile 0 cover_nosub 0 vhdl_use93 93
-Project_File_23 = $SRC/fhw_spi_t/spi_master_t.vhd
-Project_File_P_23 = vhdl_novitalcheck 0 file_type vhdl group_id 0 cover_nofec 0 vhdl_nodebug 0 vhdl_1164 1 vhdl_noload 0 vhdl_synth 0 vhdl_enable0In 0 folder fhw_spi_t last_compile 1245940201 vhdl_disableopt 0 cover_excludedefault 0 vhdl_vital 0 vhdl_warn1 1 vhdl_showsource 0 vhdl_explicit 1 vhdl_warn2 1 vhdl_0InOptions {} cover_covercells 0 vhdl_warn3 1 vhdl_options {} cover_optlevel 3 voptflow 1 vhdl_warn4 1 ood 0 toggle - vhdl_warn5 1 compile_to fhw_spi_t cover_noshort 0 compile_order 15 dont_compile 0 cover_nosub 0 vhdl_use93 2002
-Project_File_24 = $SRC/fhw_spi_t/spi_master_all_t.vhd
-Project_File_P_24 = vhdl_novitalcheck 0 file_type vhdl group_id 0 cover_nofec 0 vhdl_nodebug 0 vhdl_1164 1 vhdl_noload 0 vhdl_synth 0 vhdl_enable0In 0 folder fhw_spi_t last_compile 1245940201 vhdl_disableopt 0 cover_excludedefault 0 vhdl_vital 0 vhdl_warn1 1 vhdl_showsource 0 vhdl_explicit 1 vhdl_warn2 1 vhdl_0InOptions {} cover_covercells 0 vhdl_warn3 1 vhdl_options {} cover_optlevel 3 voptflow 1 vhdl_warn4 1 ood 0 toggle - vhdl_warn5 1 compile_to fhw_spi_t cover_noshort 0 compile_order 14 dont_compile 0 cover_nosub 0 vhdl_use93 2002
-Project_File_25 = $SRC/fhw_spi/spi_engine_e.vhd
-Project_File_P_25 = vhdl_novitalcheck 0 file_type vhdl group_id 0 cover_nofec 0 vhdl_nodebug 0 vhdl_1164 1 vhdl_noload 0 vhdl_synth 0 vhdl_enable0In 0 folder fhw_spi last_compile 1245940201 vhdl_disableopt 0 cover_excludedefault 0 vhdl_vital 0 vhdl_warn1 1 vhdl_showsource 0 vhdl_explicit 1 vhdl_warn2 1 vhdl_0InOptions {} cover_covercells 0 vhdl_warn3 1 vhdl_options {} cover_optlevel 3 voptflow 1 vhdl_warn4 1 ood 0 toggle - vhdl_warn5 1 compile_to fhw_spi cover_noshort 0 compile_order 1 dont_compile 0 cover_nosub 0 vhdl_use93 2002
-Project_Sim_Count = 4
-Project_Sim_0 = bos2k9
-Project_Sim_P_0 = Generics {} timing default -std_output {} -nopsl 0 +notimingchecks 0 -L {} selected_du {} -hazards 0 -sdf {} ok 1 folder work -0in 0 -nosva 0 -absentisempty 0 +pulse_r {} -multisource_delay {} OtherArgs {} +pulse_e {} -t ns -vital2.2b 0 +plusarg {} -sdfnoerror 0 -coverage 0 vopt_env 1 is_vopt_flow 0 -memprof 0 additional_dus work.bos2k9_t -nofileshare 0 -noglitch 0 +no_pulse_msg 0 -assertdebug 0 -wlf {} -std_input {} -Lf {} -sdfnowarn 0 -assertfile {} -0in_options {}
-Project_Sim_1 = sd_flow
-Project_Sim_P_1 = Generics {} timing default -std_output {} -nopsl 0 +notimingchecks 0 -L {} selected_du {} -sclib {} -hazards 0 -sdf {} ok 1 folder fhw_sd_t -0in 0 -nosva 0 -absentisempty 0 +pulse_r {} -dpiexportobj {} -multisource_delay {} OtherArgs {} -dpioutoftheblue {} +pulse_e {} -t ns -vital2.2b 0 +plusarg {} -sdfnoerror 0 -coverage 0 vopt_env 1 -dpiheader {} is_vopt_flow 0 -memprof 0 -sc_arg {} additional_dus fhw_sd_t.sd_flow_t -nofileshare 0 -noglitch 0 +no_pulse_msg 0 -assertdebug 0 -wlf {} -std_input {} -Lf {} -sdfnowarn 0 -assertfile {} -0in_options {}
-Project_Sim_2 = spi_master
-Project_Sim_P_2 = Generics {} timing default -std_output {} -nopsl 0 +notimingchecks 0 -L {} selected_du {} -hazards 0 -sdf {} ok 1 -0in 0 -nosva 0 folder fhw_spi_t +pulse_r {} -absentisempty 0 OtherArgs {} -multisource_delay {} +pulse_e {} vopt_env 1 -coverage 0 -sdfnoerror 0 +plusarg {} -vital2.2b 0 -t us -memprof 0 is_vopt_flow 0 additional_dus fhw_spi_t.spi_master_t -noglitch 0 -nofileshare 0 -wlf {} -assertdebug 0 +no_pulse_msg 0 -0in_options {} -assertfile {} -sdfnowarn 0 -Lf {} -std_input {}
-Project_Sim_3 = sd_parser
-Project_Sim_P_3 = Generics {} timing default -std_output {} -nopsl 0 +notimingchecks 0 -L {} selected_du {} -hazards 0 -sdf {} ok 1 folder fhw_sd_t -0in 0 -nosva 0 -absentisempty 0 +pulse_r {} -multisource_delay {} OtherArgs {} +pulse_e {} -t ns -vital2.2b 0 +plusarg {} -sdfnoerror 0 -coverage 0 vopt_env 1 is_vopt_flow 0 -memprof 0 additional_dus fhw_sd_t.sd_parser_t -nofileshare 0 -noglitch 0 +no_pulse_msg 0 -assertdebug 0 -wlf {} -std_input {} -Lf {} -sdfnowarn 0 -assertfile {} -0in_options {}
+Project_File_21 = $SRC/fhw_sd_t/sd_host_t.vhd
+Project_File_P_21 = vhdl_novitalcheck 0 file_type vhdl group_id 0 cover_nofec 0 vhdl_nodebug 0 vhdl_1164 1 vhdl_noload 0 vhdl_synth 0 vhdl_enable0In 0 folder fhw_sd_t last_compile 1247144884 vhdl_disableopt 0 cover_excludedefault 0 vhdl_vital 0 vhdl_warn1 1 vhdl_showsource 1 vhdl_explicit 1 vhdl_warn2 1 vhdl_0InOptions {} cover_covercells 0 vhdl_warn3 1 vhdl_options {} cover_optlevel 3 voptflow 1 vhdl_warn4 1 ood 0 toggle - vhdl_warn5 1 compile_to fhw_sd_t cover_noshort 0 compile_order 26 dont_compile 0 cover_nosub 0 vhdl_use93 93
+Project_File_22 = $SRC/mf_block_ram.vhd
+Project_File_P_22 = vhdl_novitalcheck 0 file_type vhdl group_id 0 cover_nofec 0 vhdl_nodebug 0 vhdl_1164 1 vhdl_noload 0 vhdl_synth 0 vhdl_enable0In 0 folder work last_compile 1247141112 vhdl_disableopt 0 vhdl_vital 0 cover_excludedefault 0 vhdl_warn1 1 vhdl_warn2 1 vhdl_explicit 1 vhdl_showsource 1 vhdl_warn3 1 cover_covercells 0 vhdl_0InOptions {} vhdl_warn4 1 voptflow 1 cover_optlevel 3 vhdl_options {} vhdl_warn5 1 toggle - ood 0 cover_noshort 0 compile_to work compile_order 22 cover_nosub 0 dont_compile 0 vhdl_use93 93
+Project_File_23 = $SRC/fhw_sd/sd_flow_e.vhd
+Project_File_P_23 = vhdl_novitalcheck 0 file_type vhdl group_id 0 cover_nofec 0 vhdl_nodebug 0 vhdl_1164 1 vhdl_noload 0 vhdl_synth 0 vhdl_enable0In 0 folder fhw_sd last_compile 1247129220 vhdl_disableopt 0 cover_excludedefault 0 vhdl_vital 0 vhdl_warn1 1 vhdl_showsource 1 vhdl_explicit 1 vhdl_warn2 1 vhdl_0InOptions {} cover_covercells 0 vhdl_warn3 1 vhdl_options {} cover_optlevel 3 voptflow 1 vhdl_warn4 1 ood 0 toggle - vhdl_warn5 1 compile_to fhw_sd cover_noshort 0 compile_order 9 dont_compile 0 cover_nosub 0 vhdl_use93 93
+Project_File_24 = $SRC/fhw_spi_t/spi_master_t.vhd
+Project_File_P_24 = vhdl_novitalcheck 0 file_type vhdl group_id 0 cover_nofec 0 vhdl_nodebug 0 vhdl_1164 1 vhdl_noload 0 vhdl_synth 0 vhdl_enable0In 0 folder fhw_spi_t last_compile 1245940201 vhdl_disableopt 0 cover_excludedefault 0 vhdl_vital 0 vhdl_warn1 1 vhdl_showsource 0 vhdl_explicit 1 vhdl_warn2 1 vhdl_0InOptions {} cover_covercells 0 vhdl_warn3 1 vhdl_options {} cover_optlevel 3 voptflow 1 vhdl_warn4 1 ood 0 toggle - vhdl_warn5 1 compile_to fhw_spi_t cover_noshort 0 compile_order 15 dont_compile 0 cover_nosub 0 vhdl_use93 2002
+Project_File_25 = $SRC/fhw_spi_t/spi_master_all_t.vhd
+Project_File_P_25 = vhdl_novitalcheck 0 file_type vhdl group_id 0 cover_nofec 0 vhdl_nodebug 0 vhdl_1164 1 vhdl_noload 0 vhdl_synth 0 vhdl_enable0In 0 folder fhw_spi_t last_compile 1245940201 vhdl_disableopt 0 cover_excludedefault 0 vhdl_vital 0 vhdl_warn1 1 vhdl_showsource 0 vhdl_explicit 1 vhdl_warn2 1 vhdl_0InOptions {} cover_covercells 0 vhdl_warn3 1 vhdl_options {} cover_optlevel 3 voptflow 1 vhdl_warn4 1 ood 0 toggle - vhdl_warn5 1 compile_to fhw_spi_t cover_noshort 0 compile_order 14 dont_compile 0 cover_nosub 0 vhdl_use93 2002
+Project_File_26 = $SRC/fhw_spi/spi_engine_e.vhd
+Project_File_P_26 = vhdl_novitalcheck 0 file_type vhdl group_id 0 cover_nofec 0 vhdl_nodebug 0 vhdl_1164 1 vhdl_noload 0 vhdl_synth 0 vhdl_enable0In 0 folder fhw_spi last_compile 1245940201 vhdl_disableopt 0 cover_excludedefault 0 vhdl_vital 0 vhdl_warn1 1 vhdl_showsource 0 vhdl_explicit 1 vhdl_warn2 1 vhdl_0InOptions {} cover_covercells 0 vhdl_warn3 1 vhdl_options {} cover_optlevel 3 voptflow 1 vhdl_warn4 1 ood 0 toggle - vhdl_warn5 1 compile_to fhw_spi cover_noshort 0 compile_order 1 dont_compile 0 cover_nosub 0 vhdl_use93 2002
+Project_Sim_Count = 5
+Project_Sim_0 = sd_host
+Project_Sim_P_0 = Generics {} timing default -std_output {} -nopsl 0 +notimingchecks 0 -L {} selected_du {} -hazards 0 -sdf {} ok 1 folder fhw_sd_t -0in 0 -nosva 0 -absentisempty 0 +pulse_r {} -multisource_delay {} OtherArgs {} +pulse_e {} -t ns -vital2.2b 0 +plusarg {} -sdfnoerror 0 -coverage 0 vopt_env 1 is_vopt_flow 0 -memprof 0 additional_dus fhw_sd_t.sd_host_t -nofileshare 0 -noglitch 0 +no_pulse_msg 0 -assertdebug 0 -wlf {} -std_input {} -Lf {} -sdfnowarn 0 -assertfile {} -0in_options {}
+Project_Sim_1 = bos2k9
+Project_Sim_P_1 = Generics {} timing default -std_output {} -nopsl 0 +notimingchecks 0 -L {} selected_du {} -hazards 0 -sdf {} ok 1 folder work -0in 0 -nosva 0 -absentisempty 0 +pulse_r {} -multisource_delay {} OtherArgs {} +pulse_e {} -t ns -vital2.2b 0 +plusarg {} -sdfnoerror 0 -coverage 0 vopt_env 1 is_vopt_flow 0 -memprof 0 additional_dus work.bos2k9_t -nofileshare 0 -noglitch 0 +no_pulse_msg 0 -assertdebug 0 -wlf {} -std_input {} -Lf {} -sdfnowarn 0 -assertfile {} -0in_options {}
+Project_Sim_2 = sd_flow
+Project_Sim_P_2 = Generics {} timing default -std_output {} -nopsl 0 +notimingchecks 0 -L {} selected_du {} -sclib {} -hazards 0 -sdf {} ok 1 folder fhw_sd_t -0in 0 -nosva 0 -absentisempty 0 +pulse_r {} -dpiexportobj {} -multisource_delay {} OtherArgs {} -dpioutoftheblue {} +pulse_e {} -t ns -vital2.2b 0 +plusarg {} -sdfnoerror 0 -coverage 0 vopt_env 1 -dpiheader {} is_vopt_flow 0 -memprof 0 -sc_arg {} additional_dus fhw_sd_t.sd_flow_t -nofileshare 0 -noglitch 0 +no_pulse_msg 0 -assertdebug 0 -wlf {} -std_input {} -Lf {} -sdfnowarn 0 -assertfile {} -0in_options {}
+Project_Sim_3 = spi_master
+Project_Sim_P_3 = Generics {} timing default -std_output {} -nopsl 0 +notimingchecks 0 -L {} selected_du {} -hazards 0 -sdf {} ok 1 -0in 0 -nosva 0 folder fhw_spi_t +pulse_r {} -absentisempty 0 OtherArgs {} -multisource_delay {} +pulse_e {} vopt_env 1 -coverage 0 -sdfnoerror 0 +plusarg {} -vital2.2b 0 -t us -memprof 0 is_vopt_flow 0 additional_dus fhw_spi_t.spi_master_t -noglitch 0 -nofileshare 0 -wlf {} -assertdebug 0 +no_pulse_msg 0 -0in_options {} -assertfile {} -sdfnowarn 0 -Lf {} -std_input {}
+Project_Sim_4 = sd_parser
+Project_Sim_P_4 = Generics {} timing default -std_output {} -nopsl 0 +notimingchecks 0 -L {} selected_du {} -hazards 0 -sdf {} ok 1 folder fhw_sd_t -0in 0 -nosva 0 -absentisempty 0 +pulse_r {} -multisource_delay {} OtherArgs {} +pulse_e {} -t ns -vital2.2b 0 +plusarg {} -sdfnoerror 0 -coverage 0 vopt_env 1 is_vopt_flow 0 -memprof 0 additional_dus fhw_sd_t.sd_parser_t -nofileshare 0 -noglitch 0 +no_pulse_msg 0 -assertdebug 0 -wlf {} -std_input {} -Lf {} -sdfnowarn 0 -assertfile {} -0in_options {}
 Project_Folder_Count = 7
 Project_Folder_0 = fhw_spi
 Project_Folder_P_0 = folder {Top Level}
diff --git a/fhw_sd_t/sd_host_t.dat b/fhw_sd_t/sd_host_t.dat
new file mode 100644 (file)
index 0000000..fde2cfb
--- /dev/null
@@ -0,0 +1,611 @@
+expected response
+11111111 -------- strt
+11111111 -------- strt
+11111111 -------- strt
+11111111 -------- strt
+11111111 -------- strt
+11111111 -------- strt
+11111111 -------- strt
+11111111 -------- strt
+11111111 -------- strt
+11111111 -------- strt
+01000000 -------- idle cmd
+00000000 -------- idle arg
+00000000 -------- idle arg
+00000000 -------- idle arg
+00000000 -------- idle arg
+10010101 -------- idle crc
+11111111 11111111
+11111111 00000001 rsp: idle
+01000001 -------- init cmd
+00000000 -------- init arg
+00000000 -------- init arg
+00000000 -------- init arg
+00000000 -------- init arg
+10010101 -------- init crc
+11111111 00000001 rsp: idle
+01000001 -------- init cmd
+00000000 -------- init arg
+00000000 -------- init arg
+00000000 -------- init arg
+00000000 -------- init arg
+10010101 -------- init crc
+11111111 00000000 rsp: ok
+01010000 -------- bsiz cmd
+00000000 -------- bsiz arg
+00000000 -------- bsiz arg
+00000010 -------- bsiz arg (512)
+00000000 -------- bsiz arg (512)
+10010101 11111111 bsiz crc
+11111111 11111111
+11111111 11111111
+11111111 11111111
+11111111 11111111
+11111111 11111111
+11111111 11111111
+11111111 11111111
+11111111 11111111
+11111111 00000000 rsp: ok
+01010001 -------- read cmd
+00000000 -------- read arg
+00000000 -------- read arg
+11010100 -------- read arg (addr + pad)
+00000000 -------- read arg (pad)
+10010101 -------- read crc
+11111111 00000000 rsp: ok
+11111111 11111111
+11111111 11111111
+11111111 11111111
+11111111 11111111
+11111111 11111110 data token
+11111111 00000000 data
+11111111 00000001 512
+11111111 00000010 byte
+11111111 00000100 .
+11111111 00001000 .
+11111111 00010000 .
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 00000001
+11111111 00000010
+11111111 00000100
+11111111 00001000
+11111111 00010000
+11111111 00100000
+11111111 01000000
+11111111 10000000
+11111111 11111111
+11111111 00000000
+11111111 11111111
+11111111 -------- data crc
+11111111 -------- data crc
+01010001 -------- read cmd
+00000000 -------- read arg
+00000000 -------- read arg
+11010100 -------- read arg (addr + pad)
+00000000 -------- read arg (pad)
+10010101 -------- read crc
+11111111 00000000 rsp: ok
+11111111 11111111
+11111111 11111111
+11111111 11111111
+11111111 11111111
+11111111 00011111 rsp: fail
+11111111 -------- strt
+11111111 -------- strt
+11111111 -------- strt
+11111111 -------- strt
+11111111 -------- strt
+11111111 -------- strt
+11111111 -------- strt
+11111111 -------- strt
+11111111 -------- strt
+11111111 -------- strt
+01000000 -------- idle cmd
+00000000 -------- idle arg
+00000000 -------- idle arg
+00000000 -------- idle arg
+00000000 -------- idle arg
+10010101 -------- idle crc
+11111111 11111111
+11111111 11111111
+11111111 11111111
+11111111 11111111
+11111111 11111111
+11111111 11111111
+11111111 11111111
+11111111 11111111
+11111111 00000010 rsp: fail
\ No newline at end of file
index e69de29..c9909d2 100644 (file)
@@ -0,0 +1,213 @@
+-----------------------------------------------------------------------
+-- Copyright (c) 2009 Malte S. Stretz <http://msquadrat.de> 
+--
+-- Testing the SD host.
+--
+-- SPI input data is read from the text file `sd_host_t.dat` (or the
+-- filename specified by the generic `spi_filename`). Each line 
+-- consists of two bytes, std_logic style and separated by a single 
+-- space: The first byte is the data expected from the SPI master (ie. 
+-- the SD host), the second the reply to be sent. All following 
+-- characters on the line are ignored and can be used as a comment.
+--
+-- Of course lines are only read when data is read, not while the 
+-- system is idle.
+--
+-- If the data sent by the SD host doesn't equal the expected data,
+-- an assertion is raised. Each input and output data is printed on 
+-- stdout.
+--
+-- This test should be run about 1500 us to reach the first simulated
+-- read.  A full 512 Byte block needs about 15 ms.
+-----------------------------------------------------------------------
+-- This entity is part of the following library:
+-- pragma library fhw_sd_t
+library fhw_sd_t;
+library fhw_sd;
+use fhw_sd.all;
+use fhw_sd.sd_globals_p.all;
+
+library fhw_tools;
+use fhw_tools.types.all;
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library stefanvhdl;
+use stefanvhdl.txt_util.all;
+
+use std.textio.all;
+
+-----------------------------------------------------------------------
+
+entity sd_host_t is
+  generic(
+    clock_interval : time     := 20 ns;
+    clock_divider  : positive := 128;
+    spi_filebase   : string   := ".";
+    spi_filepath   : string   := "fhw_sd_t";
+    spi_filename   : string   := "sd_host_t.dat");
+end sd_host_t;
+
+-----------------------------------------------------------------------
+
+architecture test of sd_host_t is
+
+  component sd_host is
+    generic(
+      clock_interval : time     := clock_interval;
+      clock_divider  : positive := clock_divider);
+    port(
+      clk : in  std_logic;
+      rst : in  std_logic;
+
+      init  : in  std_logic;
+      ready : out std_logic;
+      error : out std_logic;
+      
+      address : in  std_logic_block_address_t;
+      start   : in  std_logic;
+      rxd     : out std_logic_byte_t;
+      shd     : out std_logic;
+      
+      miso  : in  std_logic;
+      mosi  : out std_logic;
+      sck   : out std_logic;
+      cs    : out std_logic);
+  end component;
+  
+  -- These are the low eight bytes sent as the read address;
+  -- if this constant is changed, the data file has to be
+  -- modified as well.
+  constant addr_sw_c : std_logic_byte_t := "01101010";
+
+  constant spi_filename_c : string := spi_filebase & "/" & spi_filepath & "/" & spi_filename;
+  file   spi_file         : text open read_mode is spi_filename_c;
+  signal test_s           : integer;
+  
+  signal clock_s  : std_logic;
+  signal reset_s  : std_logic;
+  
+  signal init_i_s     : std_logic;
+  signal ready_o_s    : std_logic;
+  signal error_o_s    : std_logic;
+  signal address_i_s  : std_logic_block_address_t;
+  signal start_i_s    : std_logic;
+  signal rxd_o_s      : std_logic_byte_t;
+  signal shd_o_s      : std_logic;
+  signal miso_i_s     : std_logic;
+  signal mosi_o_s     : std_logic;
+  signal sck_o_s      : std_logic;
+  signal cs_o_s       : std_logic;
+  
+  signal txd_s   : std_logic_byte_t;
+  signal rxd_s   : std_logic_byte_t;
+  signal spi_s   : spi_bus_t;
+begin
+  dut : sd_host port map(clock_s, reset_s,
+    init_i_s,
+    ready_o_s,
+    error_o_s,
+    address_i_s,
+    start_i_s,
+    rxd_o_s,
+    shd_o_s,
+    miso_i_s,
+    mosi_o_s,
+    sck_o_s,
+    cs_o_s);
+  miso_i_s   <= spi_s.miso;
+  spi_s.mosi <= mosi_o_s;
+  spi_s.sck  <= sck_o_s;
+  spi_s.cs   <= cs_o_s;
+  
+  -- Send the init and the start signal.
+  stimulus : process
+  begin
+    init_i_s  <= '0';
+    start_i_s <= '0';
+    wait until falling_edge(reset_s);
+    
+    init_i_s <= '1';
+    wait until rising_edge(clock_s);
+    init_i_s <= '0';
+    
+    wait until rising_edge(ready_o_s);
+    start_i_s <= '1';
+    wait until rising_edge(clock_s);
+    start_i_s <= '0';
+    
+    wait;
+  end process;
+  
+  -- Validate input and output against the data in the data file.
+  -- Uses helper routines from txt_util.
+  slave : process
+    procedure read_skip_header is
+      variable line_v  : line;
+    begin
+      print("reading from file " & spi_filename_c);
+      readline(spi_file, line_v);
+    end read_skip_header;
+    procedure read_txd_and_rxd is
+      variable line_v  : line;
+      variable input_v : string(1 to 17);
+      variable byte_v  : std_logic_byte_t;
+    begin
+      readline(spi_file, line_v);
+      read(line_v, input_v);
+      print(input_v);
+      txd_s <= to_std_logic_vector(input_v(1 to 8));
+      rxd_s <= to_std_logic_vector(input_v(10 to 17));
+      wait until rising_edge(clock_s);
+    end read_txd_and_rxd;
+    variable index_v : integer;
+    variable txd_v   : std_logic_byte_t;
+  begin
+    read_skip_header;
+    rxd_s <= (others => 'Z');
+    txd_v := (others => 'U');
+    test_s <= 0;
+    spi_s.miso <= 'Z';
+    wait until falling_edge(clock_s);
+    
+    while true loop
+      test_s <= test_s + 1;
+      index_v := 7;
+      read_txd_and_rxd;
+      while true loop
+        -- Latch on odd edges, shift on even
+        spi_s.miso <= rxd_s(index_v);
+        wait until rising_edge(spi_s.sck);
+        txd_v(0) := spi_s.mosi;
+        wait until falling_edge(spi_s.sck);
+        index_v  := index_v - 1;
+        if index_v = -1 then
+          exit;
+        end if;
+        txd_v    := txd_v(6 downto 0) & 'U';
+      end loop;
+      test_s <= test_s + 1;
+      assert txd_v = txd_s report "unexpected spi data. got: " & str(txd_v) & " expected: " & str(txd_s);
+    end loop;
+  end process;
+  
+  reset : process
+  begin
+    reset_s <= '1';
+    wait until rising_edge(clock_s);
+    wait until rising_edge(clock_s);
+    reset_s <= '0';
+    wait;
+  end process;
+  
+  clock : process
+  begin
+    clock_s <= '0';
+    wait for clock_interval / 2;
+    clock_s <= '1';
+    wait for clock_interval / 2;
+  end process;
+  
+end test;