Answers Database


SYNOPSYS: How to instantiate BSCAN in the 4k/5k in Verilog/VHDL in Synopsys (FPGA Compiler, Design Compiler, FPGA Express)


Record #488

Product Family: Software

Product Line: Synopsys

Product Part: FPGA Compiler

Product Version: 3.3b

Problem Title:
SYNOPSYS: How to instantiate BSCAN in the 4k/5k in Verilog/VHDL in Synopsys (FPGA Compiler, Design Compiler, FPGA Express)



Problem Description:
Urgency: Standard

General Description:
To use boundary Scan in Xilinx devices, you must instantiate the boundary scan
symbol (BSCAN) and the associated dedicated I/O, and use the "dont_touch"
attribute; otherwise it is possible that BSCAN will be deleted by Synopsys.

Note, the code examples for instantiaing BSCAN will work with
FPGA Express v2.0 or later and FPGA Compiler/Design Compiler.
Note FPGA Express does not use Compiler scripts. The compile scripts only
apply to the FPGA Compiler/Design Compiler flow.


Solution 1:

III. Verilog Code for Instantiating BSCAN in the XC5200:


//XC5200 Example of instantiating BSCAN symbol

module example (a,b,c);

input a, b;
output c;

reg c;

wire tck_net, tck_net_in;
wire tdi_net, tdi_net_in;
wire tms_net, tms_net_in;
wire tdo_net, tdo_net_out;


BSCAN u1 (.TDI(tdi_net), .TMS(tms_net), .TCK(tck_net), .TDO(tdo_net));

TDI u2 (.I(tdi_net_in));
TMS u3 (.I(tms_net_in));
TCK u4 (.I(tck_net_in));

TDO u5 (.O(tdo_net_out));

IBUF u6 (.I(tdi_net_in), .O(tdi_net));
IBUF u7 (.I(tms_net_in), .O(tms_net));
IBUF u8 (.I(tck_net_in), .O(tck_net));

OBUF u9 (.I(tdo_net), .O(tdo_net_out));


always@(posedge b)
      c<=a;

endmodule




Solution 2:

IV. Runscript for compiling XC5200 BSCAN Verilog Example:

PART = 5202PC84-5
TOP = example

read -format verilog "bscan5k.v"


set_port_is_pad "*"
insert_pads

set_dont_touch u1
set_dont_touch u2
set_dont_touch u3
set_dont_touch u4
set_dont_touch u5
set_dont_touch u6
set_dont_touch u7
set_dont_touch u8
set_dont_touch u9

/* Note, set_dont_touch/dont_touch are case-sensitive
with respect to instance names. */

compile


set_attribute TOP "part" -type string PART

write -f xnf -h -o "bscan5k.sxnf"



Solution 3:

V. Runscript for compiling XC4000 BSCAN Verilog Example:

PART = 4025ehq240-3
TOP = example

read -format verilog "bscan4k.v"


set_port_is_pad "*"
insert_pads

set_dont_touch u1
set_dont_touch u2
set_dont_touch u3
set_dont_touch u4
set_dont_touch u5

/* Note, set_dont_touch/dont_touch are case-sensitive
with respect to instance names. */

compile


replace_fpga

set_attribute TOP "part" -type string PART

write -f xnf -h -o "bscan4k.sxnf"



Solution 4:

VII. Runscript for compiling XC4000 BSCAN VHDL Example:

PART = 4025EHQ240-3
TOP = example

analyze -format vhdl "bscan4k.vhd"
elaborate TOP

set_dont_touch u1
set_dont_touch u2
set_dont_touch u3
set_dont_touch u4
set_dont_touch u5

/* Note, set_dont_touch/dont_touch are case-sensitive
with respect to instance names. */

set_port_is_pad "*"
insert_pads

compile

replace_fpga


set_attribute TOP "part" -type string PART

write -f xnf -h -o "bscan4k.sxnf"



Solution 5:

II. Verilog Code for Instantiating BSCAN in the XC4000
NOTE: VERILOG IS CASE SENSITIVE! BE SURE TO FOLLOW
THE CASE USED IN THIS EXAMPLE!


