我有一些在 Xilinx 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 中,我已经有一个看起来像这样的时间规范:
NET pin_phy_rxclk TNM_NET = "PIN_PHY_RXCLK";
TIMESPEC "TS_PIN_PHY_RXCLK" = PERIOD "PIN_PHY_RXCLK" 8ns HIGH 50%;