如果我的问题制定得不好,我道歉。我最近在读这篇文章。似乎计算器带有一个处理器(即32位),并用C或汇编程序编程,以执行最奇特的操作,如其他分数的分数指数等等。我在处理Assembler方面有一些很深的经验,而且我知道在整数上实现复杂的操作非常困难和辛苦,更不用说实数了(但无论如何都可以完成)。
然后,我看看Verilog是否可以用于分割两个分数,并且每个人似乎都同意,"它不可能" (以可合成的方式),或者它太慢了,而且综合工具甚至没有定义这个问题,因为不太可能将verilog用于像师这样无意义的操作。
但是,不是最初用VHDL或Verilog编程的CASIO计算器内的芯片吗?
我在Verilog制作的谷歌计算器,我只能找到"不切实际的"二进制整数数字等的计算器,从来没有像我手中的CASIO那样。所以我似乎误解了我关于Verilog和VHDL的概念。
答案 0 :(得分:1)
比特是比特......无论是处理器还是其他逻辑。
当然,已经在VHDL和Verlog中实现了除法,这就是你如何做到这一点或原理图捕获,或者如果疯狂地手工绘制蒙版。加法很简单,减法只是加法(反转加一,反转设置进一步然后加一个),乘法,移位加法,尝试在纸上做二进制乘法,因为对于每个位置都比小学更容易您要么乘以零并将该零加入或乘以1并将该移位的值添加到累加器中。所以乘法不过是N个移位和加法,可以在一个时钟周期内实现大量的门。
但是,分数,整数并不重要无论如何,分数数学都是用整数数学逻辑块完成的(就像我们在小学时所做的那样,排列小数点然后加上或减去,同样乘法和除以我们使用的基本乘法和除法用一点点小数调整)。虽然分区是一个迭代过程,但在逻辑上,你在教育网站上看到的实现(verilog / vhdl)只是做了我们在小学阶段对日志分工所做的事情,但是像乘法一样,它比小学更简单你拉下位从长除法中的分子直到对分母检查的数字等于或大于,基本上该数字可以仅进入下一个被测数字的零次或一次,不像十进制,它可以在0到0之间9次。但是你仍然会丢弃位并进行测试,直到发生这种情况,这是一个迭代过程,你可以并且已经完成了逻辑,甚至在他们手工绘制蒙版的日子里。由于该逻辑的成本以及软件基本上以相同的方式迭代地执行,因此多个处理器没有除法指令也就不足为奇了。让软件去做吧。
其中一些计算器上使用的处理器没有除法指令,他们使用软件解决方案实现它(我知道至少有一个家族的事实,并假设公司使用了相同的芯片系列或品牌为他人)。请参阅Hackers Delight一书,其目的是向您展示如何以优化或有效的方式进行数学和其他算法,而不是黑客攻击(破解),而是关于软件/逻辑技巧。
所以那些说你不能用verilog或vhdl做的人可能会说你不能在一行a = b / c;或许他们从来没有写过那些代码,也不想。你不会惊讶于你只是在一个单元库中购买该模块并将其连接起来,而不知道或关心它是如何工作的。像sram和其他单元块一样,让代工厂制造出优化的单元而不是你。或者在fpga上,他们还优化了块,以便他们的软件在合成期间为您连接。
答案 1 :(得分:0)
我的答案很简单:我并不是一个真正的硬件人,所以我认为我的理解是正确的,但可能不是。
我认为,当您搜索以#verilog制作的"计算器时,您只能找到所有逻辑都在硬件中的结果。
据我了解,真正的计算器通过使用可编程微处理器(最终由VHDL或Verilog等人设计)来节省大量硬件空间,但大部分逻辑都是在该微处理器上运行的软件中完成的。这些"仅硬件"计算器很有意思,因为它们在硬件上完成所有工作,没有软件。
因此,真正的计算器不仅是硬件设计,还包括硬件读取和执行的软件。
即使是没有硬件浮点支持的简单微处理器,也可以在人类方面对两个数字进行单一的复杂计算。