QartusII编译verilog代码显示Error (10119)

QartusII编译一段verilog代码:
module divisor(inA,inB,out);
input [6:0] inA, inB;
output [6:0] out;
reg [6:0] A,B,out;
always @(*)
begin:U1
A = inA;
B = inB;
while(A!=B)
begin
if(A>B)
begin
A=A-B;
end
else
begin
B=B-A;
end
end
out=A;
end
endmodule
显示错误:
Error (10119): Verilog VHDL Loop Statement error at divisor.v(12): loop with non-constant loop condition must terminate within 250 iterations
求高人指点是怎么回事?没有死循环呀?正确的代码应该是什么样?
追加悬赏~谢谢啦!
在while行显示的错误

你程序里有死循环,你不要把硬件里的死循环想象成软件里的
比如A=A-B;这句话,你的程序是组合逻辑,也就是没有触发器,在这句话里A既做输入又做输出,假设A原来是5,B原来是3,执行一次后A变成2,又执行2-3=-1,A又变了,又要在执行,无限循环。
你的这种赋值只有在时序逻辑中才可以,就是敏感列表应该是posedge clk的时候才可以用。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-07-02
你的意思是:out输出inA,inB差值的绝对值吧
一看你的代码就知道你刚学

module divisor(inA,inB,out);
input [6:0] inA, inB;
output [6:0] out;
assign out=(inA>inB)?(inA-inB):(inB-inA);
endmodule
这样就可以了追问

不是。。其实我是想用更相减损输出最大公因子。。
是刚开始学,不是很清楚……应该怎么办呀?谢谢啦!

追答

什么叫更相减损输出最大公因子?

QartusII编译verilog代码显示Error (10119)
你程序里有死循环,你不要把硬件里的死循环想象成软件里的 比如A=A-B;这句话,你的程序是组合逻辑,也就是没有触发器,在这句话里A既做输入又做输出,假设A原来是5,B原来是3,执行一次后A变成2,又执行2-3=-1,A又变了,又要在执行,无限循环。你的这种赋值只有在时序逻辑中才可以,就...

相似回答