verilog 关于余除(取模) '%' 的问题 verilog任意整数求余运算

FPGA\u4e2d\u7684\u6c42\u6a21\u53d6\u4f59\u5982\u4f55\u4f7f\u7528

\u7528 FPGA \u6765\u8fdb\u884c\u53d6\u6a21\u3001\u53d6\u4f59\u7684\u8fd0\u7b97\uff0c\u4f1a\u53d8\u5f97\u5f88\u590d\u6742\uff0c\u51fa\u73b0\u672a\u77e5\u60c5\u51b5. \u6240\u4ee5\u5982\u679c\u4e0d\u662f\u5bf92\u7684\u6574\u6570\u6b21\u5e42\u8fdb\u884c\u53d6\u6a21\u3001\u53d6\u4f59\u8fd0\u7b97\u7684\u8bdd\uff0c\u4e0d\u8981\u8fd9\u4e48\u5199\u3002

\u5f88\u590d\u6742\uff0c\u8981\u7528\u5b57\u957f\u6bd4\u8f83\u5927\u7684CPU\u8fdb\u884c\u5904\u7406\u624d\u80fd\u5f97\u51fa\u6765\u3002

硬件语言不是C程序,你写的东西如果要下到FPGA上 是需要可以综合的。
例如你的12%5,就是无法综合的,
不要考验软件

可能是你的编译器不够强,emm,我记得用quartusii可以综合除法和取模(VHDL代码),只不过耗的资源非常多。

你这还是典型的软件思维。verilog是硬件语言,最底层的操作还是存取赋值,逻辑运算,加减移位,要自己设计除法器或是调用xilinx里已有的除法器ip

a%2可以转成a&0x1, a/2可以转成a>>1, a*2可以转成a<<1
但是*3可以转成 a<<1+a, 而整数除和取模在非2的整数次幂的情况下就没有简单的转换了

Verilog里面只能对2的指数次幂做取模运算,因为对于2的指数次幂来说,只涉及到对寄存器中数据的左移右移操作,适合数字处理。
如果在FPGA里要进行对任何整数的取模运算,对于确定的数,可以用while判断循环,转换成乘法和减法运算;对于不确定的数,由于while条件语句里不能有不确定项,所以只能转换成以最大循环次数为固定次数的for循环。

扩展阅读:verilog hdl关键字 ... verilog 除法运算 ... verilog 异或 ... verilog 与运算 ... verilog循环移位运算符 ... verilog循环左移 ... fpga取余 ... verilog优先级排序 ... verilog取商和取余符号 ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网