0

ザイリンクス Spartan 6 で実行しているコードがいくつかあり、現在タイミングを満たしています。ただし、使用するレジスタが少なくなるように変更したいと思います。

signal response_ipv4_checksum     : std_logic_vector(15 downto 0);
signal response_ipv4_checksum_1   : std_logic_vector(15 downto 0);
signal response_ipv4_checksum_2   : std_logic_vector(15 downto 0);
signal response_ipv4_checksum_3   : std_logic_vector(15 downto 0);
…

process (clk)
begin
    if rising_edge(clk) then
        response_ipv4_checksum_3 <= utility.ones_complement_sum(x"4622",                  config.source_ip(31 downto 16));
        response_ipv4_checksum_2 <= utility.ones_complement_sum(response_ipv4_checksum_3, config.source_ip(15 downto 8));
        response_ipv4_checksum_1 <= utility.ones_complement_sum(response_ipv4_checksum_2, response_group(31 downto 16));
        response_ipv4_checksum   <= utility.ones_complement_sum(response_ipv4_checksum_1, response_group(15 downto 0));
    end if;
end process;

現在、タイミングを満たすために、追加を複数のサイクルに分割する必要があります。ただし、この値を実際に計算するには 20 サイクルあり、その間は構成値を変更できません。

レジスタを使用せずに同じことを単純に記述できるように、制約 (ucf) ファイルに使用できる属性 (推奨) または行はありますか?

私の UCF には、次のような timespec が既にあります。

NET pin_phy_rxclk TNM_NET = "PIN_PHY_RXCLK";
TIMESPEC "TS_PIN_PHY_RXCLK" = PERIOD "PIN_PHY_RXCLK" 8ns HIGH 50%;
4

1 に答える 1

0

FROM:TO制約が必要だと思います。

TIMESPEC TSname=FROM “group1” TO “group2” value;

ここでvalue、次のような別のタイムスペックに基づくことができますTS_CLK*4

したがって、出力信号にフリップフロップのみが含まれるようにプロセスを調整し、入力を含むタイムグループと出力を含むタイムグループを作成し、それらをとに使用しgroup1ますgroup2

したがって、グループ1にはすべての入力ネット/path/to/your/instance/config.source_ipとが含まれます/path/to/your/instance/response_group。エンティティへのベクトル入力を作成し、エンティティの外部にconfig/response_group信号を接続する方が簡単な場合があります。次に、を使用できます/path/to/your/instance/name_of_input_signals

グループ2にはが含まれます/path/to/your/instance/response_ipv4_checksum

そして、あなたがコメントするように、あなたは使うことができますTS_PIN_PHY_RXCLK*4(それが頻度ではなく時間であると仮定して-そうでなければあなたは/4私が思うにやらなければなりません)

于 2013-02-05T14:09:58.070 に答える