在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
12
返回列表 发新帖
楼主: dddk

[求助] 【求助+讨论】 14.1版本的ise xst综合器对状态机的处理 的疑问!同学们请进!

[复制链接]
 楼主| 发表于 2012-9-8 22:00:38 | 显示全部楼层


你好。你的方法是正解!!!综合器认识他是状态机了!
为什么?请指点!多谢了!

[quote]回复  dddk




就这段代码,能综合出Latch我吃鼠标
Timme 发表于 2012-9-8 09:38



dddk 发表于 2012-9-8 21:52
[/quote]

你的改动是
next_data = 'd1;
我的改动是next_state = next_state;
差距就有这么大?
 楼主| 发表于 2012-9-8 22:03:20 | 显示全部楼层
真心感谢 Timme ,多谢指点!
发表于 2012-9-8 22:12:07 | 显示全部楼层


你好。你的方法是正解!!!综合器认识他是状态机了!
为什么?请指点!多谢了!
dddk 发表于 2012-9-8 21:52




原因我第一次回复已经说得比较明白了。如果你暂时理解不了,就在一个时序always块(always@(posedge clk))里写完整个状态机。不要分两段写,不要用always块写组合逻辑(always@(*)),可以100%避免出Latch,除非你把异步复位写成一个不定值。。。


现在的综合器对付一段式状态机毫无压力,不用担心有什么副作用。
发表于 2012-9-8 22:23:02 | 显示全部楼层
本帖最后由 Timme 于 2012-9-8 22:25 编辑


dddk 发表于 2012-9-8 21:52



你的改动是
next_data = 'd1;
我的改动是next_state = ne ...

dddk 发表于 2012-9-8 22:00 [/quote]

Latch就是实现一个“保持”的组合逻辑。比如:




  1. always@(*)
  2.   if(A)
  3.     Y = B;
  4.   else
  5.     Y = Y;


复制代码
不加else默认也是保持,所以这段代码可以简化为:




  1. always@(*)
  2.   if(A)
  3.     Y = B;



复制代码
以上两段没有任何区别。

为了去除Latch,我们需要去掉“保持”这个动作,即在else时不保持,如:




  1. always@(*)
  2.   if(A)
  3.     Y = B;
  4.   else
  5.     Y = C;



复制代码
这种写法有一个变种,就是先赋初值:




  1. always@(*)
  2.   begin
  3.      Y = C;
  4.      if(A)
  5.        Y = B;
  6.   end



复制代码
以上两种写法结果也是完全一样的。你在状态机里也用到上面这个写法,虽然我不知你是不是无意中使用的,因为这种写法相对比较高级。。。

当同一个always块中组合逻辑信号不止一个时,要留意隐含的“保持”动作,如:




  1. always@(*)
  2.   if(A)
  3.     begin
  4.         Y1 = B;
  5.         Y2 = C;
  6.     end
  7.   else
  8.     Y1 = D;


复制代码
在这里,else里Y2没写,默认是一个“保持”动作。所以Y2被综合为Latch。
 楼主| 发表于 2012-9-9 20:40:22 | 显示全部楼层
多谢这么详细的指点!
那个保持的问题生成lutch,我能理解,这也是我之前为什么说按设计思路就应该是个lutch的原因。

还有那种先赋值再if的写法,我在实际功能上是出了问题的,存在严重的毛刺问题,不知道是不是其他原因造成的。


我还想请教下,就是你说分段式的状态机已经落后了,那么当前流行的状态机写法是什么样子的呢?能指点一二么?
我5年前搞了3年简单的逻辑,后来转做了其他的,现在换工作,又回到了逻辑的路上,所以请多指点。



你的改动是
next_data = 'd1;
我的改动是next_state = ne ...

dddk 发表于 2012-9-8 22:00 [/quot ...
Timme 发表于 2012-9-8 22:23

 楼主| 发表于 2012-9-9 20:42:31 | 显示全部楼层


原因我第一次回复已经说得比较明白了。如果你暂时理解不了,就在一个时序always块(always@(posedge  ...
Timme 发表于 2012-9-8 22:12




   一段式状态机综合器是能识别,关键是代码可读性比较差,单位目前不允许使用一段式的。
发表于 2013-7-17 11:28:06 | 显示全部楼层
深受启发 学习了
发表于 2015-5-27 10:06:15 | 显示全部楼层
回复 14# Timme

正解!
发表于 2016-7-27 11:54:45 | 显示全部楼层
回复 14# Timme


   楼主高人!!!!!!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-23 13:17 , Processed in 0.023291 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表