📄 testbench.vhd
字号:
-- read Autoselect codes WHEN rd_AS => RAddr := to_nat(T_A(14 downto 0)); --x16 addressing toggle := false; Check_AS ( DQ => T_DQ, addr => RAddr, ProtSecNum=>ProtSecNum, secProt => Sec_Prot(RSect), FactoryProt=>FactoryProt , Byte => T_BYTENeg, AS_E => to_slv(16#0C#,8), AS_F => to_slv(1,8), check_err=>check_err); WHEN rd_HiZ => toggle:=false; Check_Z ( DQ => T_DQ, check_err=>check_err); WHEN readX => toggle:=false; Check_X ( DQ => T_DQ, check_err=>check_err); WHEN erase_na | erase_active => IF toggle THEN Check_Erase ( DQ => T_DQ(7 downto 0), sts => status, toggle => toggle_sts, sts_check=>sts_check, RY => T_RY, check_err=>check_err); toggle_sts := T_DQ(7 downto 0); --update toggle check END IF; WHEN ers_susp_e => IF toggle THEN Check_Ers_Susp ( DQ => T_DQ(7 downto 0), sts => status, toggle => toggle_sts, sts_check=>sts_check, RY => T_RY, check_err=>check_err); toggle_sts := T_DQ(7 downto 0); --update toggle check END IF;-- WHEN ers_susp_prog_na | ers_susp_prog => IF toggle THEN Check_Ers_Susp_Prog ( DQ => T_DQ(7 downto 0), sts => status, toggle => toggle_sts, sts_check=>sts_check, RY => T_RY, check_err=>check_err); toggle_sts := T_DQ(7 downto 0); --update toggle check END IF;-- WHEN prog_na | prog_active => IF toggle THEN Check_Progr ( DQ => T_DQ(7 downto 0), sts => status, toggle => toggle_sts, sts_check=>sts_check, RY => T_RY, check_err=>check_err); toggle_sts := T_DQ(7 downto 0); --update toggle check END IF; WHEN buff_wr_busy | buff_wr_N_busy => IF toggle THEN Check_Buff_Busy ( DQ => T_DQ(7 downto 0), sts => status, toggle => toggle_sts, sts_check=>sts_check, RY => T_RY, check_err=>check_err); toggle_sts := T_DQ(7 downto 0); --update toggle check END IF; WHEN buff_abort => IF toggle THEN Check_Abort ( DQ => T_DQ(7 downto 0), sts => status, toggle => toggle_sts, sts_check=>sts_check, RY => T_RY, check_err=>check_err); toggle_sts := T_DQ(7 downto 0); --update toggle check END IF; WHEN OTHERS => null; END CASE; -- get firs data for toggle check CASE status IS WHEN prog_active | prog_na | erase_active | erase_na | ers_susp_e | ers_susp_prog | ers_susp_prog_na | buff_wr_busy | buff_wr_N_busy | buff_abort | get_toggle => IF (NOT toggle) OR (status=get_toggle) THEN toggle:=true; toggle_sts := T_DQ(7 downto 0); END IF; WHEN OTHERS => null; END CASE; END IF; END IF; WAIT ON T_A, T_CENeg, T_OENeg, T_WENeg, T_DQ(15), T_BYTENeg;END PROCESS checker;default: PROCESS -- text file input variables FILE mem_f : text is mem_file; FILE prot_f : text is prot_file; FILE secsi_f : text is secsi_file; VARIABLE S_ind : NATURAL RANGE 0 TO SecNum:= 0; VARIABLE ind : NATURAL RANGE 0 TO SecSize:= 0; VARIABLE buf : line;BEGIN --Preload Control ----------------------------------------------------------------------- -- File Read Section ----------------------------------------------------------------------- IF UserPreload THEN --- Sector protection preload IF (prot_file /= "none" ) THEN ind := 0; FactoryProt := '0'; Sec_Prot := (OTHERS => '0'); WHILE (not ENDFILE (prot_f)) LOOP READLINE (prot_f, buf); IF buf(1) = '/' THEN NEXT; ELSIF buf(1) = '@' THEN ind := h(buf(2 to 3)); --address ELSE IF ind > SecNum THEN --SecSi Factory protect preload IF buf(1)='1' THEN FactoryProt := '1'; END IF; ELSE -- Standard Sector prload IF buf(1)='1' THEN Sec_Prot(ind):= '1'; END IF; ind := ind + 1; END IF; END IF; END LOOP; END IF; -- Secure Silicon Sector Region preload IF (SecSi_file /= "none" ) THEN SecSi := (OTHERS => MaxData); ind := 0; WHILE (not ENDFILE (SecSi_f)) LOOP READLINE (SecSi_f, buf); IF buf(1) = '/' THEN NEXT; ELSIF buf(1) = '@' THEN ind := h(buf(2 to 3)); --address ELSE IF ind <= SecSiSize THEN SecSi(ind) := h(buf(1 TO 2)); ind := ind + 1; END IF; END IF; END LOOP; END IF; --- Memory Preload IF (mem_file /= "none" ) THEN ind := 0; Mem := (OTHERS => (OTHERS => MaxData)); -- load sector 0 WHILE (not ENDFILE (mem_f)) LOOP READLINE (mem_f, buf); IF buf(1) = '/' THEN NEXT; ELSIF buf(1) = '@' THEN ind := h(buf(2 to 5)); --address ELSE IF ind <= SecSize THEN Mem(0)(ind) := h(buf(1 to 2)); ind := ind + 1; END IF; END IF; END LOOP; -- load other sectors FOR i IN 1 TO SecNum LOOP Mem(i) := Mem(0); END LOOP; END IF; END IF; ----------------------------------------------------------------------- --CFI array data / AM29LV640MH90R !!! DEVICE SPECIFIC ----------------------------------------------------------------------- --CFI query identification string -- !!!!!! WORD ADDRESSES (x16) - for x8 addressing double addr --CFI query identification string CFI_array(16#10#) := 16#51#; CFI_array(16#11#) := 16#52#; CFI_array(16#12#) := 16#59#; CFI_array(16#13#) := 16#02#; CFI_array(16#14#) := 16#00#; CFI_array(16#15#) := 16#40#; CFI_array(16#16#) := 16#00#; CFI_array(16#17#) := 16#00#; CFI_array(16#18#) := 16#00#; CFI_array(16#19#) := 16#00#; CFI_array(16#1A#) := 16#00#; --system interface string CFI_array(16#1B#) := 16#27#; CFI_array(16#1C#) := 16#36#; CFI_array(16#1D#) := 16#00#; CFI_array(16#1E#) := 16#00#; CFI_array(16#1F#) := 16#07#; CFI_array(16#20#) := 16#07#; CFI_array(16#21#) := 16#0A#; CFI_array(16#22#) := 16#00#; CFI_array(16#23#) := 16#01#; CFI_array(16#24#) := 16#05#; CFI_array(16#25#) := 16#04#; CFI_array(16#26#) := 16#00#; --device geometry definition CFI_array(16#27#) := 16#17#; CFI_array(16#28#) := 16#02#; CFI_array(16#29#) := 16#00#; CFI_array(16#2A#) := 16#05#; CFI_array(16#2B#) := 16#00#; CFI_array(16#2C#) := 16#01#; CFI_array(16#2D#) := 16#7F#; CFI_array(16#2E#) := 16#00#; CFI_array(16#2F#) := 16#00#; CFI_array(16#30#) := 16#01#; CFI_array(16#31#) := 16#00#; CFI_array(16#32#) := 16#00#; CFI_array(16#33#) := 16#00#; CFI_array(16#34#) := 16#00#; CFI_array(16#35#) := 16#00#; CFI_array(16#36#) := 16#00#; CFI_array(16#37#) := 16#00#; CFI_array(16#38#) := 16#00#; CFI_array(16#39#) := 16#00#; CFI_array(16#3A#) := 16#00#; CFI_array(16#3B#) := 16#00#; CFI_array(16#3C#) := 16#00#; --primary vendor-specific extended query CFI_array(16#40#) := 16#50#; CFI_array(16#41#) := 16#52#; CFI_array(16#42#) := 16#49#; CFI_array(16#43#) := 16#31#; CFI_array(16#44#) := 16#33#; CFI_array(16#45#) := 16#08#; CFI_array(16#46#) := 16#02#; CFI_array(16#47#) := 16#01#; CFI_array(16#48#) := 16#01#; CFI_array(16#49#) := 16#04#; CFI_array(16#4A#) := 16#00#; CFI_array(16#4B#) := 16#00#; CFI_array(16#4C#) := 16#01#; CFI_array(16#4D#) := 16#B5#; CFI_array(16#4E#) := 16#C5#; IF TimingModel(11) = 'L' THEN CFI_array(16#4F#) := 16#04#; ELSE CFI_array(16#4F#) := 16#05#; --uniform sectors top protect END IF; CFI_array(16#50#) := 16#01#; WAIT;END PROCESS default;END vhdl_behavioral;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -