孙冬Candy 2015-01-18 07:51 采纳率: 0%
浏览 2016

这段代码是计算两个数相除,不能输出正确结果,求问错在哪里

module divide_16bits(op1,op2,result
);
input [15:0] op1;
input [15:0] op2;
output reg [15:0] result;

reg error;
integer p,q,r;

reg [15:0] temp;
reg [15:0] add_result;

always @(op1 or op2)
begin
assign error = ~{|{op2}};
if(error == 1)
result[15:0] = 16'h0eb0;
else
begin
for(p = 15;p >= 0;p = p - 1)
result[p] = 1'b0;
p = 16;
q = 16;
while((p >= 0) & (op1[p] == 0))
p = p - 1;
while((q != 0) & (op2[q] == 0))
q = q - 1;
if(p >= q)
begin
add_result[15:0] = 16'h0;
for(r = p - q;r >= 0;r = r - 1)
begin
temp = add_result + (op2 << r);
if( op1 >= temp)
begin
result[r] = 1'b1;
add_result = add_result + (op2 << r);
end
end

end
end

end
endmodule

  • 写回答

5条回答 默认 最新

  • 孙冬Candy 2015-01-18 08:45
    关注

    我发现是这段代码出问题了,代码从c语言角度能达到目标,但是verilog语言无法实现
    while((p >= 0) && (op1[p] == 0))
    p = p - 1;
    while((q != 0) && (op2[q] == 0))
    q = q - 1;

    评论

报告相同问题?

悬赏问题

  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试