今天翻译matlab代码时需要用移位和加法实现乘法,发现一个非常奇怪的问题 需要计算的是 x = 3*a,将a左移一位与a相加, verilog代码如下:
x <=
a +
a<<
1
仿真出来的结果 x = 4*a, 如果代码为:
x <=
a<<
1 +
a
仿真结果为 x = 0。
晓明同学告诉我,要加括号才可以,因为优先级问题,算术操作符优先级高于移位。 下面两个式子效果一样,结果为四倍的a
x <=
a +
a<<
1
x <= (
a +
a) <<
2
下面两个式子效果一样,结果为0
x <=
a <<
1 +
a
x <=
a <<(
1+
a)
只有下面这样才对,两种写法没有区别。
x <=
a + (
a<<
1)
x <= (
a<<
1) +
a
以前没有用verilog算过数,没有注意过这种问题,以后要注意。 图来自与非网 http://www.eefocus.com/book/08-01/319421276058797.html
转载请注明原文地址: https://ju.6miu.com/read-17083.html