帶符號的4路并行概率計算乘加器
clc;clear;close all;
%帶符號的4路并行概率計算乘加器
%2023年6月5日16:28:34
%也就是實現(xiàn)這個電路的功能
%8bit帶符號數(shù),只分析7bit就好,補碼轉(zhuǎn)換在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('概率計算與直接計算的誤差');