是否有任何算法或代码可以在VHDL中找到整数的平方根?代码不得包含这些库:
IEEE.std_logic_arith.all; IEEE.std_logic_unsigned.all; IEEE.math_real.all; IEEE.std_logic_signed.all; IEEE.std_logic_unsigned.all;
看起来你正在寻找可综合的代码,在这种情况下,问题应该提到 .
一些数学运算通常由综合工具支持,如整数加法( a + b ),整数否定( - a ),整数减法( a - b ),整数乘法( * ),而其他数学运算则不像点平方根运算 .
a + b
- a
a - b
*
因此,必须单独实现可合成的平方根操作,如user1155120所建议,并且实现将取决于对参数,准确性,吞吐量,延迟,大小等的要求 .
但是出于模拟目的而不是可合成的,您可以使用 ieee.math_real.sqrt ,下面的示例打印 2.0 的平方根值:
ieee.math_real.sqrt
2.0
library ieee; use ieee.math_real.all; ... report real'image(sqrt(2.0)) severity NOTE;
如果文字措辞是代码不能包含 IEEE.math_real.all; ,您可以通过从math_real中仅选择所需内容来规避问题 .
IEEE.math_real.all;
然后 IEEE.math_real.sqrt; 会做你想要的 .
IEEE.math_real.sqrt;
然而,虽然这满足了上述问题的字母,但我不能保证它满足意图 .
一个更好的答案是采用任何算法来计算平方根 - 有许多,很容易在通常的来源中找到 . 在VHDL中实现它,并测试它 .
见VHDL samples...32-bit parallel integer square root
VHDL源代码是sqrt32.vhdlVHDL仿真的输出是sqrt32.out从未绘制过原理图 . sqrt8m.vhdl扩大了使用"generate"语句创建sqrt32.vhdl
仅包含对包ieee.std_logic_1164的引用,接受std_logic_vector长度为32并返回长度为16 .
用搜索词 square root VHDL 搜索谷歌搜索的惊人之处 .
Addendum
我很好奇,qsort32.vhdl的测试平台很小 . 代码中有错误,它不起作用 . 纠正它的明显方法是重新实施它 . 在扩展sqrt8m.vhdl作为源(也可以验证)时,它可能会遇到错误的假设 .
还有其他平方根VHDL模型可用 . 顺序(连续减法除法器)模型在VHDL算术书籍中并不罕见,具有各种划分实现(例如,非恢复) .
3 回答
看起来你正在寻找可综合的代码,在这种情况下,问题应该提到 .
一些数学运算通常由综合工具支持,如整数加法(
a + b
),整数否定(- a
),整数减法(a - b
),整数乘法(*
),而其他数学运算则不像点平方根运算 .因此,必须单独实现可合成的平方根操作,如user1155120所建议,并且实现将取决于对参数,准确性,吞吐量,延迟,大小等的要求 .
但是出于模拟目的而不是可合成的,您可以使用
ieee.math_real.sqrt
,下面的示例打印2.0
的平方根值:如果文字措辞是代码不能包含
IEEE.math_real.all;
,您可以通过从math_real中仅选择所需内容来规避问题 .然后
IEEE.math_real.sqrt;
会做你想要的 .然而,虽然这满足了上述问题的字母,但我不能保证它满足意图 .
一个更好的答案是采用任何算法来计算平方根 - 有许多,很容易在通常的来源中找到 . 在VHDL中实现它,并测试它 .
见VHDL samples
...
32-bit parallel integer square root
VHDL源代码是sqrt32.vhdl
VHDL仿真的输出是sqrt32.out
从未绘制过原理图 . sqrt8m.vhdl扩大了
使用"generate"语句创建sqrt32.vhdl
仅包含对包ieee.std_logic_1164的引用,接受std_logic_vector长度为32并返回长度为16 .
用搜索词 square root VHDL 搜索谷歌搜索的惊人之处 .
Addendum
我很好奇,qsort32.vhdl的测试平台很小 . 代码中有错误,它不起作用 . 纠正它的明显方法是重新实施它 . 在扩展sqrt8m.vhdl作为源(也可以验证)时,它可能会遇到错误的假设 .
还有其他平方根VHDL模型可用 . 顺序(连续减法除法器)模型在VHDL算术书籍中并不罕见,具有各种划分实现(例如,非恢复) .