在FPGA设计中,所有的算数运算符都是按照无符号数进行的。如果要完成有符号数计算,对于加、减操作通过补码处理即可用无符号加法完成。对于乘法操作,无符号数直接采用“*”运算符,有符号数运算可通过定义输出为 signed 来处理。
需要注意的是,尽量不要使有符号数与无符号数进行混合计算。因为只要有一个无符号数的运算单元,整个算式将被将成无符号数进行计算。
总之,正数和负数处理时都是按照补码的形式处理,具体究竟把这些补码理解为符号型还是无符号型,这就要看reg signed这样的声明了。如果声明了就把这些数据当做符号型操作,如果没有声明,就当做无符号型操作(即都是正数);所谓的signed只有在参与运算的过程中才会有作用,再连线方面或是其他方面,没有任何作用,因为都是补码。