in dem Thread Beitrag "Suche Softcore Alternative mit Compiler und Debugger" wurde das Tunneln von Daten über den Jtag Port angesprochen. Ich habe mich gerade versucht für den Spartan6 es auszuprobieren. Zum Testen habe ich das Programm urjtag genutzt, das auch den Xilinx Adapter erkennt. Ich kann die Daten auf meinen LEDs richtig ausgeben aber die Daten nicht korrekt zurücklesen. Es sieht so aus als fehlt einmal Schieben beim Lesen. Kann aber nicht sein update kommt nach dem letzten Schieben und das Schreiben stimmt. Leider fehlt mir ein ordentliches Beispiel von Xilinx. Da ich einen Fehler im Urjtag als auch in meinem Code nicht ausschließen kann Frage ans Forum. Sieht jemand einen Fehler im Code?
1 | --code für Spartan6
|
2 | --Autor René Doß
|
3 | |
4 | Library ieee; |
5 | use IEEE.STD_LOGIC_1164.ALL; |
6 | use IEEE.NUMERIC_STD.ALL; |
7 | |
8 | Library UNISIM; |
9 | use UNISIM.vcomponents.all; |
10 | |
11 | |
12 | |
13 | entity jtag_tap is |
14 | |
15 | port( |
16 | taste0 : in std_logic; |
17 | taste1 : in std_logic; |
18 | taste2 : in std_logic; |
19 | taste3 : in std_logic; |
20 | LED1 :out std_logic; |
21 | LED2 :out std_logic; |
22 | LED3 :out std_logic; |
23 | LED0 :out std_logic |
24 | );
|
25 | |
26 | end entity jtag_tap; |
27 | |
28 | |
29 | architecture syn of jtag_tap is |
30 | |
31 | |
32 | signal capture : std_logic := '0'; -- Test Clock |
33 | signal tdi : std_logic := '0'; -- Test Data In |
34 | signal tdo : std_logic; -- Test Data Out |
35 | signal update : std_logic; |
36 | signal drck : std_logic; |
37 | signal userreg : std_logic_vector(3 downto 0); |
38 | |
39 | |
40 | |
41 | begin
|
42 | |
43 | |
44 | BSCAN_SPARTAN6_inst : BSCAN_SPARTAN6 |
45 | generic map ( |
46 | JTAG_CHAIN => 1 -- Value for USER command. Possible values: (1,2,3 or 4). |
47 | )
|
48 | port map ( |
49 | CAPTURE => capture, -- 1-bit output: CAPTURE output from TAP controller. |
50 | DRCK => drck, -- 1-bit output: Data register output for USER functions. |
51 | RESET => open, -- 1-bit output: Reset output for TAP controller. |
52 | RUNTEST => open, -- 1-bit output: Output signal that gets asserted when TAP controller is in Run Test |
53 | -- Idle state.
|
54 | |
55 | SEL => open, -- 1-bit output: USER active output. |
56 | SHIFT => open, -- 1-bit output: SHIFT output from TAP controller. |
57 | TCK => open, -- 1-bit output: Scan Clock output. Fabric connection to TAP Clock pin. |
58 | TDI => TDI, -- 1-bit output: TDI output from TAP controller. |
59 | TMS => open, -- 1-bit output: Test Mode Select output. Fabric connection to TAP. |
60 | UPDATE => update, -- 1-bit output: UPDATE output from TAP controller |
61 | TDO => TDO -- 1-bit input: Data input for USER function. |
62 | );
|
63 | |
64 | |
65 | process(drck) |
66 | begin
|
67 | if update='1' then |
68 | LED3<=userreg(3); |
69 | LED2<=userreg(2); |
70 | LED1<=userreg(1); |
71 | LED0<=userreg(0); |
72 | end if; |
73 | if rising_edge(drck) then |
74 | |
75 | userreg<= userreg(2 downto 0)& TDI; |
76 | if capture='1' then |
77 | userreg<=taste3 & taste2 &taste1 & taste0; |
78 | end if; |
79 | end if; |
80 | end process; |
81 | |
82 | tdo<=userreg(3); |
83 | end syn; |