wzab
2010-08-03 19:48:24 UTC
This post contains the updated version of the code published in news:***@wzab.nasz.dom
(posted to alt.sources with the subject "Example code for reading and writing data via BSCAN_SPARTAN3 with urJTAG and Python")
The updated version works with SPARTAN6 chips, and has been tested with the SP601 Development Kit.
The code implementing the controller for internal parallel bus is available in news:***@wzab.nasz.dom
#!/bin/sh
# This is a shell archive (produced by GNU sharutils 4.9).
# To extract the files from this archive, save it to some FILE, remove
# everything before the `#!/bin/sh' line above, then type `sh FILE'.
#
lock_dir=_sh07772
# Made on 2010-08-03 21:38 CEST by <***@wzab>.
# Source directory was `/tmp/bscan'.
#
# Existing files will *not* be overwritten, unless `-c' is specified.
#
# This shar contains:
# length mode name
# ------ ---------- ------------------------------------------
# 3667 -rw-r--r-- bscan_cap_upd.vhd
# 2275 -rw-r--r-- bscan_top.vhd
# 724 -rw-r--r-- system.ucf
#
MD5SUM=${MD5SUM-md5sum}
f=`${MD5SUM} --version | egrep '^md5sum .*(core|text)utils'`
test -n "${f}" && md5check=true || md5check=false
${md5check} || \
echo 'Note: not verifying md5sums. Consider installing GNU coreutils.'
save_IFS="${IFS}"
IFS="${IFS}:"
gettext_dir=FAILED
locale_dir=FAILED
first_param="$1"
for dir in $PATH
do
if test "$gettext_dir" = FAILED && test -f $dir/gettext \
&& ($dir/gettext --version >/dev/null 2>&1)
then
case `$dir/gettext --version 2>&1 | sed 1q` in
*GNU*) gettext_dir=$dir ;;
esac
fi
if test "$locale_dir" = FAILED && test -f $dir/shar \
&& ($dir/shar --print-text-domain-dir >/dev/null 2>&1)
then
locale_dir=`$dir/shar --print-text-domain-dir`
fi
done
IFS="$save_IFS"
if test "$locale_dir" = FAILED || test "$gettext_dir" = FAILED
then
echo=echo
else
TEXTDOMAINDIR=$locale_dir
export TEXTDOMAINDIR
TEXTDOMAIN=sharutils
export TEXTDOMAIN
echo="$gettext_dir/gettext -s"
fi
if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null
then if (echo -n test; echo 1,2,3) | grep n >/dev/null
then shar_n= shar_c='
'
else shar_n=-n shar_c= ; fi
else shar_n= shar_c='\c' ; fi
f=shar-touch.$$
st1=200112312359.59
st2=123123592001.59
st2tr=123123592001.5 # old SysV 14-char limit
st3=1231235901
if touch -am -t ${st1} ${f} >/dev/null 2>&1 && \
test ! -f ${st1} && test -f ${f}; then
shar_touch='touch -am -t $1$2$3$4$5$6.$7 "$8"'
elif touch -am ${st2} ${f} >/dev/null 2>&1 && \
test ! -f ${st2} && test ! -f ${st2tr} && test -f ${f}; then
shar_touch='touch -am $3$4$5$6$1$2.$7 "$8"'
elif touch -am ${st3} ${f} >/dev/null 2>&1 && \
test ! -f ${st3} && test -f ${f}; then
shar_touch='touch -am $3$4$5$6$2 "$8"'
else
shar_touch=:
echo
${echo} 'WARNING: not restoring timestamps. Consider getting and
installing GNU `touch'\'', distributed in GNU coreutils...'
echo
fi
rm -f ${st1} ${st2} ${st2tr} ${st3} ${f}
#
if test ! -d ${lock_dir} ; then :
else ${echo} "lock directory ${lock_dir} exists"
exit 1
fi
if mkdir ${lock_dir}
then ${echo} "x - created lock directory ${lock_dir}."
else ${echo} "x - failed to create lock directory ${lock_dir}."
exit 1
fi
# ============= bscan_cap_upd.vhd ==============
if test -f 'bscan_cap_upd.vhd' && test "$first_param" != -c; then
${echo} "x - SKIPPING bscan_cap_upd.vhd (file already exists)"
else
${echo} "x - extracting bscan_cap_upd.vhd (text)"
sed 's/^X//' << 'SHAR_EOF' > 'bscan_cap_upd.vhd' &&
-------------------------------------------------------------------------------
-- Title : bscan_cap_upd - sample interface to BSCAN_SPARTAN6 component
-- Project :
-------------------------------------------------------------------------------
-- File : bscan_cap_upd.vhd
-- Author : Wojciech M. Zabolotny
-- Company :
-- Created : 2009-05-20
-- Last update: 2010-08-03
-- Platform :
-- Standard : VHDL'87
-------------------------------------------------------------------------------
-- Description: This implementation is based on the Figure 4 in the Xilinx
-- XAPP188 note (even though it is for BSCAN_SPARTAN2)
-- http://www.xilinx.com/support/documentation/application_notes/xapp188.pdf
-- Then it has been converted for the BSCAN_SPARTAN6, using info
-- found in: http://www.xilinx.com/support/documentation/sw_manuals/xilinx11/spartan6_hdl.pdf
-------------------------------------------------------------------------------
-- Copyright (c) 2009 Wojciech M. Zabolotny (wzab<at>ise.pw.edu.pl)
-- However this is PUBLIC DOMAIN code
-------------------------------------------------------------------------------
-- Revisions :
-- Date Version Author Description
-- 2009-05-21 1.0 wzab Created
-------------------------------------------------------------------------------
--
--
X
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use ieee.std_logic_unsigned.all;
library work;
X
entity bscan_cap_upd is
X generic (
X DR_WIDTH : integer := 16);
X port (
X captured_data : in std_logic_vector(DR_WIDTH-1 downto 0);
X written_data : out std_logic_vector(DR_WIDTH-1 downto 0);
X wr_strobe : out std_logic
X );
end bscan_cap_upd;
X
architecture syn of bscan_cap_upd is
X
X component BSCAN_SPARTAN6
X generic (JTAG_CHAIN : integer);
X port (CAPTURE : out std_ulogic;
X DRCK : out std_ulogic;
X RESET : out std_ulogic;
X RUNTEST : out std_ulogic;
X SEL : out std_ulogic;
X SHIFT : out std_ulogic;
X TCK : out std_ulogic;
X TDI : out std_ulogic;
X TMS : out std_ulogic;
X UPDATE : out std_ulogic;
X TDO : in std_ulogic);
X end component;
X signal jt_shift, jt_tck, jt_update, jt_tdi, jt_tdo, jt_tms,
X jt_runtest, jt_drck,
X jt_capture, jt_sel, jt_reset, jt1, jt2, jt3 : std_ulogic := '0';
X signal dr : std_logic_vector(DR_WIDTH-1 downto 0);
X
X
begin
X
X BSCAN_SPARTAN6_1 : BSCAN_SPARTAN6
X generic map ( JTAG_CHAIN=>1)
X port map (
X CAPTURE => jt_CAPTURE,
X DRCK => jt_DRCK,
X RESET => jt_RESET,
X RUNTEST => jt_RUNTEST,
X SEL => jt_SEL,
X SHIFT => jt_SHIFT,
X TDI => jt_TDI,
X TCK => jt_TCK,
X TMS => jt_TMS,
X UPDATE => jt_UPDATE,
X TDO => jt_TDO);
X
X -- Load and shift data
X pjtag : process (jt_drck, jt_reset)
X begin -- process
X if jt_reset = '1' then
X dr <= (others => '0');
X elsif jt_drck'event and jt_drck = '1' then
X if jt_shift = '0' then
X dr <= captured_data;
X else
X dr(DR_WIDTH-1) <= jt_tdi;
X for i in 0 to DR_WIDTH-2 loop
X dr(i) <= dr(i+1);
X end loop; -- i
X end if;
X end if; -- jt_reset & jt_drck1
X end process pjtag;
X
X jt_TDO <= dr(0);
X
X pupd : process(jt_reset, jt_update)
X begin -- process
X if jt_reset = '1' then
X written_data <= (others => '1');
X elsif jt_update'event and jt_update = '1' then
X if jt_sel = '1' then
X written_data <= dr;
X end if;
X end if;
X end process pupd;
X
X wr_strobe <= jt_update and jt_sel;
X
end syn;
SHAR_EOF
(set 20 10 08 03 21 36 15 'bscan_cap_upd.vhd'
eval "${shar_touch}") && \
chmod 0644 'bscan_cap_upd.vhd'
if test $? -ne 0
then ${echo} "restore of bscan_cap_upd.vhd failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'bscan_cap_upd.vhd': 'MD5 check failed'
) << \SHAR_EOF
e7341d3769914ce63a01d5e94de09d94 bscan_cap_upd.vhd
SHAR_EOF
else
test `LC_ALL=C wc -c < 'bscan_cap_upd.vhd'` -ne 3667 && \
${echo} "restoration warning: size of 'bscan_cap_upd.vhd' is not 3667"
fi
fi
# ============= bscan_top.vhd ==============
if test -f 'bscan_top.vhd' && test "$first_param" != -c; then
${echo} "x - SKIPPING bscan_top.vhd (file already exists)"
else
${echo} "x - extracting bscan_top.vhd (text)"
sed 's/^X//' << 'SHAR_EOF' > 'bscan_top.vhd' &&
-------------------------------------------------------------------------------
-- Title : Demo code for SP601 - communication via JTAG with the user core
-- Project :
-------------------------------------------------------------------------------
-- File : bscan_top.vhd
-- Author : Wojciech M. Zabolotny <***@ise.pw.edu.pl>
-- Company :
-- Created : 2007-12-31
-- Last update: 2010-08-03
-- Platform :
-- Standard : VHDL
-------------------------------------------------------------------------------
-- Description:
-- This code shows, how it is possible to communicate with the user's core
-- via JTAG interface (via BSCAN_SPARTAN6 component)
-------------------------------------------------------------------------------
-- Copyright (c) 2010
-- This is public domain code!!!
-------------------------------------------------------------------------------
-- Revisions :
-- Date Version Author Description
-- 2007-12-31 1.0 wzab Created
-------------------------------------------------------------------------------
X
X
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
X
entity lcd_test is
X
X port (
X led : out std_logic_vector(3 downto 0);
X switches : in std_logic_vector(3 downto 0);
X flash_oen : out std_logic;
X flash_wen : out std_logic;
X flash_cen : out std_logic);
X
end lcd_test;
X
architecture beh of lcd_test is
X
X component bscan_cap_upd
X generic (
X DR_WIDTH : integer);
X port (
X captured_data : in std_logic_vector(DR_WIDTH-1 downto 0);
X written_data : out std_logic_vector(DR_WIDTH-1 downto 0);
X wr_strobe : out std_logic);
X end component;
X
X signal captured_data : std_logic_vector(7 downto 0);
X signal written_data : std_logic_vector(7 downto 0);
X signal wr_strobe : std_logic;
X
begin -- beh
X
X flash_cen <= '1';
X flash_wen <= '1';
X flash_oen <= '1';
X
X captured_data(3 downto 0) <= switches;
X captured_data(7 downto 4) <= (others => '0');
X led <= written_data(3 downto 0);
X
X bscan_cap_upd_1 : bscan_cap_upd
X generic map (
X DR_WIDTH => 8)
X port map (
X captured_data => captured_data,
X written_data => written_data,
X wr_strobe => wr_strobe);
X
end beh;
SHAR_EOF
(set 20 10 08 03 21 37 57 'bscan_top.vhd'
eval "${shar_touch}") && \
chmod 0644 'bscan_top.vhd'
if test $? -ne 0
then ${echo} "restore of bscan_top.vhd failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'bscan_top.vhd': 'MD5 check failed'
) << \SHAR_EOF
f7f98f22704d402f81bb5ee993c5bb00 bscan_top.vhd
SHAR_EOF
else
test `LC_ALL=C wc -c < 'bscan_top.vhd'` -ne 2275 && \
${echo} "restoration warning: size of 'bscan_top.vhd' is not 2275"
fi
fi
# ============= system.ucf ==============
if test -f 'system.ucf' && test "$first_param" != -c; then
${echo} "x - SKIPPING system.ucf (file already exists)"
else
${echo} "x - extracting system.ucf (text)"
sed 's/^X//' << 'SHAR_EOF' > 'system.ucf' &&
X
Net led<0> LOC = E13 | IOSTANDARD = LVCMOS25;
Net led<1> LOC = C14 | IOSTANDARD = LVCMOS25;
Net led<2> LOC = C4 | IOSTANDARD = LVCMOS25;
Net led<3> LOC = A4 | IOSTANDARD = LVCMOS25;
X
Net switches<0> LOC = P4 | IOSTANDARD = LVCMOS18;
Net switches<1> LOC = F6 | IOSTANDARD = LVCMOS18;
Net switches<2> LOC = E4 | IOSTANDARD = LVCMOS18;
Net switches<3> LOC = F5 | IOSTANDARD = LVCMOS18;
X
X
Net flash_wen LOC=M16;
Net flash_wen SLEW = SLOW;
Net flash_wen DRIVE = 4;
Net flash_wen IOSTANDARD = LVCMOS25;
X
Net flash_oen LOC=L18;
Net flash_oen SLEW = SLOW;
Net flash_oen DRIVE = 4;
Net flash_oen IOSTANDARD = LVCMOS25;
X
Net flash_cen LOC=L17;
Net flash_cen SLEW = SLOW;
Net flash_cen DRIVE = 4;
Net flash_cen IOSTANDARD = LVCMOS25;
SHAR_EOF
(set 20 10 08 03 21 32 24 'system.ucf'
eval "${shar_touch}") && \
chmod 0644 'system.ucf'
if test $? -ne 0
then ${echo} "restore of system.ucf failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'system.ucf': 'MD5 check failed'
) << \SHAR_EOF
4a13afa1a156e63e415d334419f49fc4 system.ucf
SHAR_EOF
else
test `LC_ALL=C wc -c < 'system.ucf'` -ne 724 && \
${echo} "restoration warning: size of 'system.ucf' is not 724"
fi
fi
if rm -fr ${lock_dir}
then ${echo} "x - removed lock directory ${lock_dir}."
else ${echo} "x - failed to remove lock directory ${lock_dir}."
exit 1
fi
exit 0
(posted to alt.sources with the subject "Example code for reading and writing data via BSCAN_SPARTAN3 with urJTAG and Python")
The updated version works with SPARTAN6 chips, and has been tested with the SP601 Development Kit.
The code implementing the controller for internal parallel bus is available in news:***@wzab.nasz.dom
#!/bin/sh
# This is a shell archive (produced by GNU sharutils 4.9).
# To extract the files from this archive, save it to some FILE, remove
# everything before the `#!/bin/sh' line above, then type `sh FILE'.
#
lock_dir=_sh07772
# Made on 2010-08-03 21:38 CEST by <***@wzab>.
# Source directory was `/tmp/bscan'.
#
# Existing files will *not* be overwritten, unless `-c' is specified.
#
# This shar contains:
# length mode name
# ------ ---------- ------------------------------------------
# 3667 -rw-r--r-- bscan_cap_upd.vhd
# 2275 -rw-r--r-- bscan_top.vhd
# 724 -rw-r--r-- system.ucf
#
MD5SUM=${MD5SUM-md5sum}
f=`${MD5SUM} --version | egrep '^md5sum .*(core|text)utils'`
test -n "${f}" && md5check=true || md5check=false
${md5check} || \
echo 'Note: not verifying md5sums. Consider installing GNU coreutils.'
save_IFS="${IFS}"
IFS="${IFS}:"
gettext_dir=FAILED
locale_dir=FAILED
first_param="$1"
for dir in $PATH
do
if test "$gettext_dir" = FAILED && test -f $dir/gettext \
&& ($dir/gettext --version >/dev/null 2>&1)
then
case `$dir/gettext --version 2>&1 | sed 1q` in
*GNU*) gettext_dir=$dir ;;
esac
fi
if test "$locale_dir" = FAILED && test -f $dir/shar \
&& ($dir/shar --print-text-domain-dir >/dev/null 2>&1)
then
locale_dir=`$dir/shar --print-text-domain-dir`
fi
done
IFS="$save_IFS"
if test "$locale_dir" = FAILED || test "$gettext_dir" = FAILED
then
echo=echo
else
TEXTDOMAINDIR=$locale_dir
export TEXTDOMAINDIR
TEXTDOMAIN=sharutils
export TEXTDOMAIN
echo="$gettext_dir/gettext -s"
fi
if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null
then if (echo -n test; echo 1,2,3) | grep n >/dev/null
then shar_n= shar_c='
'
else shar_n=-n shar_c= ; fi
else shar_n= shar_c='\c' ; fi
f=shar-touch.$$
st1=200112312359.59
st2=123123592001.59
st2tr=123123592001.5 # old SysV 14-char limit
st3=1231235901
if touch -am -t ${st1} ${f} >/dev/null 2>&1 && \
test ! -f ${st1} && test -f ${f}; then
shar_touch='touch -am -t $1$2$3$4$5$6.$7 "$8"'
elif touch -am ${st2} ${f} >/dev/null 2>&1 && \
test ! -f ${st2} && test ! -f ${st2tr} && test -f ${f}; then
shar_touch='touch -am $3$4$5$6$1$2.$7 "$8"'
elif touch -am ${st3} ${f} >/dev/null 2>&1 && \
test ! -f ${st3} && test -f ${f}; then
shar_touch='touch -am $3$4$5$6$2 "$8"'
else
shar_touch=:
echo
${echo} 'WARNING: not restoring timestamps. Consider getting and
installing GNU `touch'\'', distributed in GNU coreutils...'
echo
fi
rm -f ${st1} ${st2} ${st2tr} ${st3} ${f}
#
if test ! -d ${lock_dir} ; then :
else ${echo} "lock directory ${lock_dir} exists"
exit 1
fi
if mkdir ${lock_dir}
then ${echo} "x - created lock directory ${lock_dir}."
else ${echo} "x - failed to create lock directory ${lock_dir}."
exit 1
fi
# ============= bscan_cap_upd.vhd ==============
if test -f 'bscan_cap_upd.vhd' && test "$first_param" != -c; then
${echo} "x - SKIPPING bscan_cap_upd.vhd (file already exists)"
else
${echo} "x - extracting bscan_cap_upd.vhd (text)"
sed 's/^X//' << 'SHAR_EOF' > 'bscan_cap_upd.vhd' &&
-------------------------------------------------------------------------------
-- Title : bscan_cap_upd - sample interface to BSCAN_SPARTAN6 component
-- Project :
-------------------------------------------------------------------------------
-- File : bscan_cap_upd.vhd
-- Author : Wojciech M. Zabolotny
-- Company :
-- Created : 2009-05-20
-- Last update: 2010-08-03
-- Platform :
-- Standard : VHDL'87
-------------------------------------------------------------------------------
-- Description: This implementation is based on the Figure 4 in the Xilinx
-- XAPP188 note (even though it is for BSCAN_SPARTAN2)
-- http://www.xilinx.com/support/documentation/application_notes/xapp188.pdf
-- Then it has been converted for the BSCAN_SPARTAN6, using info
-- found in: http://www.xilinx.com/support/documentation/sw_manuals/xilinx11/spartan6_hdl.pdf
-------------------------------------------------------------------------------
-- Copyright (c) 2009 Wojciech M. Zabolotny (wzab<at>ise.pw.edu.pl)
-- However this is PUBLIC DOMAIN code
-------------------------------------------------------------------------------
-- Revisions :
-- Date Version Author Description
-- 2009-05-21 1.0 wzab Created
-------------------------------------------------------------------------------
--
--
X
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use ieee.std_logic_unsigned.all;
library work;
X
entity bscan_cap_upd is
X generic (
X DR_WIDTH : integer := 16);
X port (
X captured_data : in std_logic_vector(DR_WIDTH-1 downto 0);
X written_data : out std_logic_vector(DR_WIDTH-1 downto 0);
X wr_strobe : out std_logic
X );
end bscan_cap_upd;
X
architecture syn of bscan_cap_upd is
X
X component BSCAN_SPARTAN6
X generic (JTAG_CHAIN : integer);
X port (CAPTURE : out std_ulogic;
X DRCK : out std_ulogic;
X RESET : out std_ulogic;
X RUNTEST : out std_ulogic;
X SEL : out std_ulogic;
X SHIFT : out std_ulogic;
X TCK : out std_ulogic;
X TDI : out std_ulogic;
X TMS : out std_ulogic;
X UPDATE : out std_ulogic;
X TDO : in std_ulogic);
X end component;
X signal jt_shift, jt_tck, jt_update, jt_tdi, jt_tdo, jt_tms,
X jt_runtest, jt_drck,
X jt_capture, jt_sel, jt_reset, jt1, jt2, jt3 : std_ulogic := '0';
X signal dr : std_logic_vector(DR_WIDTH-1 downto 0);
X
X
begin
X
X BSCAN_SPARTAN6_1 : BSCAN_SPARTAN6
X generic map ( JTAG_CHAIN=>1)
X port map (
X CAPTURE => jt_CAPTURE,
X DRCK => jt_DRCK,
X RESET => jt_RESET,
X RUNTEST => jt_RUNTEST,
X SEL => jt_SEL,
X SHIFT => jt_SHIFT,
X TDI => jt_TDI,
X TCK => jt_TCK,
X TMS => jt_TMS,
X UPDATE => jt_UPDATE,
X TDO => jt_TDO);
X
X -- Load and shift data
X pjtag : process (jt_drck, jt_reset)
X begin -- process
X if jt_reset = '1' then
X dr <= (others => '0');
X elsif jt_drck'event and jt_drck = '1' then
X if jt_shift = '0' then
X dr <= captured_data;
X else
X dr(DR_WIDTH-1) <= jt_tdi;
X for i in 0 to DR_WIDTH-2 loop
X dr(i) <= dr(i+1);
X end loop; -- i
X end if;
X end if; -- jt_reset & jt_drck1
X end process pjtag;
X
X jt_TDO <= dr(0);
X
X pupd : process(jt_reset, jt_update)
X begin -- process
X if jt_reset = '1' then
X written_data <= (others => '1');
X elsif jt_update'event and jt_update = '1' then
X if jt_sel = '1' then
X written_data <= dr;
X end if;
X end if;
X end process pupd;
X
X wr_strobe <= jt_update and jt_sel;
X
end syn;
SHAR_EOF
(set 20 10 08 03 21 36 15 'bscan_cap_upd.vhd'
eval "${shar_touch}") && \
chmod 0644 'bscan_cap_upd.vhd'
if test $? -ne 0
then ${echo} "restore of bscan_cap_upd.vhd failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'bscan_cap_upd.vhd': 'MD5 check failed'
) << \SHAR_EOF
e7341d3769914ce63a01d5e94de09d94 bscan_cap_upd.vhd
SHAR_EOF
else
test `LC_ALL=C wc -c < 'bscan_cap_upd.vhd'` -ne 3667 && \
${echo} "restoration warning: size of 'bscan_cap_upd.vhd' is not 3667"
fi
fi
# ============= bscan_top.vhd ==============
if test -f 'bscan_top.vhd' && test "$first_param" != -c; then
${echo} "x - SKIPPING bscan_top.vhd (file already exists)"
else
${echo} "x - extracting bscan_top.vhd (text)"
sed 's/^X//' << 'SHAR_EOF' > 'bscan_top.vhd' &&
-------------------------------------------------------------------------------
-- Title : Demo code for SP601 - communication via JTAG with the user core
-- Project :
-------------------------------------------------------------------------------
-- File : bscan_top.vhd
-- Author : Wojciech M. Zabolotny <***@ise.pw.edu.pl>
-- Company :
-- Created : 2007-12-31
-- Last update: 2010-08-03
-- Platform :
-- Standard : VHDL
-------------------------------------------------------------------------------
-- Description:
-- This code shows, how it is possible to communicate with the user's core
-- via JTAG interface (via BSCAN_SPARTAN6 component)
-------------------------------------------------------------------------------
-- Copyright (c) 2010
-- This is public domain code!!!
-------------------------------------------------------------------------------
-- Revisions :
-- Date Version Author Description
-- 2007-12-31 1.0 wzab Created
-------------------------------------------------------------------------------
X
X
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
X
entity lcd_test is
X
X port (
X led : out std_logic_vector(3 downto 0);
X switches : in std_logic_vector(3 downto 0);
X flash_oen : out std_logic;
X flash_wen : out std_logic;
X flash_cen : out std_logic);
X
end lcd_test;
X
architecture beh of lcd_test is
X
X component bscan_cap_upd
X generic (
X DR_WIDTH : integer);
X port (
X captured_data : in std_logic_vector(DR_WIDTH-1 downto 0);
X written_data : out std_logic_vector(DR_WIDTH-1 downto 0);
X wr_strobe : out std_logic);
X end component;
X
X signal captured_data : std_logic_vector(7 downto 0);
X signal written_data : std_logic_vector(7 downto 0);
X signal wr_strobe : std_logic;
X
begin -- beh
X
X flash_cen <= '1';
X flash_wen <= '1';
X flash_oen <= '1';
X
X captured_data(3 downto 0) <= switches;
X captured_data(7 downto 4) <= (others => '0');
X led <= written_data(3 downto 0);
X
X bscan_cap_upd_1 : bscan_cap_upd
X generic map (
X DR_WIDTH => 8)
X port map (
X captured_data => captured_data,
X written_data => written_data,
X wr_strobe => wr_strobe);
X
end beh;
SHAR_EOF
(set 20 10 08 03 21 37 57 'bscan_top.vhd'
eval "${shar_touch}") && \
chmod 0644 'bscan_top.vhd'
if test $? -ne 0
then ${echo} "restore of bscan_top.vhd failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'bscan_top.vhd': 'MD5 check failed'
) << \SHAR_EOF
f7f98f22704d402f81bb5ee993c5bb00 bscan_top.vhd
SHAR_EOF
else
test `LC_ALL=C wc -c < 'bscan_top.vhd'` -ne 2275 && \
${echo} "restoration warning: size of 'bscan_top.vhd' is not 2275"
fi
fi
# ============= system.ucf ==============
if test -f 'system.ucf' && test "$first_param" != -c; then
${echo} "x - SKIPPING system.ucf (file already exists)"
else
${echo} "x - extracting system.ucf (text)"
sed 's/^X//' << 'SHAR_EOF' > 'system.ucf' &&
X
Net led<0> LOC = E13 | IOSTANDARD = LVCMOS25;
Net led<1> LOC = C14 | IOSTANDARD = LVCMOS25;
Net led<2> LOC = C4 | IOSTANDARD = LVCMOS25;
Net led<3> LOC = A4 | IOSTANDARD = LVCMOS25;
X
Net switches<0> LOC = P4 | IOSTANDARD = LVCMOS18;
Net switches<1> LOC = F6 | IOSTANDARD = LVCMOS18;
Net switches<2> LOC = E4 | IOSTANDARD = LVCMOS18;
Net switches<3> LOC = F5 | IOSTANDARD = LVCMOS18;
X
X
Net flash_wen LOC=M16;
Net flash_wen SLEW = SLOW;
Net flash_wen DRIVE = 4;
Net flash_wen IOSTANDARD = LVCMOS25;
X
Net flash_oen LOC=L18;
Net flash_oen SLEW = SLOW;
Net flash_oen DRIVE = 4;
Net flash_oen IOSTANDARD = LVCMOS25;
X
Net flash_cen LOC=L17;
Net flash_cen SLEW = SLOW;
Net flash_cen DRIVE = 4;
Net flash_cen IOSTANDARD = LVCMOS25;
SHAR_EOF
(set 20 10 08 03 21 32 24 'system.ucf'
eval "${shar_touch}") && \
chmod 0644 'system.ucf'
if test $? -ne 0
then ${echo} "restore of system.ucf failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'system.ucf': 'MD5 check failed'
) << \SHAR_EOF
4a13afa1a156e63e415d334419f49fc4 system.ucf
SHAR_EOF
else
test `LC_ALL=C wc -c < 'system.ucf'` -ne 724 && \
${echo} "restoration warning: size of 'system.ucf' is not 724"
fi
fi
if rm -fr ${lock_dir}
then ${echo} "x - removed lock directory ${lock_dir}."
else ${echo} "x - failed to remove lock directory ${lock_dir}."
exit 1
fi
exit 0