带符号的4路并行概率计算乘加器
clc;clear;close all;
%带符号的4路并行概率计算乘加器
%2023年6月5日16:28:34
%也就是实现这个电路的功能
%8bit带符号数,只分析7bit就好,补码转换在verilog很简单
n = 8-1;%Ab bit
m = 9-1;%Bb bit
errmap = zeros(2^n,2^m);
for i = 1:2^n
for j =1:2^m
Ab = i-1;
Bb = j-1;
count = 40;%每一个组合算count次
thiserr = zeros(1,count);
for k = 1:count
rand1 = randi([0,2^(n-2)],1,2^(n-2));%时钟缩短为2^(n-2)周期
rand2 = rand1 + 2^(n-2);
rand3 = rand2 + 2^(n-2);
rand4 = rand3 + 2^(n-2);
p1 = Ab>rand1;
p2 = Ab>rand2;
p3 = Ab>rand3;
p4 = Ab>rand4;
pm1 = Bb * p1;
pm2 = Bb * p2;
pm3 = Bb * p3;
pm4 = Bb * p4;
AbBb_s = sum(pm1)+sum(pm2)+sum(pm3)+sum(pm4);
AbBb = Ab * Bb;
thiserr(k) = abs(AbBb_s-AbBb)/AbBb;
end
errmap(i,j) = mean(thiserr);
end
end
figure;
surf(0:2^m-1, 0:2^n-1, errmap);
xlabel('Bb');
ylabel('Ab');
zlabel('误差');
title('概率计算与直接计算的误差');