[an error occurred while processing this directive]
|
вот так приблизительно это кодируется
суматор с сохранением
// -------------------------------------------------------------
task CSA;
input [67:0] a, b, r;
output [67:0] summa;
output [68:0] cout;
reg [67:0] tmp;
begin
tmp = a ^ b;
summa = tmp ^ r ;
cout = ((a & b) | (tmp & r)) << 1;
end
endtask
//===========================================================
и собственно суммирование, аргументы - это выход умножителя
// Wallence tree , level 0 .........................................................................
CSA(pp[0], pp[1], {pp[2],2'b0}, ps0_[0], ps0_[1] );
CSA({pp[3],4'b0}, {pp[4],6'b0}, {pp[5],8'b0}, ps0_[2], ps0_[3] );
CSA({pp[6],10'b0}, {pp[7],12'b0},{ c_m, sum[67:14] }, ps0_[4], ps0_[5] );
// Wallence tree , level 1 ...........................................................................
CSA(ps0_[0], ps0_[1], ps0_[2], ps1_[0], ps1_[1] );
CSA(ps0_[3], ps0_[4], ps0_[5], ps1_[2], ps1_[3] );
// Wallence tree , level 2 ........................................................................
CSA(ps1_[0], ps1_[1], ps1_[2], ps2_[0], ps2_[1] );
// Wallence tree , level 3 ..........................................................................
CSA(ps2_[0], ps2_[1], ps1_[3], ps3_0, ps3_1 );
ну и в конце должен быть какой-либо carry-propogate adder
E-mail: info@telesys.ru