码迷,mamicode.com
首页 > 其他好文 > 详细

画状态机,接收1,2,5分钱的卖报机,每份报纸5分钱

时间:2020-08-24 16:57:44      阅读:86      评论:0      收藏:0      [点我收藏+]

标签:ima   out   inf   报纸   mod   sed   strong   tput   lse   

画状态机,接收1,2,5分钱的卖报机,每份报纸5分钱

斜杠的左边是当前的输入,斜杠的右侧是输出信号。下图是网上找出的,有部分错误,在st1缺少状态。

技术图片

代码:

module maib(
input clk,
input rst_n,
input [2:0]din,  //ABC [0]:1分钱       [1]:2分钱    [2]:5分钱
output reg [1:0]dout  //    [0]:输出报纸一份 [1]:找钱1分
);  
parameter idle=7b000_0001; //空闲状态
parameter st1 =7b000_0010; //一共一分钱
parameter st2 =7b000_0100; //一共两分钱
parameter st3 =7b000_1000; //一共三分钱
parameter st4 =7b001_0000; //一共四分钱
parameter st5 =7b010_0000; //一共五分钱
parameter st6 =7b100_0000; // 六分钱了

reg [6:0]cur_state;  //当前状态与下一状态
reg [6:0]nxt_state;  //当前状态与下一状态
//在每个时钟的上升沿切换状态
always@(posedge clk or negedge rst_n)
if(~rst_n)
 cur_state<=idle;
else 
 cur_state<=nxt_state;  //切换到下一个应该到达的状态
 
//组合逻辑切换状态
always@(din)
begin
case(cur_state)
idle:
 begin
  if(din==3b001)
   nxt_state<=st1;  //有一分钱的状态
  else if(din==3b010)
   nxt_state<=st2;  //有两分钱的状态
  else if(din==3b100)
   nxt_state<=st5;  //有五分钱的状态    
  else
    nxt_state<=idle;
 end 
st1:   //有一分钱了
 begin
  if(din==3b001)
   nxt_state<=st2;  //有两分钱的状态
  else if(din==3b010)
   nxt_state<=st3;  //有三分钱的状态
  else if(din==3b000)
   nxt_state<=st1;   //在有一分钱的状态保持
 end 
st2:   //有两分钱了
 begin
  if(din==3b001)
   nxt_state<=st3;  //有三分钱的状态
  else if(din==3b010)
   nxt_state<=st4;  //有四分钱的状态
  else if(din==3b000)
   nxt_state<=st2;   //在有两分钱的状态保持
 end 
st3:  //有三分钱了
 begin
  if(din==3b001)
   nxt_state<=st4;  //有四分钱的状态
  else if(din==3b010)
   nxt_state<=st5;  //有五分钱的状态
  else if(din==3b000)
   nxt_state<=st3;   //在有三分钱的状态保持
 end 
st4:  //有四分钱了
 begin
  if(din==3b001)
   nxt_state<=st5;  //有五分钱的状态
  else if(din==3b010)
   nxt_state<=st6;  //有六分钱的状态
  else if(din==3b000)
   nxt_state<=st4;   //在有两分钱的状态保持
 end 
st5:
 begin
 nxt_state<=idle;
 end 
st6:
 begin
 nxt_state<=idle;
 end 
default:;
endcase  
end  

always@(posedge clk )
if(nxt_state==st5)
 dout<=2b01;    //不找钱
else if(nxt_state==st6)
 dout<=2b11;  //找钱1分
endmodule

 

画状态机,接收1,2,5分钱的卖报机,每份报纸5分钱

标签:ima   out   inf   报纸   mod   sed   strong   tput   lse   

原文地址:https://www.cnblogs.com/luxinshuo/p/13552347.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!