FC2ブログ

FPGAレジスタの初期化方法


FPGAでは、コンフィグ後1回、レジスタに対して初期化を実施してくれます。
(デバイスに電源を投入したときのレジスタの初期値設定機能)

これは、ALTERA、Xilinx、その他のFPGAメーカも同様です。
この『初期化』は、ユーザのReset信号は用いません。
コンフィグの中で初期化を行うのです。

この『初期化』は、何も意識しないで、HDLを記述すると、FPGAメーカ推奨値になります。
例えば、ALTERA社、Xilinx社では、ゼロに設定されます。

もし、別の値に指定したい場合は、下記の方法が使えます。
VHDLの場合です。


LED_tmpレジスタに、何も指定しない場合。
この場合は、ゼロ値が入ります。
--------------------------------------------------
signal LED_tmp : std_logic;

--LEDテスト回路
process(CLK) begin
if CLK'event and CLK ='1' then
LED_tmp <= LED_tmp;
end if;
end process;

LED <= LED_tmp;
--------------------------------------------------


LED_tmpレジスタに、初期値1を指定する場合。
この場合は、LED_tmpレジスタに、1で初期化されます。
--------------------------------------------------
signal LED_tmp : std_logic :='1'; --初期値設定

--LEDテスト回路
process(CLK) begin
if CLK'event and CLK ='1' then
LED_tmp <= LED_tmp;
end if;
end process;

LED <= LED_tmp;
--------------------------------------------------


Verilog-HDLでも可能です。
下記の記述でOKなようです。
試していないので、全てのメーカで同一になるかわかりませんが...

<その1>
reg LED_tmp = 1'b1; --初期値設定


<その2>
Xilnx社の場合は、こちらを推奨されているようです。

initial
begin
 LED_tmp<=1;
end



<考察>
 この方法を使うと、FPGAに外部からReset信号を入れなくても初期化できます。
 Reset ICを省略することも場合によっては可能です。
 ただし、基板内の同期化、あるいは、FPGA内のカウンターの同期を掛けたい場合は、
 外部からReset信号が必要です。
 なので、FPGAには、外部にReset ICを外付けで搭載しましょう。








コメント

非公開コメント