AR# 12293

|

12.1 Constraints - How do I create register (flip-flop) initialization values (set/reset)?

説明

レジスタ (フリップフロップ) の初期値 (セット/リセット) を作成する方法を教えてください。

ソリューション


デバイスに電源を投入したときのレジスタの初期値は、INIT 属性を使用して指定します。電源投入時にセットするには S を、リセットするには R を使用します。デフォルトはリセットです。



Verilog/VHDL でレジスタのインスタンシエーションに直接 INIT 属性を適用するか、UCF ファイルでレジスタのインスタンス名に対して宣言します。レジスタ ロジックが推論された場合、リセット ロジックはデザインにコードで記述する必要があります。



推論されるロジックおよびインスタンシエートされるロジックの INIT 値は、次のように記述します。



XST での合成



Test は XST 属性を含む最上位ファイルで、電源投入時に次を含みます。

- プリセットされる 1 つの推論レジスタ (outa)

- リセットされる 1 つの推論レジスタ (outb)

- プリセットされるインスタンシエート レジスタ (FD0)

- リセットされるインスタンシエート レジスタ (FD1)



module test (clk, ina, inb, rst, D_IN, Q_OUT, outa, outb);



input clk, ina, inb, rst;

input [1:0] D_IN;

output [1:0] Q_OUT;

output outa, outb;



reg outa;

reg outb;

wire re;



// Initialized Preset-FF (outa) and Reset-FF (outb)

ROCBUF u1 (.I(rst), .O(re));

//synthesis attribute box_type of ROCBUF is "black_box"



always @ (posedge clk or posedge re) begin

if (re) begin

outa = 1'b1;

outb = 1'b0;

end

else

begin

outa = ina;

outb = inb;

end

end





// Initialized preset flip-flop for XST

FD FD0 (.Q (Q_OUT[0]), .D (D_IN[0]), .C (clk));

// synthesis attribute INIT of FD0 is "R"



// Initialized reset flip-flop for XST

FD FD1 (.Q (Q_OUT[1]), .D (D_IN[1]), .C (clk));

// synthesis attribute INIT of FD1 is "S"



endmodule



module ROCBUF (I, O);

input I;

output O;

endmodule



UCF では、次のように HDL デザインで推論またはインスタンシエートされているレジスタ インスタンスに INIT 属性を設定します (インスタンス名がわかっている場合)。



"INST FD0 INIT=S;

INST FD1 INIT=R;"
AR# 12293
日付 12/15/2012
ステータス アクティブ
種類 一般
ツール 詳細 概略
People Also Viewed