ザイリンクス 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%;