AR# 11658

|

5.1i XST - 複数のレジスタ付きトライステート出力を IOB に挿入する方法

説明

キーワード : XST, IOB, 3-state, 3state, tristate, tri, state, tri-state, enable, keep, merge, duplicate, register, multiple, bus, トライステート, イネーブル, 結合, 複製, レジスタ, 複数, バス

重要度 : 標準

概要 :
フリップフロップのバスをデバイスの IOB に配置する必要があります。 これらのフリップフロップの出力はトライステートにし、トライステート バッファのイネーブル信号はレジスタを介する必要があります。

レジスタを介するイネーブル信号にバス 1 つが使用されると、1 つを除くすべてのイネーブル フリップフロップが最適化により削除されてしまいます。 最後のフリップフロップの出力ロードが 1 でなくなってしまったため、IOB 内に配置することができません。 どうすればよいですか。

ソリューション

イネーブル信号用にフリップフロップのバスを作成するのではなく、フリップフロップを 1 つ作成して IOB 属性を設定します。 次に合成プロパティのレジスタ/ラッチを IOB に挿入するオプションをアクティブにします。これによりフリップフロップが複製され、IOB 内に配置されます。

合成プロパティをアクティブにして、フリップフロップを自動的に IOB に挿入するには、次の手順に従ってください。

1. Project Navigator のプロセス ウィンドウで [Synthesize] をハイライトします。
2. [Synthesis] を右クリックし、[プロパティ] をクリックします。
3. [Xilinx Specific Options] タブをクリックします。
4. [Pack I/O Registers into IOBs] を [Auto] (デフォルト) または [Yes] にします。

次のコードは、レジスタにより出力がトライステートになっている 8 ビット幅のバスを示しています。

メモ : トライステート バッファのイネーブル ラインはアクティブ Low である必要があります。

VHDL :

library ieee;
use ieee.std_logic_1164.all;

entity tri_iob is
port(CLK, SEL : in std_logic;
DI : in std_logic_vector (7 downto 0);
DO : out std_logic_vector (7 downto 0));
end tri_iob;

architecture arch_tri_iob of tri_iob is
signal tmp1: std_logic_vector(7 downto 0);
signal tmp2: std_logic;
signal inp_ffs: std_logic_vector(7 downto 0);

attribute IOB : string;
attribute IOB of tmp2 : signal is "true";

begin
process (CLK)
begin
if (CLK'event and CLK='1') then
inp_ffs<=DI;
tmp1<=inp_ffs;
end if;
end process;

process (CLK)
begin
if (CLK'event and CLK='1') then
tmp2<=SEL;
end if;
end process;

DO <= tmp1 when tmp2='0' else (others=>'Z');

end arch_tri_iob;


Verilog :

module tri_iob (clk, sel, di, do);

input clk, sel;
input [7:0] di;
output [7:0] do;

reg [7:0] tmp1, inp_ffs;
reg tmp2;

//synthesis attribute IOB tmp2 "true"

always @(posedge clk) begin
inp_ffs <= di;
tmp1 <= inp_ffs;
end

always @(posedge clk) tmp2 <= sel;

assign do = tmp2 ? 8'bz : tmp1;

endmodule
AR# 11658
日付 04/20/2007
ステータス アーカイブ
種類 一般
People Also Viewed