赞
踩
module add_8bit_63( // input [7:0] d1, // output [13:0] sum input signed [7:0]d1, //输入有符号的d1 output signed [13:0]sum,//输出无符号的结果sum output signed [7:0]d2, //输出一个d1的值 output signed [13:0]d3 //输出d1*64的值 ); //要求计算任意数乘以63的有符号‘无符号结果// // assign sum={d1,6'd0}-d1; ///无符号计算:d1*64-d1即为无符号的运算结果 有符号计算 /减去一个d1,位要对齐,所以加了14-8位的d1[7] assign sum={d1[7],d1,6'b0} -{d1[7],d1[7],d1[7],d1[7],d1[7],d1[7],d1[7],d1}; //因为是有符号计算,假如是负数,那么d1[7]就为1,但不影响d1的值。 assign d2={d1[7],d1[7],d1[7],d1[7],d1[7],d1[7],d1[7],d1};//一个d1的值 assign d3={d1[7],d1,6'b0}; //d1*64的值 endmodule `
有符号的仿真波形如下
因为无符号的计算嘛就不管位宽,直接相加,不存在问题。主要是有符号的相加得严格对齐,不然结果会出错,然后是二进制乘法,利用拼接符,像乘以64就是{d1[7],d1,6’d0}。
d1[7]是防止d1为有符号数并且是负数时计算出错,因为是负值的话第一位是1,那么在d1前面加个1就可以将d1的值与其他数相加减了,并且其它数的位数要对齐结果才不会出错。
可以从图6看到黄线处输入数据是d1=-6,输出d3是d1乘以64的值,d2就是一个d1的值,最后d3减去一个d1的值就是d1乘以63的值。
激励文件只需产生输入d1的值。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。