硬件语言不是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循环。