VORC的PE仿真问题之三:符号判断位选择错误导致电路死锁

来源:互联网 发布:猪八戒淘宝收藏有用吗 编辑:程序博客网 时间:2024/05/05 09:05

VORC-求绝对值的运算功能仿真

仿真环境: ModelSim

源代码: Verilog

 

问题:仿真VORC的求两数差的绝对值的运算时,仿真出错。从仿真波形可以看出adder2o的值保持不变,导致求绝对值的操作无法进行。

原因:从电路图可以看出,最有可能出现问题的地方是,两数相减后符号位的判断位选择出错。

解决办法:修改电路图和相应的代码,选取正确的符号判断位(先前以adder2o[3]为符号判断位,目前使用adder5o[3]为符号位)。

abs

图一 VORC求两数差的绝对值的运算波形

 

VORC-求绝对值的仿真出现电路死锁

 

问题:对VORC的两个8位操作数间的差值的求绝对值时,如果是128-0=128,此时使用原来的电路进行运算,会造成电路的死锁,即不管输入数据如何变化,电路的输出都锁定在128,使得电路无法进行正常工作。

 阿巴斯

图二 求绝对值电路仿真出现死锁(128-0=128)

 

原因:设计的电路中以差的最高位(adder5p[3])作为符号位进行判断,若为1,则进行取反加一操作。但是,实际情况是当差值大于或等于128(1000,0000)时,电路会被死锁。

阿巴斯2 

图三 求绝对值电路仿真出现死锁(两数据只差大于或等于128)

 

解决方法:重新设计一个符号位判断电路(比较器),提前比较输入数据的大小,判断差的符号位。

 

符号判断比较器的代码

'timescale 1ns/1ns

 

module compare_8 (ain, bin, msb);

 

    parameter width = 8;

    input [width-1 : 0] ain, bin;

    output msb;

reg msb;

 

    always @ (ain or bin)

    begin

        if (ain < bin)

           msb = 1;

        else

           msb = 0;

    end

   

endmodule

 

 

仿真波形

 abs4

 

图四 符号判断器仿真波形

 

问题已经解决:VORC的求绝对值运算(abs操作)仿真波形正确

阿巴斯3

图五 VORC的绝对值运算仿真波形

原创粉丝点击