2016-01-22 108 views
1

我们可以通过查看数字lsb(最右边的位)和26或78至30和80来舍入数字,比如说23或74到20和70 ..我的疑问是如果这是可能在verilog代码...我想知道在转换成数字后,这个概念是可能的..最后以零结尾

+0

你只围捕基地10个号码有兴趣?或者你正在寻找一种方法来循环二进制数字? – nguthrie

+0

在这种情况下,我不会说LSB和MSB,而是最不重要的数字和最重要的数字。 –

+0

哦,是的,先生..我现在面临另一个问题。当我得到a = n1%10的错误时,如何找到最右边的数字;你知道除以10,并获得余数可以很容易地给任何数字的最右边的数字.. –

回答

0

一般来说,四舍五入的基数n的整数你加n/2和除以n(舍弃其余部分)然后乘以n。所以你上面的例子:

(23+5)/10 * 10 = 20 
(28+5)/10 * 10 = 30 

这样做与二进制逻辑是有点贵,因为你需要分裂和乘法。但是,如果您使用的是基数为2的数字,那么这些操作是免费的,因为它只是有点变化。

对于二进制的例子,假设你想将61舍入到8的最接近的倍数,即64。在二进制中,61是6'b011101。将8/2(6'b000100)添加到这里,你得到6'b100001这是65.现在除以8并乘以8.因为这只是右移3,然后左移3,我们可以简单地将3个LSB得到6'b100000这是64

+0

非常感谢这..你能提供给我一个分频器的verilog代码为/ 10是不可合成的使用xilinx .. –

+0

你必须自己弄清楚或找到一些IP。 Xilinx可能有一个可以实例化的分频器模块。当我需要一个分频器时,我使用Synopsys或Cadence提供的一个分频器来提供它们的综合工具。 – nguthrie

+0

你可以从互联网上选择一种算法并应用它:https://en.m.wikipedia.org/wiki/Division_algorithm – nguthrie

0

如果你只是想使LSB任何寄存器的零你总是可以做这样的事情

reg [7:0] a; 
reg [7:0] b = 23; 

a = {b[7:1], 1'b0};