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
日付 12/15/2012
ステータス アクティブ
種類 一般