为了得到满足括号内条件的count数值,在我利用计数器实现以下操作的时候,得到的count数值比正确的数值大1(代码中count的正确值应为27,得到的却是28),但是如果将代码中的a,b,c,p数值做更改,有时候,却能得到正确的count值。不明白为什么,希望有懂的能指点迷津。
``c
module yan_zheng(
input clk,
input rst,
output reg[7:0] led
);
wire signed[7:0] a;
wire signed[7:0] b;
wire signed[7:0] c;
wire signed[7:0] p;
reg[7:0] count;
assign a = 8'd19;
assign b = 8'd28;
assign c = 8'd20;
assign p = 8'd29;
always @(posedge clk or negedge rst)
if(!rst)
count <= 8'b0;
else if((a*count)%p == c)
led <= count;
else
count <= count + 1'b1;
endmodule
请问仿真文件你是怎么写的呢?还有reg推荐赋初值0,这可能是个隐患。还有推荐把非阻塞赋值改为阻塞赋值试试
if((a*count)%p==c)
这个判断计算非常耗时间,你的时钟频率也比较高,这个判断估计一个时钟完成不了,等判断完成误把下个时钟的数据输出了。