Vhdl ISim后路由模拟错误
我试图在ISE中用Isim模拟器测试一个VHDL项目。行为模拟工作正常,而Post Route会产生大量此类错误: 警告:/X_FF RST上的脉冲宽度高违规; 预期值:=1.794纳秒;观测值:=1.369纳秒 为什么会出现这个错误?我该怎么解决呢? 我试图在我的Basys2板上加载相对位流,但它不起作用。可能是因为这个模拟错误吗?谢谢 控制单元代码:Vhdl ISim后路由模拟错误,vhdl,simulation,fpga,xilinx,xilinx-ise,Vhdl,Simulation,Fpga,Xilinx,Xilinx Ise,我试图在ISE中用Isim模拟器测试一个VHDL项目。行为模拟工作正常,而Post Route会产生大量此类错误: 警告:/X_FF RST上的脉冲宽度高违规; 预期值:=1.794纳秒;观测值:=1.369纳秒 为什么会出现这个错误?我该怎么解决呢? 我试图在我的Basys2板上加载相对位流,但它不起作用。可能是因为这个模拟错误吗?谢谢 控制单元代码: type state is (IDLE, INIT, LSHIFT, ADD, SUB, SETQ); signal curr
type state is (IDLE, INIT, LSHIFT, ADD, SUB, SETQ);
signal curr, nxt : state := IDLE;
begin
p0: process(clock, reset_n_in)
begin
if reset_n_in = '0' then
curr <= IDLE;
elsif rising_edge(clock) then
curr <= nxt;
end if;
end process;
fsm : process (curr, start,reset_n_in,fine_conteggio,S)
begin
-- if reset_n_in = '0' then
-- reset_n_out <='0';
-- else
-- reset_n_out <='1';
-- end if;
done <='0';
en_write_Q <= '0';
en_shift <= '0';
en_M <= '0';
incrementa_conteggio <= '0';
en_write_S_A <= '0';
carica_operando_Q <= '0';
subtract <= '0';
case curr is
when IDLE =>
if start = '1' then
reset_n_out <='0';
done <='0';
nxt <= INIT;
else
nxt <= IDLE;
end if;
if fine_conteggio = '1' then
done <='1';
nxt <= IDLE;
end if;
when INIT =>
en_M <= '1';
en_write_S_A <= '1';
en_write_Q <= '1';
reset_n_out <='1';
carica_operando_Q <= '1';
nxt <= LSHIFT;
when LSHIFT =>
en_shift <= '1';
nxt <= SUB;
when SUB =>
subtract <= '1';
en_write_S_A <= '1';
nxt <= SETQ;
when ADD =>
en_write_S_A <= '1';
if fine_conteggio = '0' then
incrementa_conteggio <= '1';
nxt <= LSHIFT;
else
nxt <= IDLE;
end if;
when SETQ =>
en_write_Q <= '1';
if S = '1' then
nxt <= ADD;
else
if fine_conteggio = '0' then
incrementa_conteggio <='1';
nxt <= LSHIFT;
else
nxt <= IDLE;
end if;
end if;
end case;
end process;
类型状态为(IDLE、INIT、LSShift、ADD、SUB、SETQ);
信号电流,nxt:状态:=空闲;
开始
p0:进程(时钟、复位)
开始
如果reset_n_in='0',则
curr时序模拟不是基于VHDL的FPGA设计流程的常规部分,除非:
您正在尝试跟踪可疑的工具错误(不太可能!)
您正在验证涉及多个时钟和时钟域交叉或异步外部信号的设计
您不确定您的时间限制覆盖范围
通常,在遵循良好同步设计实践的设计中,行为模拟验证设计,静态计时分析比计时模拟更彻底地验证设计是否满足计时约束:假设您正确设置了计时约束。解释为什么这种方法工作得很好(考虑到有效的时间限制)
但是,了解如何运行计时模拟是值得的。考虑到后路由模拟模型近似于实际的设备定时,而不是delta循环模型,它可能与行为测试台进行不同的交互
因此,可能需要对试验台进行一些调整,以使其能够与行为模型和路线后模型同样良好地工作
我不知道有什么好的文本来描述如何做到这一点,但它帮助我抓住了其中的问题(并让提问者接近他的问题)
使用这种方法的一个好迹象是,如果你能让行为模型和后路线模型以同样的方式使测试台失败。正如Brian在其回答下面的评论中所强调的那样:
你需要时间限制
即使你的教授还没有谈到。只有在有定时约束的情况下,静态定时分析器(STA)才能完成其工作。此外,Place&Route算法尊重时序约束,并尝试在两个单元之间找到更好的路由和/或将逻辑放置到单元上,以便满足所请求的时序(例如时钟频率)
Basys2 FPGA板提供可配置的时钟振荡器。您可以通过跳线将其配置为25 MHz、50 MHz或100 MHz,如中所述。默认设置为50 MHz,而测试台模拟100 MHz时钟
Xilinx ISE工具链使用所谓的“用户约束文件”(简称UCF)来指定时间约束。
在Xilinx ISE的项目导航器中,可以通过菜单“项目->新建文件->实施约束文件”添加UCF文件。指定文件名,然后按“下一步”。然后,新文件将显示在设计层次结构中(左侧)。您可以通过双击来编辑它。它只是一个文本文件
要指定100 MHz时钟,必须在UCF文件中键入:
NET "clock" TNM_NET = "clock_group";
TIMESPEC "TS_clock" = PERIOD "clock_group" 10 ns HIGH 50%;
第一行将连接到信号时钟的所有触发器添加到(新创建的)定时组时钟组。然后,第二行将该组限制为特定的时钟频率,此处为100 MHz的10 ns
,具有特定的占空比(此处为50%)。活动时钟边缘是上升沿(高
)。定时规范还有一个名称,必须以TS
开头。STA的定时报告随后引用该名称
编辑UCF文件后,必须再次运行“实施设计”步骤,以便应用新约束
要指定占空比为40%的50 MHz时钟,请改为:
NET "clock" TNM_NET = "clock_group";
TIMESPEC "TS_clock" = PERIOD "clock_group" 20 ns HIGH 40%;
只有在同一时钟的上升沿触发了两个触发器,而下降沿触发了其他触发器时,占空比的实际值才是重要的。如果电路板手册中没有规定,只需选择50%
关于时间限制和UCF文件语法的更多信息,您可以在中找到。如果没有任何代码和刺激,我们无法帮助您解决这个问题……至少从错误消息本身我可以看出,您没有为输入RST保留时间。我的项目中有很多代码。因为篇幅太长,所以我没有发。然而,如果这可以帮助,我可以张贴它没有问题。关于错误消息,你重置脉冲是短。如何生成重置?@Paebels我添加了我项目的代码。它应该负责恢复分区。然而,重置信号在顶部实体中,在测试台中始终设置为零。感谢您的回答。从我的目的来看,我对VHDL和时序模拟非常陌生。我尝试了路由后模拟,因为我试图调试我的代码,因为它在basys2板上不起作用,而行为模拟工作正常。从您最近的评论到问题,您需要时间限制-可能只是在这个阶段的时钟周期-然后重新运行合成和P&R,并检查它们是否符合时间要求。如果是这样,请再次尝试硬件设计。(您可能还需要输入和输出引脚约束,具体取决于它连接到什么)最后,如果您的设计是针对100 MHz时钟编写的,那么您还将跳线设置为100 MHz,将UCF文件设置为100 MHz。好的。。。在时钟上添加了定时约束,但在路由后模拟中没有任何更改。我仍然会遇到同样的错误。好的,那么你有两个选择:a)如果你只是想让它在FPGA板上工作,那么仔细检查所有引脚分配是否正确,时钟跳线是否设置为100 MHz。b) 如果错误仍然存在,那么您应该遵循Brian关于如何编写的建议