UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

AR# 2831

Synplify - How do I force an IOB NODELAY latch or flip-flop in HDL (Verilog/VHDL)?

説明

Keywords: Synplify, Verilog, VHDL, 5200, 4000, nodelay

重要度 : 標準

概要 :
XC4000E/EX/XL の IOB フリップフロップおよびラッチには外部ピンと D 入力ピンの間に遅延ブロックがあります。 また、XC5200 の IOB にも、入力セットアップ タイムを制御するプログラム可能遅延エレメントがあります。 この遅延があることで、クロック信号がデバイスの入力であり、同時に入力フリップフロップ/ラッチの入力である場合に発生する可能性のあるホールド タイム違反を回避できます。 この遅延は、NODELAY 属性を付けると削除できます。 NODELAY 属性では、セットアップ タイム要件を下げ、わずかなホールド タイムを取り入れます。

次に示す方法からシステムに合った NODELAY 属性の設定方法を使用してください。

ソリューション

1

XC4000E/EX/XL および XC5200 : VHDL コードで NODELAY 属性を指定する場合

library IEEE;
use IEEE.std_logic_1164.all;

entity ifd_ex is
port (CLK, A, B: in STD_LOGIC;
O: out STD_LOGIC);
end ifd_ex;

architecture xilinx of ifd_ex is

signal Q : STD_LOGIC;

begin
U0: process (CLK)
begin
if (CLK'event and CLK='1') then
Q <= A;
end if;
end process;

-- token logic
O <= Q and B;

end xilinx;

# Vendor-specific constraints are passed in an .sdc file:

define_attribute A xc_nodelay 1

2

XC4000E/EX/XL では、フリップフロップまたはラッチに NODELAY 属性を付けてインスタンシエートするとデフォルトの遅延を削除できます。 末尾に _F が付いた入力フリップフロップまたはラッチであれば、セルに NODELAY 属性が割り当てられています。 たとえば、コンポーネント IFD_F または ILD_1F にはセルに NODELAY 属性が付いているため遅延を削除できます。

メモ : v5.3.1 以前のバージョンの VHDL で IFD_F をインスタンシエートすると、IFD に FAST 属性が付けられてしまい、不正となります。 (Synplicity ではこの問題を認識しています。) この問題を回避するには、IFDX をインスタンシエートし、次のように NODELAY 属性を指定します。

attribute NODELAY: string;
attribute nodelay of <instance name> label is "TRUE";

ただし、XC5200 の IOB にはフリップフロップまたはラッチが含まれず、その代わりに隣接する CLB に含まれるレジスタと各 IOB が直接接続され、IOB レジスタがエミュレートされます。

この場合、次のように制約ファイル (.sdc) または HDL コードで、 xc_nodelay 属性を指定します。

# Vendor-specific constraints are passed in an .sdc file:

define_attribute {<input_port_name>} xc_nodelay 1

3

XC4000E/EX/XL のみ : Verilog コードで IFD_F をインスタンシエートする場合

`include "/products/synplify/lib/xilinx/xc4000.v"

module ifd_ex (CLK, A, B, O);

input A ;
input B, CLK;
output O;

wire Q;

IFD_F U0 (.Q (Q), .D (A), .C (CLK));

// token logic
assign O = Q & B;

endmodule

4

XC4000E/EX/XL および XC5200 : Verilog コードで NODELAY 属性を指定する場合

module ifd_ex (CLK, A, B, O);

input A /* synthesis xc_nodelay=1 */;
input B, CLK;
output O;

reg Q;

always @(posedge CLK)
Q <= A;

// token logic
assign O = Q & B;

endmodule

5

XC4000E/EX/XL および XC5200 : Verilog コードで NODELAY 属性を指定する場合

module ifd_ex (CLK, A, B, O);

input A;
input B, CLK;
output O;

reg Q;

always @ (posedge CLK)
begin
Q <= A;
end

// token logic
assign O = Q & B;

endmodule

# Vendor-specific constraints are passed in an .sdc file:

define_attribute A xc_nodelay 1

6

XC4000E/EX/XL のみ : VHDL コードで IFD_F をインスタンシエートする場合

library IEEE;
use IEEE.std_logic_1164.all;
library xc4000;
use xc4000.components.all;

entity ifd_ex is
port (CLK, A, B : in STD_LOGIC;
O : out STD_LOGIC);
end ifd_ex;

architecture xilinx of ifd_ex is

signal Q : STD_LOGIC;

begin
U0 : IFD_F port map (Q => Q,
D => A,
C => CLK);
-- token logic
O <= Q and B;

end xilinx;

7

XC4000E/EX/XL および XC5200 : VHDL コードで NODELAY 属性を指定する場合

library IEEE;
use IEEE.std_logic_1164.all;

entity ifd_ex is
port (CLK, A, B: in STD_LOGIC;
O: out STD_LOGIC);

attribute xc_nodelay : boolean;
attribute xc_nodelay of A : signal is true;

end ifd_ex;

architecture xilinx of ifd_ex is

signal Q : STD_LOGIC;

begin
U0: process (CLK)
begin
if (CLK'event and CLK='1') then
Q <= A;
end if;
end process;

-- token logic
O <= Q and B;

end xilinx;
AR# 2831
作成日 08/21/2007
最終更新日 12/15/2012
ステータス アクティブ
タイプ 一般