From 5acae16a820a53cd84688bc6699d9d7c2458a0c2 Mon Sep 17 00:00:00 2001 From: Gwenhael Goavec-Merou Date: Sat, 5 Oct 2019 19:03:28 +0200 Subject: [PATCH] add design and bitstream to access SPI through JTAG --- spiOverJtag/.gitignore | 1 + spiOverJtag/Makefile | 14 +++++ spiOverJtag/constr.xdc | 9 +++ spiOverJtag/spiOverJtag_xc7a35.bit | Bin 0 -> 2192129 bytes spiOverJtag/xilinx_spiOverJtag.tcl | 38 +++++++++++ spiOverJtag/xilinx_spiOverJtag.vhd | 97 +++++++++++++++++++++++++++++ 6 files changed, 159 insertions(+) create mode 100644 spiOverJtag/.gitignore create mode 100644 spiOverJtag/Makefile create mode 100644 spiOverJtag/constr.xdc create mode 100644 spiOverJtag/spiOverJtag_xc7a35.bit create mode 100644 spiOverJtag/xilinx_spiOverJtag.tcl create mode 100644 spiOverJtag/xilinx_spiOverJtag.vhd diff --git a/spiOverJtag/.gitignore b/spiOverJtag/.gitignore new file mode 100644 index 0000000..a9a5aec --- /dev/null +++ b/spiOverJtag/.gitignore @@ -0,0 +1 @@ +tmp diff --git a/spiOverJtag/Makefile b/spiOverJtag/Makefile new file mode 100644 index 0000000..8be7aa5 --- /dev/null +++ b/spiOverJtag/Makefile @@ -0,0 +1,14 @@ +VIVADO := vivado -nolog -nojournal -mode batch -source +MODEL = xc7a35 +PRJ = spiOverJtag_$(MODEL) + +BIT_PATH = tmp/$(PRJ).runs/impl_1/ +BIT_TMP_FILE = $(BIT_PATH)/*.bit +BIT_FILE = $(PRJ).bit + +$(BIT_FILE) : $(BIT_TMP_FILE) + cp $(BIT_TMP_FILE) $(BIT_FILE) +$(BIT_TMP_FILE): xilinx_spiOverJtag.vhd constr.xdc + $(VIVADO) xilinx_spiOverJtag.tcl -tclargs $(MODEL) +clean: + -rm -rf tmp *.jou *.log .Xil diff --git a/spiOverJtag/constr.xdc b/spiOverJtag/constr.xdc new file mode 100644 index 0000000..72cd66b --- /dev/null +++ b/spiOverJtag/constr.xdc @@ -0,0 +1,9 @@ +set_property CFGBVS VCCO [current_design] +set_property CONFIG_VOLTAGE 3.3 [current_design] +set_property BITSTREAM.CONFIG.SPI_BUSWIDTH {4} [current_design] + +set_property -dict {PACKAGE_PIN L13 IOSTANDARD LVCMOS33} [get_ports {csn}]; +set_property -dict {PACKAGE_PIN K17 IOSTANDARD LVCMOS33} [get_ports {sdi_dq0}]; +set_property -dict {PACKAGE_PIN K18 IOSTANDARD LVCMOS33} [get_ports {sdo_dq1}]; +set_property -dict {PACKAGE_PIN L14 IOSTANDARD LVCMOS33} [get_ports {wpn_dq2}]; +set_property -dict {PACKAGE_PIN M14 IOSTANDARD LVCMOS33} [get_ports {hldn_dq3}]; diff --git a/spiOverJtag/spiOverJtag_xc7a35.bit b/spiOverJtag/spiOverJtag_xc7a35.bit new file mode 100644 index 0000000000000000000000000000000000000000..10c756d32f05dca8fb1607459afdfc94c535fdac GIT binary patch literal 2192129 zcmeI*&u^P&9RTphb|R8yS<;3bMw;%W6nX${&O*!9slq^*I)ns58UlnwyHTcysi1a3 zJ0WXaDm2&ugg{(+fD6+80;H)IPE3dsT#?WuCNA6%2L!KUCvjf?dh9r_{n{T_mY*Nr z=hx@4{W|{9H!QFHtNAa4(yegy^}Sd3?!5l3d*9#t(hqLm{laUvUU}}td$;etuzS7w zwdY%x=e~OT?!CS5-MRjBb^Dnocb?o1FNM`l-P*bG+TP3eUfFs2li}sClGZ)@)OPi$ z>Xq>Au)O`uwJX(Y+gHQw@Zq~}{%^n~gz)>b7sKvB*zbPz;&+m?uv+ZVZY5mpS^CYA!+vAoI|PEXDxhr=^Nh+E(8b=AV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7csfvFc*dw%Mt*g3&k zXOR*D1PBlyK;XE5WBhRsIRXTVA+YxIV$8G4EZ4h~%|y}a2XkA-%o^qL%F3D}Af)7-#=eB@k%p;AvzcEj5^zJ-PMz_&ZyDAmGl^l-JbL1#K!5-N0t5&U zAV7cs0Rj^d*lN5-k=G@CpUQ;*0RjYOQ((1{+o

a%BY`J=THM9fiaT{PCqRGz0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oy$O?MH=~YUf0qC!*6t2>}8G2oNAZfIzf>*TT_M z0tpZxK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RnR=uvRPJvI}_5`vNMPa+`q1NgIYF0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5Fk(}fvr5hds{9PjmZ)?6j(h><&enpF`2`13_*YZ0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZU=jk4es&V0 z4j6M`K>dtYuf0&b1^QWJ@%F6fGk)Sm@mAnxk;U7yqR;rk=caH4OH()}QzAfs009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAVAhgS^%yV7F zB0zuu0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7e?DF`h7B%;%LL`;q$ zPM?w^wxRX~9(yYSVm%@z$BX%WhwO9M z_#wNW`tZ$<4mrhS$avvH3zYuduSvaYWvOea!eIsW|0ZAPY*l){vrI{j0$pBYZv48} z`1M{D%Eu|tWlxsg=`}#TdqvW{Sn2o#R?hY5YrPgiV;?hn>3Gt|Y>28}@9{4EbBIoa zj$fe5F@8DoPW|`?)gu7{1PIKcK;|V>*!X<+RXWUccgdsl%-j7&Ns|5dh5Lo58@s^9 zoo1I^|K_NTeK;L<5lAv+y`HSpV3dh=KKucWkmRu?IF1&_|%sr!KzgW_+kf0t5(*L0~bqj~lUp z;!Y^A-s{7zj(#ugmz3Y^s8BEtf!a|g=e~ZF?w_jnuU309f!a~?bGt|BfvGN^Qx0q+ zfWQn0Y-ay}@3$r&s`S$twl3+_pc4JPm0GVZl#fN==)tk^%g7FonnX4b7AMg8w$$?Z zh?eyq(}dTehAS zHm)wY2&^o}595#$Z*`K$m9w#}7eYPrN+GtTxZwmgKN20kyO8dQ$4a!9z!?(Q{KRmJ z@$@yE*C^5J8$-2P3f>qFEZE3#n~%me zUAX^7H7uRAC$V57$E{q5ZMty($4UAyu_v)$;s_8RK!CtR1y+XnO;Ggry(hXPgA%*Y)knu3DmOv*psY?JOKg(2oRVJfir&@xQ^Pu2mu5L5Xf0zGyZ#!KGDi)Z$9+b zfdkbCMhFzywljXhv~j8ma5@F>o%1B f{`L=ld$4b spi flash + sdi_dq0 <= tdi; + tdo <= tdi when (sel) = '0' else sdo_dq1; + csn <= fsm_csn; + + tmp_cap_s <= capture and sel; + tmp_up_s <= update and sel; + tmp_shift_s <= shift and sel; + + process(drck, runtest) begin + if runtest = '1' then + fsm_csn <= '1'; + elsif rising_edge(drck) then + if tmp_cap_s = '1' then + fsm_csn <= '0'; + elsif tmp_up_s = '1' then + fsm_csn <= '1'; + else + fsm_csn <= fsm_csn; + end if; + end if; + end process; + + startupe2_inst : STARTUPE2 + generic map ( + PROG_USR => "FALSE", -- Activate program event security feature. Requires encrypted bitstreams. + SIM_CCLK_FREQ => 0.0 -- Set the Configuration Clock Frequency(ns) for simulation. + ) + port map ( + CFGCLK => open, -- 1-bit output: Configuration main clock output + CFGMCLK => open, -- 1-bit output: Configuration internal oscillator clock output + EOS => open, -- 1-bit output: Active high output signal indicating the End Of Startup. + PREQ => open, -- 1-bit output: PROGRAM request to fabric output + CLK => '0', -- 1-bit input: User start-up clock input + GSR => '0', -- 1-bit input: Global Set/Reset input (GSR cannot be used for the port name) + GTS => '0', -- 1-bit input: Global 3-state input (GTS cannot be used for the port name) + KEYCLEARB => '0', -- 1-bit input: Clear AES Decrypter Key input from Battery-Backed RAM (BBRAM) + PACK => '1', -- 1-bit input: PROGRAM acknowledge input + USRCCLKO => drck, -- 1-bit input: User CCLK input + USRCCLKTS => '0', -- 1-bit input: User CCLK 3-state enable input + USRDONEO => '1', -- 1-bit input: User DONE pin output control + USRDONETS => '1' -- 1-bit input: User DONE 3-state enable output + ); + + + bscane2_inst : BSCANE2 + generic map ( + JTAG_CHAIN => 1 -- Value for USER command. + ) + port map ( + CAPTURE => capture, -- 1-bit output: CAPTURE output from TAP controller. + DRCK => drck, -- 1-bit output: Gated TCK output. When SEL + -- is asserted, DRCK toggles when + -- CAPTURE or SHIFT are asserted. + RESET => open, -- 1-bit output: Reset output for TAP controller. + RUNTEST => runtest, -- 1-bit output: Output asserted when TAP + -- controller is in Run Test/Idle state. + SEL => sel, -- 1-bit output: USER instruction active output. + SHIFT => shift, -- 1-bit output: SHIFT output from TAP controller. + TCK => open, -- 1-bit output: Test Clock output. + -- Fabric connection to TAP Clock pin. + TDI => tdi, -- 1-bit output: Test Data Input (TDI) output + -- from TAP controller. + TMS => open, -- 1-bit output: Test Mode Select output. + -- Fabric connection to TAP. + UPDATE => update, -- 1-bit output: UPDATE output from TAP controller + TDO => tdo -- 1-bit input: Test Data Output (TDO) input + -- for USER function. + ); + +end architecture bhv;