0

私は Spartan-E3 FPGA を使用しており、次のような 4 つのステージを持つ (並列) パイプラインを実現しています: http://i.imgur.com/6CQNk.png

2つのステージ「T3」は同じです。T1、T2、および T4 は 50MHz で「実行」されますが、T3 は 25MHz で実行されます (図のように 180° シフトされます)。

ビヘイビアー シミュレーションでは問題なく動作し、結果は正しいです。FPGA でこのプロジェクトを合成しようとすると、問題が発生します。特に、次の警告が表示されます (もちろん、生成される結果は間違っています)。

WARNING:LIT:175 - Clock buffer is designated to drive clock loads. BUFGMUX
symbol "physical_group_clk_2/Clock_DCM/CLKFX_BUFG_INST" (output signal=clk_2)
has a mix of clock and non-clock loads. Some of the non-clock loads are
(maximum of 5 listed):
Pin I0 of pipeline/mux3/o<65>1
Pin I0 of pipeline/mux3/o<64>1
Pin I0 of pipeline/mux3/o<17>
Pin I0 of pipeline/mux3/o<18>
Pin I0 of pipeline/mux3/o<20>
WARNING:Route:455 - CLK Net:clk_2 may have excessive skew because 
0 CLK pins and 66 NON_CLK pins failed to route using a CLK template.

「clk_2」は CLOCK 25MHz です。これは「私のマルチプレクサ」です: stage_4_in <= stage_3_1_out when clk_2='1' else stage_3_2_out;

基本的に、マルチプレクサ選択をクロック信号で駆動することはできません。それで、どうすればいいですか?私はこれをしなければなりません: CLOCK 25MHz が高い場合、マルチプレクサ出力は一番上のものでなければなりません。それ以外の場合は、2 番目 (下) にする必要があります。これを行う方法がわかりませんでした。

ちなみに、これは DCM の構成です。

CLK_FEEDBACK => "1X",
CLKDV_DIVIDE => 2.0,
CLKFX_DIVIDE => 4,
CLKFX_MULTIPLY => 2,
CLKIN_DIVIDE_BY_2 => FALSE,
CLKIN_PERIOD => 20.000,
CLKOUT_PHASE_SHIFT => "NONE",
DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS",
DFS_FREQUENCY_MODE => "LOW",
DLL_FREQUENCY_MODE => "LOW",
DUTY_CYCLE_CORRECTION => TRUE,
FACTORY_JF => x"C080",
PHASE_SHIFT => 0,
STARTUP_WAIT => TRUE

前もって感謝します。

4

1 に答える 1

1

25MHz クロックを排除する - 25MHz で実行したいステージの偶数および奇数の 50MHz サイクル中にクロックを有効にして、50MHz クロックですべてを実行します。(現在の 25MHz クロックは、おそらくクロック イネーブル信号として機能します)

于 2013-01-06T18:45:30.740 に答える