集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 4038|回复: 6

状态机综合的问题

[复制链接]
interi 发表于 2010-6-26 00:20:28 | 显示全部楼层 |阅读模式
本帖最后由 fpgaw 于 2010-11-19 06:41 编辑

有个状态机在D版的ise5.1中综合不过去,能够检测到有状态机就是莫名其妙的fail
在ise4.2中顺利通过,在synplify中出错如下,@E:"F:\vhdl_generatorfile\state_control\state_control3.vhd":59:8:59:11|Multiple non-tristate drivers for net adda in state_control
不知道为什么,请DX们帮忙看看
 楼主| interi 发表于 2010-6-26 01:31:13 | 显示全部楼层
----------------------------------------------------<br>
----------------------------------------------------<br>
--&nbsp;&nbsp;<br>
--&nbsp;&nbsp;Library Name :&nbsp;&nbsp;encoder<br>
--&nbsp;&nbsp;Unit&nbsp; &nbsp; Name :&nbsp;&nbsp;state_control<br>
--&nbsp;&nbsp;Unit&nbsp; &nbsp; Type :&nbsp;&nbsp;State Machine<br>
--&nbsp;&nbsp;<br>
------------------------------------------------------<br>
<br>
library ieee;<br>
use ieee.std_logic_1164.all;<br>
use ieee.STD_LOGIC_UNSIGNED.all;<br>
library synplify;<br>
use synplify.attributes.all;<br>
<br>
<br>
entity state_control is<br>
&nbsp;&nbsp;port (<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;reset : in std_logic;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;d : in std_logic_vector(7 downto 0 );<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;clk : in std_logic;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;eoc : in std_logic;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;oe : out std_logic;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;adda : out std_logic;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;ale : out std_logic;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;start : out std_logic;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;q : out std_logic_vector(7 downto 0 );<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;QQ : out std_logic_vector(3 downto 0 )<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;);<br>
<br>
end state_control;<br>
<br>
<br>
architecture state_control of state_control is<br>
<br>
&nbsp;&nbsp;signal lock : std_logic;<br>
<br>
&nbsp;&nbsp;type visual_S0_states is (S0, S1, S2, S3, S4, S5, S6, S7);<br>
&nbsp;&nbsp;signal visual_S0_current : visual_S0_states;<br>
<br>
<br>
begin<br>
&nbsp;&nbsp;adda&lt;='1';(出错是这个赋值产生的!!!)<br>
<br>
<br>
<br>
&nbsp;&nbsp;-- Synchronous process<br>
&nbsp;&nbsp;state_control_S0:<br>
&nbsp;&nbsp;process (clk, reset)<br>
&nbsp;&nbsp;begin<br>
<br>
&nbsp; &nbsp; if (reset = '1') then<br>
&nbsp; &nbsp;&nbsp; &nbsp;visual_S0_current &lt;= S0;<br>
&nbsp; &nbsp; elsif (clk'event and clk = '1') then<br>
<br>
&nbsp; &nbsp;&nbsp; &nbsp;case visual_S0_current is<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;when S0 =&gt;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; visual_S0_current &lt;= S1;<br>
<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;when S1 =&gt;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; visual_S0_current &lt;= S2;<br>
<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;when S2 =&gt;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; visual_S0_current &lt;= S3;<br>
<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;when S3 =&gt;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; if (eoc = '0') then<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;adda&lt;='0';<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;visual_S0_current &lt;= S4;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; else<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;visual_S0_current &lt;= S3;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; end if;<br>
<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;when S4 =&gt;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; if (eoc = '1') then<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;visual_S0_current &lt;= S5;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; else<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;visual_S0_current &lt;= S4;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; end if;<br>
<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;when S5 =&gt;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; visual_S0_current &lt;= S6;<br>
<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;when S6 =&gt;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; visual_S0_current &lt;= S7;<br>
<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;when S7 =&gt;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; visual_S0_current &lt;= S0;<br>
<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;when others =&gt;<br>
<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; visual_S0_current &lt;= S0;<br>
&nbsp; &nbsp;&nbsp; &nbsp;end case;<br>
&nbsp; &nbsp; end if;<br>
&nbsp;&nbsp;end process;<br>
<br>
&nbsp;&nbsp;-- Combinational process<br>
&nbsp;&nbsp;state_control_S0_comb:<br>
&nbsp;&nbsp;process (d, visual_S0_current)<br>
&nbsp;&nbsp;begin&nbsp; &nbsp;-- Combinational process<br>
<br>
&nbsp; &nbsp; case visual_S0_current is<br>
&nbsp; &nbsp;&nbsp; &nbsp;when S0 =&gt;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;qq&lt;="0000";<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;ale&lt;='0';<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;start&lt;='0';<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;oe&lt;='0';<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;lock&lt;='0';<br>
<br>
&nbsp; &nbsp;&nbsp; &nbsp;when S1 =&gt;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;qq&lt;="0001";<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;ale&lt;='1';<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;start&lt;='0';<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;oe&lt;='0';<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;lock&lt;='0';<br>
<br>
&nbsp; &nbsp;&nbsp; &nbsp;when S2 =&gt;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;qq&lt;="0010";<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;ale&lt;='1';<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;start&lt;='1';<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;oe&lt;='0';<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;lock&lt;='0';<br>
<br>
&nbsp; &nbsp;&nbsp; &nbsp;when S3 =&gt;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;qq&lt;="0011";<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;ale&lt;='1';<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;start&lt;='1';<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;oe&lt;='0';<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;lock&lt;='0';<br>
<br>
&nbsp; &nbsp;&nbsp; &nbsp;when S4 =&gt;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;qq&lt;="0100";<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;ale&lt;='0';<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;start&lt;='0';<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;oe&lt;='0';<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;lock&lt;='0';<br>
<br>
&nbsp; &nbsp;&nbsp; &nbsp;when S5 =&gt;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;qq&lt;="0101";<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;ale&lt;='0';<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;start&lt;='1';<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;oe&lt;='1';<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;lock&lt;='0';<br>
<br>
&nbsp; &nbsp;&nbsp; &nbsp;when S6 =&gt;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;qq&lt;="0110";<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;ale&lt;='0';<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;start&lt;='0';<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;oe&lt;='1';<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;lock&lt;='1';<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;q&lt;=d;<br>
<br>
&nbsp; &nbsp;&nbsp; &nbsp;when S7 =&gt;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;qq&lt;="0111";<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;ale&lt;='0';<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;start&lt;='0';<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;oe&lt;='1';<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;lock&lt;='1';<br>
<br>
&nbsp; &nbsp;&nbsp; &nbsp;when others =&gt;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;null;<br>
&nbsp; &nbsp; end case;<br>
&nbsp;&nbsp;end process;<br>
<br>
&nbsp;&nbsp;<br>
end state_control;<br>
CCIE 发表于 2010-6-26 01:45:00 | 显示全部楼层
adda多次给值了,去掉出错的一句;如想给初值,将它放入state_control_S0的&ldquo;if (reset = '1') then&rdquo;句下。
VVIC 发表于 2010-6-26 02:41:50 | 显示全部楼层
[这个贴子最后由ahan在 2003/10/07 03:14pm 第 1 次编辑]<br>
<br>
hehe ,谢谢哦。今后我记得把xst中的warning也仔细看看。
CCIE 发表于 2010-6-26 02:52:55 | 显示全部楼层
-- Synchronous process<br>
state_control_S0:<br>
process (clk, reset)<br>
是一个带异步复位的时钟进程吧!:)
大鹏 发表于 2020-6-24 11:50:28 | 显示全部楼层
状态机综合的问题
zxopenhl 发表于 2020-6-26 17:34:14 | 显示全部楼层
状态机综合的问题
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2025-4-30 02:27 , Processed in 0.068128 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表