AR# 9060

SYNPLIFY: 専用クロック ピン以外からグローバル クロック リソースを駆動する方法について

説明

キーワード: Synplicity, BUFG, Global, Clock, non-dedicated, buffer, xc_loc, グローバル, クロック, 非専用, バッファ

重要度 : 標準

概要:
Synplify で専用クロック ピン以外からグローバル クロック リソースを駆動する方法について。

Synplify は自動的にプライマリ グローバル クロック バッファ (BUFGP) をクロック信号に挿入します。このため、Xilinx インプリメンテーション ツールで、クロックが FPGA のグローバル クロック ピンの位置に配置されます。

通常の I/O からグローバル バッファを駆動するには、次を行ってください。

1. BUFG コンポーネントをクロック リソース用に手動でインスタンシエートします。
2. xc_loc をクロック ポートに割り当てます。

次の VHDL/Verilog の例は、Synplify 5.3.1 でテストされています。

ソリューション

1

-- VHDL example --

library IEEE, virtex,synplify;
use IEEE.std_logic_1164.all;
use virtex.components.all;
use synplify.attributes.all;
entity setreset is
port (CLK: in std_logic;
DIN1, DIN2, DIN3: in STD_LOGIC;
SET, RESET: in STD_LOGIC;
DOUT1, DOUT2, DOUT3: out STD_LOGIC);
attribute xc_loc of CLK: signal is "A11";
end setreset ;

architecture RTL of setreset is
component BUFG port (i: in std_logic; o: out std_logic);
end component;

signal CLKIN: std_logic;
begin
bufginst: BUFG port map(i => CLK, o => CLKIN);

set_then_reset: process (CLKIN, SET, RESET)
begin
if (SET = '1') then
DOUT1 <= '1';
elsif (RESET = '1') then
DOUT1 <= '0';
elsif ( CLKIN'event and CLKIN ='1') then
DOUT1 <= DIN1;
end if;
end process;

reset_then_set: process (CLKIN, SET, RESET)
begin
if (RESET = '1') then
DOUT2 <= '0';
elsif (SET = '1') then
DOUT2 <= '1';
elsif ( CLKIN'event and CLKIN ='1') then
DOUT2 <= DIN2;
end if;
end process;

set_only: process (CLKIN, SET)
begin
if (SET = '1') then
DOUT3 <= '1';
elsif (CLKIN'event and CLKIN = '1') then
DOUT3 <= DIN3;
end if;
end process;
end RTL;

2

// Verilog example
// Note: $SYNPLICITY is the Synplicity install directory.

`include "$SYNPLICITY/lib/xilinx/virtex.v"
module setreset (CLK, DIN1, DIN2, SET, RESET, DOUT1, DOUT2);
input CLK /* synthesis xc_loc = "A11" */;
input DIN1, DIN2;
input SET, RESET;
output DOUT1, DOUT2;
wire CLKin;
reg DOUT1, DOUT2;

BUFG bufginst(.I(CLK), .O(CLKin));
always @ (posedge SET or posedge RESET or posedge CLKin)
begin: set_then_reset
if (SET)
DOUT1 <= 1'b1;
else if (RESET)
DOUT1 <= 1'b0;
else
DOUT1 <= DIN1;
end

always @ (posedge RESET or posedge SET or posedge CLKin)
begin: reset_then_set
if (RESET)
DOUT2 <= 1'b0;
else if (SET)
DOUT2 <= 1'b1;
else
DOUT2 <= DIN2;
end

endmodule
AR# 9060
日付 04/24/2007
ステータス アーカイブ
種類 一般