微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 求助,modelsim对模块间信号哦的仿真问题

求助,modelsim对模块间信号哦的仿真问题

时间:10-02 整理:3721RD 点击:
求助一个问题,一直很头疼
假定有模块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上面有个毛刺,但是毛刺不影响最后的状态(仍然跳转正确),请问这个毛刺重要吗?

求助啊,如果上面的描述没有明白,可以简单的这么理解,
modelsim对模块间的信号,在传送时是认为有一个微小的延时的
如果有两个模块A和B,在B的组合逻辑的状态机跳变中,需要对A的一个信号signal做
if(signal) next_state=2 else   next_state=4
这种判断的状态跳变。
由于,模块间信号的传输延时问题,模块A的signal信号,如果是从低到高的一个过程,那么在B的这个状态过程,就会出现一个短暂的next_state=2的现象,然后立刻next_state=4。
在仿真时就可以发现next_state有一个毛刺,
请问这个毛刺可以不管吗?

这个毛刺产生的原因并不是模块间传输的延迟,而是因为组合逻辑敏感列表中的信号(即各表达式左边的信号)跳变的时刻不统一造成的,常见的原因是一些信号赋值用了时延,而另一些没有没有用时延。这种毛刺不会影响功能,因为毛刺出现在一个时钟周期的前面(这个时钟上升沿后),而这个信号是在时钟周期结束时(下一个时钟上升沿)被使用,此时毛刺已消失,信号已稳定。

上一篇:什么是温度计码
下一篇:define用法

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top