Vhdl 网络实例化问题
我有一个非常简单的状态机,它设置一些控制信号以与第三方IP进行交互。代码大致如下所示:Vhdl 网络实例化问题,vhdl,fpga,Vhdl,Fpga,我有一个非常简单的状态机,它设置一些控制信号以与第三方IP进行交互。代码大致如下所示: entity testip is port ( ... fifo_dataout : in std_logic_vector(0 to 31); ip_dataout : in std_logic_vector(0 to 31); ip_ce : out std_logic; ip_we
entity testip is
port (
...
fifo_dataout : in std_logic_vector(0 to 31);
ip_dataout : in std_logic_vector(0 to 31);
ip_ce : out std_logic;
ip_we : out std_logic;
ip_datain : out std_logic_vector(0 to 31);
);
end entity testip;
architecture imp of testip is
signal ip_ce_ns : std_logic;
signal ip_we_ns : std_logic;
signal ip_ce_cs : std_logic;
signal ip_we_cs : std_logic;
signal ip_dataout_i : std_logic_vector(0 to 31);
...
attribute keep: string;
attribute keep of ip_ce : signal is "True";
attribute keep of ip_we : signal is "True";
begin
COMB : process (...)
begin
ip_ce_ns <= ip_ce_cs;
ip_we_ns <= ip_we_cs;
case ip_nstate_cs is
when IDLE =>
...
end case;
end process COMB;
REG: process (Clk) is
begin
if (Clk'event and Clk = '1') then
if (Rst = '1') then
ip_ce_cs <= '1';
ip_we_cs <= '1';
...
else
ip_ce_cs <= ip_ce_ns;
ip_we_cs <= ip_we_ns;
...
end if;
end if;
end process REG;
S0: ip_ce <= ip_ce_cs;
S1: ip_we <= ip_we_cs;
S2: ip_datain <= fifo_dataout;
S3: ip_dataout_i <= Ip_dataout;
end architecture imp;
实体testip是
港口(
...
fifo_数据输出:标准逻辑_向量中(0到31);
ip_数据输出:标准逻辑_向量中(0到31);
ip_ce:输出标准逻辑;
ip_-we:输出标准逻辑;
ip_数据输入:输出标准逻辑向量(0到31);
);
终末实体试验;
testip的体系结构imp是
信号ip地址:标准逻辑;
信号ip地址:标准逻辑;
信号ip_ce_cs:标准逻辑;
信号ip_we_cs:标准逻辑;
信号ip_数据输出_i:标准逻辑_向量(0至31);
...
属性keep:string;
ip_ce属性保持:信号为“真”;
ip_we的属性保持:信号为“真”;
开始
梳:进程(…)
开始
ip\u ce\u ns信号可能被优化掉了……看起来你有一个产生ip\ce的线环,你正在用不存在的fifo\u数据输出驱动ip\u数据输入。您没有指出您的目标,但是现代FPGA合成在默认情况下非常积极地删除未使用/未驱动的逻辑,通常只在日志中显示一条信息或警告消息。在你的合成日志中爬行,寻找任何与你正在寻找的信号相关的奇怪信息。这些信号可能已经被优化掉了……看起来你有一个生成ip\ce的线环,你正在用不存在的fifo\u数据输出驱动ip\u数据输入。您没有指出您的目标,但是现代FPGA合成在默认情况下非常积极地删除未使用/未驱动的逻辑,通常只在日志中显示一条信息或警告消息。浏览你的合成日志,寻找任何与你所寻找的信号有关的奇怪信息。正如查尔斯所说,你的信号可能正在被优化
如果您将synthesis属性设置为preserve hierarchy,那么您的端口将得到维护(但是您错过了一些优化)
我猜你对信号的关注程度不如你对时间的关注程度。在这种情况下,在约束中使用起点和终点,而不是网络名称
或者,您可以在源代码中的信号上设置keep属性。这当然会降低源代码的可移植性。我的建议是使用起点和终点
testip是你的最高级别吗?如果不尝试
Net "*/testip/ip_ce" MAXDELAY = 2 ns;
是否检测到该网络
Net "*/testip/ip_ce_cs" MAXDELAY = 2 ns;
事实上,我遗漏了更明显的东西,testip实例的名称是什么?在约束中使用它而不是testip。i、 e
u_test_ip : testip
然后
正如查尔斯所说,你的信号可能正在被优化
如果您将synthesis属性设置为preserve hierarchy,那么您的端口将得到维护(但是您错过了一些优化)
我猜你对信号的关注程度不如你对时间的关注程度。在这种情况下,在约束中使用起点和终点,而不是网络名称
或者,您可以在源代码中的信号上设置keep属性。这当然会降低源代码的可移植性。我的建议是使用起点和终点
testip是你的最高级别吗?如果不尝试
Net "*/testip/ip_ce" MAXDELAY = 2 ns;
是否检测到该网络
Net "*/testip/ip_ce_cs" MAXDELAY = 2 ns;
事实上,我遗漏了更明显的东西,testip实例的名称是什么?在约束中使用它而不是testip。i、 e
u_test_ip : testip
然后
我认为keep
属性区分大小写,您是否尝试过“true”
而不是“true”
?我认为keep
属性区分大小写,您尝试过“true”
而不是“true”
?谢谢Charles,我检查了合成日志,它没有说任何地方的信号已经修剪。事实上,这些信号根本没有被提及。。。非常令人困惑的是,谢谢查尔斯,我检查了合成日志,它没有说任何地方的信号已经被修剪。事实上,这些信号根本没有被提及。。。非常令人困惑的是,Georg,我将看看这个keep属性和preserve hierarchy选项。你能用“开始和结束”点来解释你的意思吗?我还不是100%清楚你的意思。嗨,Richard,告诉我你用什么工具进行合成,我会给你写一个例子。非常感谢Georg,我用XST 12.1进行合成。我只是想试试keep属性的运气,让我们看看这是否有效。我现在添加了keep属性,正如您在上面所看到的,不幸的是,它没有任何效果,并且在网络列表中找不到ip_ce和ip_we…使用Net“*/testip/ip_ce”MAXDELAY=2 ns;相反,给了我同样的结果。干杯,乔治,我将看看这个keep属性和preserve hierarchy选项。你能用“开始和结束”点来解释你的意思吗?我还不是100%清楚你的意思。嗨,Richard,告诉我你用什么工具进行合成,我会给你写一个例子。非常感谢Georg,我用XST 12.1进行合成。我只是想试试keep属性的运气,让我们看看这是否有效。我现在添加了keep属性,正如您在上面所看到的,不幸的是,它没有任何效果,并且在网络列表中找不到ip_ce和ip_we…使用Net“*/testip/ip_ce”MAXDELAY=2 ns;相反,不幸的是,给了我同样的结果。