[CPLD] 请教关于3段式状态机的问题

[复制链接]
5662|11
 楼主| alecsoo 发表于 2012-3-21 15:51 | 显示全部楼层 |阅读模式
本帖最后由 alecsoo 于 2012-3-21 15:59 编辑

关于3段式状态机的问题,请各位大虾指教:
代码:
reg [1:0] state_now=2'b00;  // 表示系统当前状态
reg [1:0] state_next=2'b00;  // 表示系统下一个状态

parameter  
        Wait = 2'b00,  // 等待状态
       Send = 2'b01; // 产生发送

always @(posedge clk or posedge rst) begin
      if(rst) begin
              state_now <= Wait;
      end
      else begin
            state_now <= state_next;
      end
end

always @(state_now or start or type) begin
       case(state_now)
              Wait:
                 if(start) begin
                        state_next = Send;
                        case(type)
                             2'b00: duty<=1;
                             2'b01: duty<=5;
                             2'b10: duty<=9;
                            2'b11: duty<=0;
                         endcase
               end
           Send:
                 if(!start) begin
                       state_next = Wait;
                       duty<=0;
                 end
           endcase
      end

always @(posedge clk or  posedge rst) begin
        if(rst)
             dout <= 1'b0;
        else
        case(state_next)
              Wait:;
              Send:;
              default:;
        endcase
end


为什么编译后总是有warning:
WARNING:Xst:737 - Found 2-bit latch for signal <state_next>. Latches may be generated from incomplete case or if statements. We do not recommend the use of latches in FPGA/CPLD designs, as they may lead to timing problems.
WARNING:Xst:2677 - Node <state_next_0> of sequential type is unconnected in block <;PrintHclk>.
WARNING:Xst:2677 - Node <state_next_1> of sequential type is unconnected in block <;PrintHclk>.
WARNING:Xst:2677 - Node <state_now_1> of sequential type is unconnected in block <;PrintHclk>.
WARNING:Xst:2677 - Node <state_now_0> of sequential type is unconnected in block <;PrintHclk>.

请高人指点!
bityoung 发表于 2012-3-21 16:08 | 显示全部楼层
1# alecsoo 如图所示,没有default。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| alecsoo 发表于 2012-3-21 16:19 | 显示全部楼层
2# bityoung

首先谢谢 bityoung的指导

两个语句中都将default加上了
但是还是提示:
WARNING:Xst:737 - Found 2-bit latch for signal <state_next>. Latches may be generated from incomplete case or if statements. We do not recommend the use of latches in FPGA/CPLD designs, as they may lead to timing problems.
WARNING:Xst:737 - Found 4-bit latch for signal <duty>. Latches may be generated from incomplete case or if statements. We do not recommend the use of latches in FPGA/CPLD designs, as they may lead to timing problems.
bityoung 发表于 2012-3-21 16:41 | 显示全部楼层
只在横线处加default语句就行了!
 楼主| alecsoo 发表于 2012-3-21 16:46 | 显示全部楼层
4# bityoung

不好意思,表达错误,横线处的default加了

程序仿真结果和想的一样,就是warning消除不掉,心中总是有疙瘩
bityoung 发表于 2012-3-21 17:14 | 显示全部楼层
5# alecsoo 锁存器是由于if语句没有else分支造成的!如下图所示:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评分

参与人数 1威望 +1 收起 理由
alecsoo + 1

查看全部评分

bityoung 发表于 2012-3-21 17:15 | 显示全部楼层
5# alecsoo

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
jakfens 发表于 2012-3-21 17:18 | 显示全部楼层
可能某个if语句中后面没有接上相应的else 可能会锁存

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
jakfens 发表于 2012-3-21 17:21 | 显示全部楼层
还有 这个 试试看

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
jakfens 发表于 2012-3-21 17:22 | 显示全部楼层
嘿嘿 答慢了
 楼主| alecsoo 发表于 2012-3-21 22:34 | 显示全部楼层
呵呵 谢谢各位
今天晚上有点事情,刚刚才按照各位的建议修改了一下,应该确定是由于if后面没有相应的else导致的
现在没有警告了,十分感谢大家!
nongfuxu 发表于 2012-3-21 23:42 | 显示全部楼层
打酱油路过.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:我是后辈,笨鸟一只,虽不擅飞翔,却愿跟随,慢些迟些,终将展翅!

5

主题

29

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部