我的VHDL中的Synthesise有问题。这是代码的一部分,它给了我错误:
CASE stare_curenta IS
WHEN verde =>
stare_urm <= albastru;
rosuS1368stg <= '1';
galbenS1368stg <= '0';
verdeS1368stg <= '0';
rosuS1368 <= '0';
galbenS1368 <= '0';
if ( clock'event and clock = '0') then
galbenS1368 <= '1';
end if;
verdeS1368 <= '1';
rosup1v1i4v2i3v1i2v2i6v1i5v2i8v1i7v2 <= '0';
verdep1v1i4v2i3v1i2v2i6v1i5v2i8v1i7v2 <= '1';
rosuS2457stg <= '1';
galbenS2457stg <= '0';
if (clock'event and clock = '0') then
galbenS2457stg <= '1';
end if;
verdeS2457stg <= '0';
rosuS2457 <= '1';
galbenS2457 <= '0';
verdeS2457 <= '0';
rosup2v1i1v2i4v1i3v2i5v1i8v2i7v1i6v2 <= '1';
verdep2v1i1v2i4v1i3v2i5v1i8v2i7v1i6v2 <= '0';
我在下面有另一个时钟和时钟事件过程,如下所示:
PROCESS(clock,stare_urm)
BEGIN
if (clock'event and clock = '1')then
stare_curenta <= stare_urm;
end if;
END PROCESS;
&#39;检查语法&#39;和&#39;模拟&#39;进展顺利,只有Synthesise它给我错误:信号galbenS1368无法合成,错误的同步描述。当前软件版本不支持您用于描述同步元素(寄存器,内存等)的描述样式。
谢谢!
答案 0 :(得分:0)
问题是:
if (clock'event and clock = '0') then
里面你的状态解码。这不是语法问题,模拟器将尽职尽责地执行您所写的内容(尽管您可能无法得到您想要的结果),但正如错误消息所述,它不是受支持的合成风格(在更大的组合过程中嵌入一个时钟代码段,即一个用于创建寄存器的过程的一部分。)
无论哪种方式,我都不确定你真正想做什么。当灵敏度列表中的信号发生变化时,将评估过程。你编写它的方式,你有效地说&#34;当评估这个过程时,如果在那个时刻正在下降的时刻,注册信号&#34;,即使你可能想要的是分配一个值,然后在下一个下降时钟边沿上注册。
假设最后一个语句是这样,它基本上告诉你如何编码它。它有两个部分。 (1)分配一个值:
when verde =>
...
galbenS2457stg <= '1';
(2)在下一个时钟下降沿注册:
process (clock)
begin
if clock'event and clock = '0' then
galbenS2457stg_reg <= galbenS2457stg;
end if;
end process;
综合中的同步设计本质上是寄存器 - &gt;一堆组合逻辑 - &gt;注册 - &gt;组合逻辑 - &gt;等编码就好了,你的寄存器与代码中的组合逻辑分开,是开始考虑硬件的好方法。
编辑以澄清
根据你在评论中的回答,似乎我对我推荐的内容不够清楚。
您有一些处理状态机的过程。我假设其中大部分都是非时钟的。您试图在其中插入小的时钟部分,这就是该工具所抱怨的内容。我建议您尝试以下列方式进行编码(不是完整的代码,只是为了说明这一点):
comb1 : process (...) -- fill in sensitivity list as needed
begin
-- state machine decode
...
when verde =>
...
galbenS2457stg <= '1';
...
end process comb1;
clocked1 : process (clock)
begin
if clock'event and clock = '0' then
galbenS2457stg_reg <= galbenS2457stg;
end if;
end process clocked1;
如果需要,请更改名称 - 由于您只发布了部分代码,因此galbenS2457stg
根本不是输出。无论如何命名它们,在状态解码过程中分配的信号应该是内部信号,并且将在架构声明区域中声明,而不是作为输出端口,而时钟信号将是输出端口,并且将被声明为这样