赛灵思
直播中

陈桂平

8年用户 274经验值
私信 关注
[问答]

Spartan 3-AN时钟和VHDL让ISE合成时出现错误该怎么办?

你好,我实际上是通过阅读一本书来学习VHDL,到目前为止一直都很好。
我一直在搞乱modelsim,以模拟书中的一些例子。
现在我想在我的Spartan 3-AN开发板上开始尝试更实用的东西。我设法使用一些板载开关和LED成功编译并成功运行简单的组合逻辑门。当我尝试合成一些顺序时,问题就开始了。
电路
以下是在modelsim中完美运行的行为描述:[code] library ieee;使用ieee.std_logic_1164.all;实体模块isPort(CLK_OUT:out STD_LOGIC);结束模块;架构模块的行为i***eginprocessvariable dummy_var:STD_LOGIC:='0
'; beginwait 10 ns; dummy_var:= not dummy_var; CLK_OUT end process; end Behavioral; [/ code]试图让ISE合成上面的内容我得到以下错误信息:Pack:198 - NCD没有生成。
所有逻辑都从设计中删除。
这通常是由于没有输入或输出PAD连接......好吧,这里发生了什么?顺便说一句,我试图合成的代码缺少等待线路,我认为FPGA会在那里引入Delta延迟
,因为时钟频率当然不是无限的。我看到FPGA内部的DCM是处理时钟的,但据我所知,我不需要做任何配置。
我需要修改板上的CLKIN信号(调理,乘以ecc ..),在我的情况下应该是50MHz。我是否需要对时钟进行某种配置?
我是否必须在我的VHDL源代码中声明一些相关内容?我知道在互联网上有很多关于此的信息,但此刻我真的迷失了。任何提示都会非常感激。谢谢!

回帖(9)

郭淑慧

2019-8-9 08:59:49
FPGA不知道您的50 MHz时钟输入,除非您实际使用代码中的时钟输入 - 也就是说,无论何时编写某些特定于时序的代码,DCM都不会自动使用它。
还记得VHDL语言的相当大部分仅在模拟期间工作,并且不能被合成(例如“等待10ns”语句)。
您可以使用适用于综合的代码版本: 
实体模块是 
端口(CLK_OUT:输出STD_LOGIC; 
CLK_IN:在STD_LOGIC中);
结束模块; 
架构模块的行为是
开始 
处理(CLK_IN) 
变量dummy_var:STD_LOGIC:='0';
开始if(rising_edge(CLK_IN))然后dummy_var:= not dummy_var; 
CLK_OUT结束if;
结束过程;
结束行为; 
只需记住将CLK_IN信号分配给外部振荡器所连接的任何引脚;)
上面的代码在ModelSim中也可以正常工作,你只需要自己在CLK_IN上创建一个时钟激励(例如,在波形窗口中右键单击CLK_IN并选择'Clock',然后分配一个20 ns的周期来模拟50
MHz时钟)。
举报

冯敏敏

2019-8-9 09:15:16
谢谢sonicwave,这很有帮助!
无论如何,还有一件我真的无法理解的事情:如果我有一个包含大量顺序指令的流程怎么办?
在每个顺序指令后,我是否必须等待时钟事件?
如果不是,每个实际执行之间的延迟是多少?
我相信流程语句实际上是使用sequantial状态机实现的。
如果这是真的,那么每条指令之间的实际延迟(好吧,比方说状态)应该是每个触发器的时钟输入的函数。
起初我认为FPGA中有一条硬连线时钟线,它驱动每个片的每个触发器的时钟输入。
无论如何这似乎是错误的,但仍然,我不明白:smileysad:
举报

郭淑慧

2019-8-9 09:29:55
正如您在前面发布的代码中所看到的,该进程有一个包含CLK_IN信号的敏感列表(“process(CLK_IN);”行)。
因此,只要该信号发生变化,它就会运行。
过程中的第一个语句“if(rising_edge(CLK_IN))then”表示无论语句内部是什么语句,只有在检测到上升沿时才会运行 - 这是描述上升的标准方法之一 -
边沿触发触发器,在CLK_IN上运行。
因此,每次执行过程之间的延迟完全取决于您在时钟信号上获得上升沿的频率。
对于其他标准结构,请尝试查看ISE中的语言模板(编辑 - >语言模板 - > VHDL - >综合构造 - >编码示例 - >触发器)。
你也可以使用任何其他时钟信号 - 来自另一个外部振荡器,来自DCM的派生时钟,或来自你自己的逻辑(虽然这通常不是一个好主意;)) - 而不是你的过程中的CLK_IN,而合成器应该
将所选信号路由到触发器的时钟端口。
因此,没有单个硬连线时钟线 - 而是有许多低偏移时钟线,可用于路由您选择用作时钟的任何信号。
FPGA只能完全按照您的要求进行操作!
(大部分时间至少:P)
举报

郭淑慧

2019-8-9 09:37:06
顺便说一句,我可能会建议在学习时坚持信号而不是变量。
在时钟进程中分配的信号总是实现为触发器,而变量的实现取决于你如何使用它们(如果在分配变量之前读取变量,它实现为触发器,如果​​你是
在阅读之前分配它)。
因此,如果坚持信号,可以更容易地跟踪一切是如何工作的......当然,其他人可能对此有不同的看法;)
举报

更多回帖

发帖
×
20
完善资料,
赚取积分