VORC-求绝对值的运算功能仿真
仿真环境: ModelSim
源代码: Verilog
问题:仿真VORC的求两数差的绝对值的运算时,仿真出错。从仿真波形可以看出adder2o的值保持不变,导致求绝对值的操作无法进行。
原因:从电路图可以看出,最有可能出现问题的地方是,两数相减后符号位的判断位选择出错。
解决办法:修改电路图和相应的代码,选取正确的符号判断位(先前以adder2o[3]为符号判断位,目前使用adder5o[3]为符号位)。
图一 VORC求两数差的绝对值的运算波形
VORC-求绝对值的仿真出现电路死锁
问题:对VORC的两个8位操作数间的差值的求绝对值时,如果是128-0=128,此时使用原来的电路进行运算,会造成电路的死锁,即不管输入数据如何变化,电路的输出都锁定在128,使得电路无法进行正常工作。
图二 求绝对值电路仿真出现死锁(128-0=128)
原因:设计的电路中以差的最高位(adder5p[3])作为符号位进行判断,若为1,则进行取反加一操作。但是,实际情况是当差值大于或等于128(1000,0000)时,电路会被死锁。
图三 求绝对值电路仿真出现死锁(两数据只差大于或等于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
仿真波形:
图四 符号判断器仿真波形
问题已经解决:VORC的求绝对值运算(abs操作)仿真波形正确
图五 VORC的绝对值运算仿真波形