|
本帖最后由 atom100 于 2014-5-29 07:28 编辑
请教大家,写了一个三段状态机,但状态停留在 原始状态,即:sta_idle不动
//rcv_and_analyse为数据报文接收解析模块,数据 [7:0]rcv_data来自于上一个模块(数据接收模块)的一个8位寄存器 [7:0]rcv_temp_r
module rcv_and_analyse(
input clk,
input rst_n,
input [7:0]rcv_data
)
parameter
sta_idle = 4'd0;
sta_head = 4'd1;
sta_end = 4'd5;
reg [3:0]curr_state;
[3:0]next_state;
always @( posedge clk or negedge rst_n)
if(!rst_n)
curr_state <= sta_idle ;
else
curr_state <= next_state;
always @(*)
case(curr_state)
sta_idle :
if(rcv_data == 8'h02)
next_state = 4'd1;
else if(rcv_data == 8'h05)
next_state = 4'd2;
else
next_state = curr_state ;
sta_head: next_state = 4'd2;
。。。 。。。。 //中间报文分析
sta_end : next_state = 4'd2;
default: ;
endcase
always @( posedge clk or negedge rst_n)
第三段,状态输出;
clk时钟为25Mhz,
rcv_data来自于 上一个模块(串口数据接收模块,通过移位操作将串行数据转换为并行数据,存储到一个寄存器8位寄存器[7:0]rcv_temp_r里,然后从数据接收模块输出,然后送到这个数据报文接收解析模块的[7:0]rcv_data端口) ,这样 是否可以正确分析 接收到的报文?我使用signal tap查看发现 报文rcv_data数据已经北正确接收了,而且报文头是8'h02 ,但是状态机并没有进入 sta_head = 4‘d1,而是 停留在 sta_idle = 4‘d0未动,
是什么原因?
是否在 数据接收模块和数据分析模块 之间必须加一个 fifo??
还是组合逻辑的 always(*)这样写敏感变量表有问题 ??
还是哪里有问题?
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|