//XC4000/XC4000E Example of instantiating BSCAN symbol

module example (a,b,c);

input a, b;

output c;
reg c;

wire tck_net;
wire tdi_net;
wire tms_net;
wire tdo_net;


BSCAN u1 (.TDI(tdi_net), .TMS(tms_net), .TCK(tck_net), .TDO(tdo_net));

TDI u2 (.I(tdi_net));
TMS u3 (.I(tms_net));
TCK u4 (.I(tck_net));

TDO u5 (.O(tdo_net));

always@(posedge b)
      c<=a;

endmodule




Solution 6:

I. VHDL Code for Instantiating BSCAN in the XC5200:


-- XC5200 example of instantiating the BSCAN symbol

entity example is
      port (a, b: in bit; c: out bit);
end example;

architecture xilinx of example is

component BSCAN
   port(tdi, tms, tck: in bit; tdo: out bit);
end component;

component TCK
   port ( I : out bit );
end component;

component TDI
   port ( I : out bit );
end component;

component TMS
   port ( I : out bit );
end component;

component TDO
   port ( O : in bit );
end component;

component ibuf
      port (i: in bit; o: out bit);
end component;

component obuf
      port(i: in bit; o: out bit);
end component;

signal tck_net, tck_net_in : bit;
signal tdi_net, tdi_net_in : bit;
signal tms_net, tms_net_in : bit;
signal tdo_net, tdo_net_out : bit;

begin

u1: bscan port map (tdi=>tdi_net, tms=>tms_net, tck=>tck_net, tdo=>tdo_net_out);

u2: ibuf port map(i=>tck_net_in, o=>tck_net);
u3: ibuf port map(i=>tdi_net_in, o=>tdi_net);
u4: ibuf port map(i=>tms_net_in, o=>tms_net);

u5: obuf port map(i=>tdo_net_out, o=>tdo_net);

u6: TCK port map (I=>tck_net_in);
u7: TDI port map (I=>tdi_net_in);
u8: TMS port map (I=>tms_net_in);

u9: TDO port map (O=>tdo_net);

process(b)
begin
if(b'event and b='1') then
  c <= a;
end if;
end process;

end xilinx;




Solution 7:

VIII. Runscript for compiling XC5200 BSCAN VHDL Example:

PART = 5202PC84-5
TOP = example

analyze -format vhdl "bscan5k.vhd"
elaborate TOP

set_port_is_pad "*"
insert_pads

set_dont_touch u1
set_dont_touch u2
set_dont_touch u3
set_dont_touch u4
set_dont_touch u5
set_dont_touch u6
set_dont_touch u7
set_dont_touch u8
set_dont_touch u9

/* Note, set_dont_touch/dont_touch are case-sensitive
with respect to instance names. */

compile

set_attribute TOP "part" -type string PART

write -f xnf -h -o "bscan5k.sxnf"



Solution 8:

VI. VHDL Code for Instantiating BSCAN in the XC4000:


-- XC4000/XC4000E example of instantiating the BSCAN symbol

entity example is
      port (a, b: in bit; c: out bit);
end example;


architecture xilinx of example is

component bscan
   port(tdi, tms, tck: in bit; tdo: out bit);
end component;

component TCK
   port ( I : out bit );
end component;

component TDI
   port ( I : out bit );
end component;

component TMS
   port ( I : out bit );
end component;

component TDO
   port ( O : in bit );
end component;

signal tck_net	: bit;
signal tdi_net	: bit;
signal tms_net	: bit;
signal tdo_net	: bit;

begin

u1: bscan port map (tdi=>tdi_net, tms=>tms_net, tck=>tck_net, tdo=>tdo_net);

u2: tck port map (i=>tck_net);
u3: tdi port map (i=>tdi_net);
u4: tms port map (i=>tms_net);
u5: tdo port map (o=>tdo_net);

process(b)
begin
if(b'event and b='1') then
  c <= a;
end if;
end process;

end xilinx;





End of Record #488 - Last Modified: 04/14/99 10:03

For the latest news, design tips, and patch information on the Xilinx design environment, check out the Technical Tips!