司的Verilog(Division in verilog)

2019-07-30 16:33发布

我的Verilog自学。 这本书我在介绍的章节是执行我们用“/”操作或“%”运营部门下列规定。 在后面的章节中它说,分裂是Verilog的太复杂,不能合成,所以要进行分割它引入了一个很长的算法。

所以,我很困惑,不能VERILOG处理简单的分工? 是/操作员没用?

Answer 1:

这一切都取决于你写什么类型的代码。

如果你写,你打算合成,你打算在FPGA或ASIC的代码,那么你可能不希望使用除法或模运算符。 当你把任何算术运算符的RTL合成实例的电路来完成这项工作; 对于加法器+- ; 乘法器为* 。 当你写/你问一个分频电路,但分频电路是一个非常复杂的事情。 这往往需要多个时钟周期,并且可以使用查找表。 它问了很多综合工具的推断你想要什么,当你写a / b

(显然,由2简单的权力划分,但通常你会使用移位运算符)

如果你写,你不希望被合成的代码,这是一个测试平台的一部分。例如,那么你可以使用全师你想。

因此,要回答你的问题, /运营商也不是一无是处,但你必须是Concious酒店你使用它的位置和原因的。 同样是真正的* ,但程度较轻。 乘法器是相当昂贵的,但大多数合成器都能够推断出它们。



Answer 2:

你必须考虑硬件。

当写<= B / C你说到合成工具“我想要一个分频器,能够提供其结果是每一个时钟周期,并且没有中间pipline寄存器”。

如果你的工作创建,它是非常复杂的,尤其是对于更高的比特数所需的逻辑电路。 一般的FPGA不会对师专业的硬件模块,所以它必须予以实现的通用逻辑资源。 这很可能是这两个大的(大量的LUT)和慢速(低的fmax)。

一些合成器可以实现反正它(从它似乎会的Quartus快速搜索),其他人不会理会,因为他们不认为这是在实践中是非常有用的。

如果你是一个不断分裂并可以用近似的结果住那么你可以做的技巧与乘数。 就拿你想通过划分,通过两个电源和圆形乘以到最接近的整数什么倒数。

然后在你的Verilog你可以实现通过乘法您大致分(这是不是现代FPGAS太贵了),然后移(移动由固定位数的基本上不含硬件)。 请务必留出足够的位用于中间结果。

如果你需要一个确切的答案,或者如果你需要的东西是不是把一个预定义的常数,你必须决定你想要什么样的分频器。 如果你的吞吐量低,那么你可以使用一个基于状态机的办法,做一个每分裂n个时钟周期。 如果你的吞吐量高,你能负担得起那么该设备区域的流水线的做法,确实每个时钟周期的划分(但需要的结果多次循环流过)可能更合适。

通常,工具供应商将提供预先制作的块(Altera公司称之为宏功能)用于这种东西。 这些优点是,工具供应商将可能有精心优化他们的设备。 缺点是他们可以把供应商的洛,如果你想要移动到你将最有可能换出块和你交换,可能有不同的特性块不同的设备供应商。



Answer 3:

因此Im困惑。 着VERILOG处理简单的划分? 是/操作员没用?

Verilog的合成规范(IEEE 1364.1)实际上表示与整数运算数所有算术运算符应予以支持,但没有人遵循这个规范。 一些综合工具可以做整数除法,但其他人会拒绝它(我认为XST仍然如此),因为组合划分通常是非常低效的区域。 多周期的实现是标准的,但是这些不能从“/”合成。



Answer 4:

除法和模数是从来没有“简单”。 避免他们,如果你可以通过位掩码或移位操作这样做,例如。 尤其是可变除数真的很复杂硬件实现。



Answer 5:

“的Verilog语言”处理除法和模数就好了 - 当你使用计算机来模拟你的代码,你可以完全访问它的所有的能力。

当你合成你的代码到一个特定的芯片,也有局限性。 这些限制往往是基于什么工具厂商认为是“明智的”,而不是什么是可行的。

在过去,比幂的两个被认为是不理智的硅,因为它占用了大量的空间和非常缓慢运行的任何其他部门。 目前,一些合成器具有“通过恒鸿沟”为你打造的电路。

在未来,我认为没有理由合成不应创建您的分隔(或使用一个是一个潜在的未来架构的DSP块)。 是否会与否还有待观察,但见证乘法器的进展(从“只有两个大国”向“一个输入不变”到“全面落实”在短短几年)



Answer 6:

  1. 电路仅包括除以2:刚移位:)
  2. 2以外....看你要时刻想着在电路级Verilog不是C或C ++
  3. /和%是不是合成的,或者如果它变成(新版本),我相信你应该保持自己的分频电路,这是因为他们提供的将是通用的IP(最有可能他们会为浮动不固定)
  4. 我敢打赌,你已经通过莫里斯马诺计算机architechure书走了,还有在整个流程与算法中一起被给予的一些最后一章,通过它去遵循它,让你自己
  5. 现在看看你的作品去只有逻辑验证,不需要真正的电路,确保去/和%。 没有问题,它会为模拟工作


Answer 7:

用“/”划分是可能的Verilog。 但它不是一个综合的运营商。 同样是使用倍增的情况下“*”。 有一定的算法在verliog执行这些操作,如果代码需要综合的使用它们。 即。 如果你需要为它的等效硬件。

我不知道对分裂的算法,但乘法,我已经使用展位的算法。



Answer 8:

使用result <= a/b和完美地工作。

使用时,请记住<=操作者,答案立即计算出,但进入“结果”,在下一时钟上升沿寄存器内的答案。

如果你不想等到下一个时钟上升沿使用result = a/b.

请记住,任何算术运算电路需要一些时间来完成操作,并在此期间该电路产生的随机数(位)。

其时,A-10疣猪攻击机攻击它拍摄大量的子弹坦克等。 这是分频电路,而将如何动作,它吐出随机位。 几个纳秒后,它将完成分割,并返回一个稳定的好成绩。

这就是为什么我们等到下一个时钟周期的“结果”寄存器。 我们试图保护它免受垃圾随机数。

司是最复杂的操作,所以它会在计算延迟。 对于16位的除法的结果将在大约6纳秒来计算。



文章来源: Division in verilog
标签: verilog