|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
求助一个问题,一直很头疼
假定有模块A和模块B,在模块A中,有一个二段的状态机,如下:
always@(*) begin
b_en = 1'b0 ;
b_in1 = 8'h00 ;
b_in2 = 8'h00 ;
next_state = state ;
case (state)
4'h00 : begin
b_en = 1'b1 ;
b_in1 = 8'h44 ;
b_in2 = 8'h44 ;
end
4'h01 : begin
if (b_finish) begin next_state = 4'h02; b_en= 1'b1 end
else begin next_state = 4'h04; end;
end
4'h02 : begin
if (b_finish) begin next_state = 4'h03;b_en = 1'b1 end
else begin next_state = 4'h04; end;
end
endcase
end
B模块信号为b_en,b_finish,b_in1,b_in2,b_result
b模块中对b_in1和b_in2进行简单的加减处理,
always @ ( posedge clk or negedge rst_b ) begin//alu_c
if ( ~rst_b ) begin
b_result <= 8'h00 ;
b_finish <= 1'b0 ;
end
else begin
b_finish<= b_en ;
if ( b_en ) begin
b_result <= (b_in1+b_in2) ;
end
end
代码大概内容如上:
问题:
1.modelsim在仿真时,对module间的信号时认为有一个微小的延时的,所以在A模块的状态跳变时,B模块的finish信号,在完成一次操作时,有复位到零的现象,所以在某个状态下,if(b_finish)会因为延时关系而进入else语句,在modelsim的图形来看,就是next_state上面有个毛刺,但是毛刺不影响最后的状态(仍然跳转正确),请问这个毛刺重要吗? |
|