Simulation setup improvements:
[c4m-jtag.git] / sim / cocotb / dual_parallel / dual_parallel.vhdl
1 -- Top cell with two instantiations of the tap_controller with parallel scan chains
2
3 library ieee;
4 use ieee.std_logic_1164.ALL;
5
6 use work.c4m_jtag.ALL;
7
8 entity dual_parallel is
9 port (
10 -- Instance 1
11 -- ==========
12 -- JTAG
13 I1_TCK: in std_logic;
14 I1_TMS: in std_logic;
15 I1_TDI: in std_logic;
16 I1_TDO: out std_logic;
17 I1_TRST_N: in std_logic;
18
19 -- Instance 2
20 -- ==========
21 -- JTAG
22 I2_TCK: in std_logic;
23 I2_TMS: in std_logic;
24 I2_TDI: in std_logic;
25 I2_TDO: out std_logic;
26 I2_TRST_N: in std_logic
27 );
28 end dual_parallel;
29
30 architecture rtl of dual_parallel is
31 signal I1_PAD_IN: std_logic;
32 signal I1_PAD_EN: std_logic;
33 signal I1_PAD_OUT: std_logic;
34 signal I2_PAD_IN: std_logic;
35 signal I2_PAD_EN: std_logic;
36 signal I2_PAD_OUT: std_logic;
37 begin
38 CTRL1: c4m_jtag_tap_controller
39 port map (
40 TCK => I1_TCK,
41 TMS => I1_TMS,
42 TDI => I1_TDI,
43 TDO => I1_TDO,
44 TRST_N => I1_TRST_N,
45 STATE => open,
46 NEXT_STATE => open,
47 IR => open,
48 CORE_IN => open,
49 CORE_EN => "1",
50 CORE_OUT => "1",
51 PAD_IN(0) => I1_PAD_IN,
52 PAD_EN(0) => I1_PAD_EN,
53 PAD_OUT(0) => I1_PAD_OUT
54 );
55
56 CTRL2: c4m_jtag_tap_controller
57 port map (
58 TCK => I2_TCK,
59 TMS => I2_TMS,
60 TDI => I2_TDI,
61 TDO => I2_TDO,
62 TRST_N => I2_TRST_N,
63 STATE => open,
64 NEXT_STATE => open,
65 IR => open,
66 CORE_IN => open,
67 CORE_EN => "1",
68 CORE_OUT => "0",
69 PAD_IN(0) => I2_PAD_IN,
70 PAD_EN(0) => I2_PAD_EN,
71 PAD_OUT(0) => I2_PAD_OUT
72 );
73
74 I1_PAD_IN <= I2_PAD_OUT when I2_PAD_EN = '1' else
75 'Z';
76 I2_PAD_IN <= I1_PAD_OUT when I1_PAD_EN = '1' else
77 'Z';
78 end rtl;