在verilog中的div为0-9

时间:2016-02-11 18:22:13

标签: verilog fpga

在fpga中编码和合成模块“divider”。输入A,B被认为产生输出div,它等于A div B.我用testbench模块测试了我的代码,它运行正常。但是,当我将它合成到我的fpga中时,代码的某些部分没有按预期工作。 提出代码,然后我将解释失败的原因。

=SUMIFS(Sheet1!$D:$D,Sheet1!$A:$A,"<="&B$1,Sheet1!$B:$B,">="&B$1,Sheet1!$C:$C,$A2)

结果在几乎所有情况下都应该显示,除非需要对div进行计数,并且大于1.即,7 div 7正常工作,8 div 5正常工作,6 div 0正常工作但是8 div 4不是。既不是9 div 2等。它们都产生输出0。

我创建了很多模块,工作正常。出于某种原因,即使我使用clk来计算B可以“适合”到A的次数(因为A> B,B“至少适合”一次,在A中,所以计数器设置为1.如果A-1 * B&gt; = B,它再次适合。所以counter = 2等)。这个逻辑是由clk脉冲产生的。

你能帮我解决问题吗?

1 个答案:

答案 0 :(得分:1)

我认为在时钟模块中使用阻塞语句会导致此问题。

temp=A-counter*B;
if (temp>=B)  counter=counter+3'd1;

上面你尝试分配temp并使用它之后,这将在模拟中正常工作,但在硬件中它不会。首先,将所有阻塞转换为非阻塞语句,然后重新模拟设计,看它是否仍然按预期工作。然后尝试通过临时组合来改变上面的临时逻辑

wire[3:0] temp;
assign temp = A - (counter * B);

另外,然后重置我没有看到计数器重置。