orinoflow
Newbie level 5
- Joined
- Nov 20, 2010
- Messages
- 8
- Helped
- 0
- Reputation
- 0
- Reaction score
- 0
- Trophy points
- 1,281
- Activity points
- 1,377
hello every body!
I met a strange thing on my chip. It goes into testmode very easily. By my design this is not impossible!
The testmode state is controlled by the following RTL code. It is very clear to go into testmode, we must add a complex wave form on FCLK and DATA, and any erro on the wave form will get the statemachine back to IDLE state.
FCLK and DATA is connected to the PAD's input pin directly.
But now on the test, I find that the chip often go into testmode, and I am sure the two PADs related to FCLK and DATA can't get a legal wave form that can led it into testmode.
If I stuck FCLK to gnd, It will no go into testmode.
Who knows somthing about this ?
thanks!
I met a strange thing on my chip. It goes into testmode very easily. By my design this is not impossible!
The testmode state is controlled by the following RTL code. It is very clear to go into testmode, we must add a complex wave form on FCLK and DATA, and any erro on the wave form will get the statemachine back to IDLE state.
FCLK and DATA is connected to the PAD's input pin directly.
But now on the test, I find that the chip often go into testmode, and I am sure the two PADs related to FCLK and DATA can't get a legal wave form that can led it into testmode.
If I stuck FCLK to gnd, It will no go into testmode.
Who knows somthing about this ?
thanks!
Code dot - [expand] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 library ieee; use ieee.Std_Logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_unsigned."+"; use ieee.std_logic_unsigned.conv_integer; use ieee.std_logic_arith.conv_unsigned; entity IntoTestmode is port( notReset : in std_logic; FCLK : in std_logic; DATA : in std_logic; TESTMODE : out std_logic ); end IntoTestmode; architecture RTL of IntoTestmode is type t_Serial is (e_SYNC0, e_SYNC1, e_SYNC2, e_SYNC3, e_SYNC4, e_SYNC5, e_SYNC6, e_SYNC7, e_SYNC8, e_SYNC9, e_SYNC10, e_SYNC11, e_SYNC12, e_SYNC13, e_SYNC14, e_SYNC15, e_SYNC16, e_SYNC17, e_SYNC18, e_SYNC19, e_SYNC20, e_SYNC21, e_SYNC22, e_SYNC23, e_SYNC24, e_SYNC25, e_SYNC26, e_SYNC27, e_SYNC28, e_SYNC29, e_SYNC30, e_IDLE); signal Serial : t_Serial; begin p_Main: process(FCLK, notReset) begin if notReset = '0' then TESTMODE <= '0'; Serial <= e_IDLE; elsif (FCLK'event and FCLK = '1') then -- '1''0''1''1''0''1''1''1' --LSB--> 0xED -- '0''1''0''0''1''1''0''1' --LSB--> 0xB2 -- '0''1''0''0''1''0''1''1' --LSB--> 0xD2 -- '0''1''1''1''0''0''1''X' --LSB--> 0xCE/0x4E --SYNC : 0xEDB2D24E : CHECK 0xEDB2D2CE : BRUN case Serial is when e_IDLE => if DATA = '1' then Serial <= e_SYNC0; else Serial <= e_IDLE; end if; when e_SYNC0 => if DATA = '0' then Serial <= e_SYNC1; else Serial <= e_IDLE; end if; when e_SYNC1 => if DATA = '1' then Serial <= e_SYNC2; else Serial <= e_IDLE; end if; when e_SYNC2 => if DATA = '1' then Serial <= e_SYNC3; else Serial <= e_IDLE; end if; when e_SYNC3 => if DATA = '0' then Serial <= e_SYNC4; else Serial <= e_IDLE; end if; when e_SYNC4 => if DATA = '1' then Serial <= e_SYNC5; else Serial <= e_IDLE; end if; when e_SYNC5 => if DATA = '1' then Serial <= e_SYNC6; else Serial <= e_IDLE; end if; when e_SYNC6 => if DATA = '1' then Serial <= e_SYNC7; else Serial <= e_IDLE; end if; when e_SYNC7 => if DATA = '0' then Serial <= e_SYNC8; else Serial <= e_IDLE; end if; when e_SYNC8 => if DATA = '1' then Serial <= e_SYNC9; else Serial <= e_IDLE; end if; when e_SYNC9 => if DATA = '0' then Serial <= e_SYNC10; else Serial <= e_IDLE; end if; when e_SYNC10 => if DATA = '0' then Serial <= e_SYNC11; else Serial <= e_IDLE; end if; when e_SYNC11 => if DATA = '1' then Serial <= e_SYNC12; else Serial <= e_IDLE; end if; when e_SYNC12 => if DATA = '1' then Serial <= e_SYNC13; else Serial <= e_IDLE; end if; when e_SYNC13 => if DATA = '0' then Serial <= e_SYNC14; else Serial <= e_IDLE; end if; when e_SYNC14 => if DATA = '1' then Serial <= e_SYNC15; else Serial <= e_IDLE; end if; when e_SYNC15 => if DATA = '0' then Serial <= e_SYNC16; else Serial <= e_IDLE; end if; when e_SYNC16 => if DATA = '1' then Serial <= e_SYNC17; else Serial <= e_IDLE; end if; when e_SYNC17 => if DATA = '0' then Serial <= e_SYNC18; else Serial <= e_IDLE; end if; when e_SYNC18 => if DATA = '0' then Serial <= e_SYNC19; else Serial <= e_IDLE; end if; when e_SYNC19 => if DATA = '1' then Serial <= e_SYNC20; else Serial <= e_IDLE; end if; when e_SYNC20 => if DATA = '0' then Serial <= e_SYNC21; else Serial <= e_IDLE; end if; when e_SYNC21 => if DATA = '1' then Serial <= e_SYNC22; else Serial <= e_IDLE; end if; when e_SYNC22 => if DATA = '1' then Serial <= e_SYNC23; else Serial <= e_IDLE; end if; when e_SYNC23 => if DATA = '0' then Serial <= e_SYNC24; else Serial <= e_IDLE; end if; when e_SYNC24 => if DATA = '1' then Serial <= e_SYNC25; else Serial <= e_IDLE; end if; when e_SYNC25 => if DATA = '1' then Serial <= e_SYNC26; else Serial <= e_IDLE; end if; when e_SYNC26 => if DATA = '1' then Serial <= e_SYNC27; else Serial <= e_IDLE; end if; when e_SYNC27 => if DATA = '0' then Serial <= e_SYNC28; else Serial <= e_IDLE; end if; when e_SYNC28 => if DATA = '0' then Serial <= e_SYNC29; else Serial <= e_IDLE; end if; when e_SYNC29 => if DATA = '1' then Serial <= e_SYNC30; end if; when e_SYNC30 => TESTMODE <= '1'; end case; end if; end process p_Main; end RTL;
Last edited by a moderator: