Xilinx VHDL多周期约束

时间:2013-01-30 23:54:51

标签: vhdl xilinx

我有一些代码在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中,我已经有了一个如下所示的timespec:

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

1 个答案:

答案 0 :(得分:0)

我认为你需要一个FROM:TO约束:

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

其中value可以基于其他时间规格,例如TS_CLK*4

因此,您需要将您的流程调整为仅在输出信号上设置触发器,创建一个包含输入的时间组,另一个包含输出的时间组,并将其用于group1group2

因此,第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我认为)