このドキュメントの新しいバージョンが利用できます。お客様は次のことを行ってください。 こちらをクリック 最新バージョンに移行する。
1. インテル® Hyperflex™ HyperFlex FPGAアーキテクチャーの概要
2. インテル® Hyperflex™ アーキテクチャーRTLデザイン・ガイドライン
3. インテル® Hyperflex™ アーキテクチャー・デザインのコンパイル
4. デザイン例ウォークスルー
5. リタイミングの制限と対処方法
6. 最適化の例
7. インテル® Hyperflex™ アーキテクチャーの移植ガイドライン
8. 付録
9. インテル® Hyperflex™ アーキテクチャー高性能デザイン・ハンドブック
10. インテル® Hyperflex™ アーキテクチャー高性能デザイン・ハンドブック
2.4.2.1. 高速クロック・ドメイン
2.4.2.2. ループの再構築
2.4.2.3. コントロール信号のバックプレッシャー
2.4.2.4. FIFOステータス信号によるフロー・コントロール
2.4.2.5. スキッドバッファーを使用したフロー制御
2.4.2.6. リード・モディファイ・ライトのメモリー
2.4.2.7. カウンターとアキュムレーター
2.4.2.8. ステートマシン
2.4.2.9. メモリー
2.4.2.10. DSPブロック
2.4.2.11. 一般ロジック
2.4.2.12. モジュラスと除算
2.4.2.13. リセット
2.4.2.14. ハードウェアの再利用
2.4.2.15. アルゴリズム要件
2.4.2.16. FIFO
2.4.2.17. 三元加算器
5.2.1. Insufficient Registers
5.2.2. Short Path/Long Path
5.2.3. Fast Forwardの制限
5.2.4. ループ
5.2.5. クロックドメインごとに1つのクリティカル・チェイン
5.2.6. 関連するクロックグループのクリティカル・チェイン
5.2.7. 複雑なクリティカル・チェイン
5.2.8. 配置可能ノードの拡張
5.2.9. ドメイン境界エントリとドメイン境界出口
5.2.10. デュアル・クロック・メモリーを備えたクリティカル・チェイン
5.2.11. クリティカル・チェインビットとバス
5.2.12. ディレイライン
8.1. 付録A:パラメーター化可能パイプライン・モジュール
次の例は、Verilog HDL、SystemVerilog、およびVHDLのパラメーター化可能なパイプライン・モジュールを示しています。トップレベルのI/Oおよびクロックドメイン境界でこれらのコードブロックを使用して、回路のレイテンシーを変更します。
Parameterizable Hyper-Pipelining Verilog HDL Module
(* altera_attribute = "-name AUTO_SHIFT_REGISTER_RECOGNITION off" *)
module hyperpipe
#(parameter CYCLES = 1, parameter WIDTH = 1)
(
input clk,
input [WIDTH-1:0] din,
output [WIDTH-1:0] dout
);
generate if (CYCLES==0) begin : GEN_COMB_INPUT
assign dout = din;
end
else begin : GEN_REG_INPUT
integer i;
reg [WIDTH-1:0] R_data [CYCLES-1:0];
always @ (posedge clk)
begin
R_data[0] <= din;
for(i = 1; i < CYCLES; i = i + 1)
R_data[i] <= R_data[i-1];
end
assign dout = R_data[CYCLES-1];
end
endgenerate
endmodule
Parameterizable Hyper-Pipelining Verilog HDL Instance
hyperpipe # (
.CYCLES ( ),
.WIDTH ( )
) hp (
.clk ( ),
.din ( ),
.dout ( )
);
Parameterizable Hyper-Pipelining SystemVerilog Module
(* altera_attribute = "-name AUTO_SHIFT_REGISTER_RECOGNITION off" *)
module hyperpipe
#(parameter int
CYCLES = 1,
PACKED_WIDTH = 1,
UNPACKED_WIDTH = 1
)
(
input clk,
input [PACKED_WIDTH-1:0] din [UNPACKED_WIDTH-1:0],
output [PACKED_WIDTH-1:0] dout [UNPACKED_WIDTH-1:0]
);
generate if (CYCLES == 0) begin : GEN_COMB_INPUT
assign dout = din;
end
else begin : GEN_REG_INPUT
integer i;
reg [PACKED_WIDTH-1:0] R_data [CYCLES-1:0][UNPACKED_WIDTH-1:0];
always_ff@(posedge clk)
begin
R_data[0] <= din;
for(i = 1; i < CYCLES; i = i + 1)
R_data[i] <= R_data[i-1];
end
assign dout = R_data[CYCLES-1];
end
endgenerate
endmodule : hyperpipe
Parameterizable Hyper-Pipelining SystemVerilog Instance
// Quartus Prime SystemVerilog Template
//
// Hyper-Pipelining Module Instantiation
hyperpipe # (
.CYCLES ( ),
.PACKED_WIDTH ( ),
.UNPACKED_WIDTH ( )
) hp (
.clk ( ),
.din ( ),
.dout ( )
);
Parameterizable Hyper-Pipelining VHDL Entity
library IEEE;
use IEEE.std_logic_1164.all;
library altera;
use altera.altera_syn_attributes.all;
entity hyperpipe is
generic (
CYCLES : integer := 1;
WIDTH : integer := 1
);
port (
clk : in std_logic;
din : in std_logic_vector (WIDTH - 1 downto 0);
dout : out std_logic_vector (WIDTH - 1 downto 0)
);
end entity;
architecture arch of hyperpipe is
type hyperpipe_t is array(CYCLES-1 downto 0) of
std_logic_vector(WIDTH-1 downto 0);
signal HR : hyperpipe_t;
-- Prevent large hyperpipes from going into memory-based altshift_taps,
-- since that won't take advantage of Hyper-Registers
attribute altera_attribute of HR :
signal is "-name AUTO_SHIFT_REGISTER_RECOGNITION off";
begin
wire : if CYCLES = 0 GENERATE
-- The 0 bit is just a pass-thru, when CYCLES is set to 0
dout <= din;
end generate wire;
hp : if CYCLES > 0 GENERATE
process (clk) begin
if (clk'event and clk = '1')then
HR <= HR(HR'high-1 downto 0) & din;
end if;
end process;
dout <= HR(HR'high);
end generate hp;
end arch;
Parameterizable Hyper-Pipelining VHDL Instance
-- Template Declaration
component hyperpipe
generic (
CYCLES : integer;
WIDTH : integer
);
port (
clk : in std_logic;
din : in std_logic_vector(WIDTH - 1 downto 0);
dout : out std_logic_vector(WIDTH - 1 downto 0)
);
end component;
-- Instantiation Template:
hp : hyperpipe
generic map (
CYCLES => ,
WIDTH =>
)
port map (
clk => ,
din => ,
dout =>
);