FPGA网络做时序仿真时出现毛刺怎么办?

2019-07-16 02:20发布

网络可以时序仿真,但出现有规律的毛刺。输出加寄存器虽然去除了毛刺,但输出延迟了一个时钟,我共用了一个时钟信号。是不是要加一个和原来电路不同的时钟呢?或者代码中有问题?是不是代码的问题。
FPGA网络做时序仿真时出现毛刺怎么办?

FPGA网络做时序仿真时出现毛刺怎么办?
代码如下:
module pcnn(clk,rst,S,Y,KF,KE,VE,F,E);
input clk,rst;
input[15:0] S;
input[15:0] KF;
input[15:0] KE;
input[15:0] VE;
output[15:0] F;
output[15:0] E;

output Y;

reg[15:0] F;
reg[15:0] E;
reg[15:0] F_reg;
reg[15:0] E_reg;

reg[31:0] MUL_F;
reg[31:0] MUL_E;

///////////////zuhe

assign Y = (F>E_reg)? 1'b1 : 1'b0;//E_reg:number of the last time,not E.



always@(KF,F_reg,S)
begin
        MUL_F = KF * F_reg;
        F = MUL_F[23:8] + S;
end

always@(Y,VE,KE,E_reg)
begin
        MUL_E = KE * E_reg;
        if(Y)
                //E=VE + MUL_E[23:8];
                E=VE;
        else
                E=MUL_E[23:8];
end


always@(posedge clk)                //shixu
begin
        if(!rst)
        begin
                F_reg <= 0;
                E_reg <= 0;
        end
        else
        begin
                F_reg <= F;
                E_reg <= E;
        end
end
endmodule


RTL视图
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
wangka
1楼-- · 2019-07-16 07:41
这不是毛刺,只是你在仿真时,软件是把你的顶层实体输入输出口当成实际的IO管脚,
即使这只是你的一个模块
这时候每一位的数据到达管脚的时间都是不一样的,根据实际电路有先后顺序
你把数据展开就可以看到了。
如果你想要看起来没什么毛刺,数据几乎同时到达的话,你可以约束一下TCO
凌乱在风中
2楼-- · 2019-07-16 10:26
看了下,输出端口有Y和E和F,这个仿真图应该是时序仿真图吧,如果是时序仿真图,这个是正常的。

要保证在时钟沿的窗口内数据是稳定。输出的数据可以用时钟打一拍,一个时钟的延时在最初的时序设计上考虑的。
wangka
3楼-- · 2019-07-16 10:56
功能仿真,后仿真可能有差别,这是时序仿真,包含了器件和线的延时,基本和实际电路运行情况一致。

一周热门 更多>