Сравнение разных методов сложения по модулю 2^n-1

Материал из Модулярная арифметики
(Различия между версиями)
Перейти к: навигация, поиск
(Новая страница: «Было произведено сравнение 2 реализаций сумматоров по модулю 2n-1 - чисто комбинационная с…»)
 
 
(не показаны 7 промежуточных версий 2 участников)
Строка 1: Строка 1:
Было произведено сравнение 2 реализаций сумматоров по модулю 2n-1 - чисто комбинационная схема и схема с мультиплексированием.
+
Было произведено сравнение позиционного сумматора и 2реализаций сумматоров по модулю 2<sup>n</sup>-1 - чисто комбинационная схема и схема с мультиплексированием. Сравнение производилось для модулей с разрядностью от 2 до 16 бит.
Сравнение производилось для модулей с разрядностью от 3 до 16 бит.
+
  
 
== Типовые Verilog-модули ==
 
== Типовые Verilog-модули ==
Строка 50: Строка 49:
 
assign S[1] = (P[1]&&(~P[2:0]))^C[0];
 
assign S[1] = (P[1]&&(~P[2:0]))^C[0];
 
assign S[2] = (P[2]&&(~P[2:0]))^C[1];
 
assign S[2] = (P[2]&&(~P[2:0]))^C[1];
 +
endmodule
 +
</pre>
 +
 +
3. Позиционный сумматор (на примере 3-битного)
 +
<pre>
 +
module sum_position_3 (a,b,out);
 +
output wire [3:0] out;
 +
input  wire [2:0] a,b;
 +
assign out=a+b;
 
endmodule
 
endmodule
 
</pre>
 
</pre>
Строка 80: Строка 88:
 
<tr>
 
<tr>
 
<td style='border: 1px solid black; padding: 2px;'>Битность</td>
 
<td style='border: 1px solid black; padding: 2px;'>Битность</td>
<td style='border: 1px solid black; padding: 2px;'>Модуль для индексного умножителя</td>
+
<td style='border: 1px solid black; padding: 2px;'>Модуль</td>
<td style='border: 1px solid black; padding: 2px;'>Модуль для DS умножителя</td>
+
</tr>
+
<tr>
+
<td style='border: 1px solid black;'>2</td>
+
<td style='border: 1px solid black;'>3</td>
+
<td style='border: 1px solid black;'>3</td>
+
 
</tr>
 
</tr>
 
<tr>
 
<tr>
 
<td style='border: 1px solid black;'>3</td>
 
<td style='border: 1px solid black;'>3</td>
<td style='border: 1px solid black;'>7</td>
 
 
<td style='border: 1px solid black;'>7</td>
 
<td style='border: 1px solid black;'>7</td>
 
</tr>
 
</tr>
 
<tr>
 
<tr>
 
<td style='border: 1px solid black;'>4</td>
 
<td style='border: 1px solid black;'>4</td>
<td style='border: 1px solid black;'>13</td>
 
 
<td style='border: 1px solid black;'>15</td>
 
<td style='border: 1px solid black;'>15</td>
 
</tr>
 
</tr>
 
<tr>
 
<tr>
 
<td style='border: 1px solid black;'>5</td>
 
<td style='border: 1px solid black;'>5</td>
<td style='border: 1px solid black;'>31</td>
 
 
<td style='border: 1px solid black;'>31</td>
 
<td style='border: 1px solid black;'>31</td>
 
</tr>
 
</tr>
 
<tr>
 
<tr>
 
<td style='border: 1px solid black;'>6</td>
 
<td style='border: 1px solid black;'>6</td>
<td style='border: 1px solid black;'>61</td>
 
 
<td style='border: 1px solid black;'>63</td>
 
<td style='border: 1px solid black;'>63</td>
 
</tr>
 
</tr>
 
<tr>
 
<tr>
 
<td style='border: 1px solid black;'>7</td>
 
<td style='border: 1px solid black;'>7</td>
<td style='border: 1px solid black;'>127</td>
 
 
<td style='border: 1px solid black;'>127</td>
 
<td style='border: 1px solid black;'>127</td>
 
</tr>
 
</tr>
 
<tr>
 
<tr>
 
<td style='border: 1px solid black;'>8</td>
 
<td style='border: 1px solid black;'>8</td>
<td style='border: 1px solid black;'>251</td>
 
 
<td style='border: 1px solid black;'>255</td>
 
<td style='border: 1px solid black;'>255</td>
 
</tr>
 
</tr>
 
<tr>
 
<tr>
 
<td style='border: 1px solid black;'>9</td>
 
<td style='border: 1px solid black;'>9</td>
<td style='border: 1px solid black;'>509</td>
 
 
<td style='border: 1px solid black;'>511</td>
 
<td style='border: 1px solid black;'>511</td>
 +
</tr>
 +
<tr>
 +
<td style='border: 1px solid black;'>10</td>
 +
<td style='border: 1px solid black;'>1023</td>
 +
</tr>
 +
<tr>
 +
<td style='border: 1px solid black;'>11</td>
 +
<td style='border: 1px solid black;'>2047</td>
 +
</tr>
 +
<tr>
 +
<td style='border: 1px solid black;'>12</td>
 +
<td style='border: 1px solid black;'>4095</td>
 +
</tr>
 +
<tr>
 +
<td style='border: 1px solid black;'>13</td>
 +
<td style='border: 1px solid black;'>8191</td>
 +
</tr>
 +
<tr>
 +
<td style='border: 1px solid black;'>14</td>
 +
<td style='border: 1px solid black;'>16383</td>
 +
</tr>
 +
<tr>
 +
<td style='border: 1px solid black;'>15</td>
 +
<td style='border: 1px solid black;'>32767</td>
 +
</tr>
 +
<tr>
 +
<td style='border: 1px solid black;'>16</td>
 +
<td style='border: 1px solid black;'>65535</td>
 
</tr>
 
</tr>
 
</table>
 
</table>
Строка 127: Строка 150:
 
== Результаты ==
 
== Результаты ==
  
[[Изображение:ds_index_position_timing.png]]
+
[[Изображение:sm_roma_vs_dima_timing2.jpg]]
[[Изображение:ds_index_position_area.png]]
+
[[Изображение:sm_roma_vs_dima_area2.jpg]]
[[Изображение:ds_index_position_power.png]]
+
[[Изображение:sm_roma_vs_dima_power2.jpg]]
 +
 
 +
[[Категория:Результаты]]

Текущая версия на 11:43, 20 февраля 2013

Было произведено сравнение позиционного сумматора и 2-х реализаций сумматоров по модулю 2n-1 - чисто комбинационная схема и схема с мультиплексированием. Сравнение производилось для модулей с разрядностью от 2 до 16 бит.

Содержание

[править] Типовые Verilog-модули

1. Сумматор с мультиплексированием (на примере 3-битного)

module sum_modulo_7 (in1, in2, out);
	input [2:0] in1;
	input [2:0] in2;
	output reg [2:0] out;
	wire [3:0] data;
	wire [3:0] data2;
	assign data = in1 + in2;
	assign data2 = in1 + in2 + 1;
	always @(*)
	begin
		if (data2[3] == 1)
			out <= data2[2:0];
		else
			out <= data[2:0];
	end
endmodule

2. Чисто комбинационный сумматор (на примере 3-битного)

module sum_modulo_7 (A, B, S);
	input [2:0] A;
	input [2:0] B;
	output[2:0] S;

	wire [2:0] G;
	wire [2:0] P;
	wire [2:0] C;

	assign G[0] = A[0]&B[0];
	assign G[1] = A[1]&B[1];
	assign G[2] = A[2]&B[2];

	assign P[0] = A[0]^B[0];
	assign P[1] = A[1]^B[1];
	assign P[2] = A[2]^B[2];

	assign C[0] = G[0] | G[2]&P[0] | G[1]&P[0]&P[2]; 
	assign C[1] = G[1] | G[0]&P[1] | G[2]&P[1]&P[0]; 
	assign C[2] = G[2] | G[1]&P[2] | G[0]&P[2]&P[1]; 

	assign S[0] = (P[0]&&(~P[2:0]))^C[2];
	assign S[1] = (P[1]&&(~P[2:0]))^C[0];
	assign S[2] = (P[2]&&(~P[2:0]))^C[1];
endmodule

3. Позиционный сумматор (на примере 3-битного)

module sum_position_3 (a,b,out);
	output wire [3:0] out;
	input  wire [2:0] a,b;
	assign out=a+b;
endmodule

[править] Библиотека стандартных ячеек

NangateOpenCellLibrary_typical_conditional_nldm.lib

[править] Скрипт для запуска

analyze -f verilog <имя модуля>.v
elaborate <имя модуля>
uniquify
current_design <имя модуля>
check_design
set_load [load_of [get_lib_pins NangateOpenCellLibrary/INV_X4/A]] [all_outputs]
set_driving_cell -lib_cell DFFRS_X2 -library NangateOpenCellLibrary -pin Q  [all_inputs] 
set_max_delay -to [all_outputs] 0 
set_max_area 0 
compile
report_timing -significant_digits 6 > timing_<имя модуля>.rpt
report_area > area_<имя модуля>.rpt
report_power -analysis_effort high > power_<имя модуля>.rpt
remove_design -all

[править] Модули для эксперимента

Битность Модуль
3 7
4 15
5 31
6 63
7 127
8 255
9 511
10 1023
11 2047
12 4095
13 8191
14 16383
15 32767
16 65535

[править] Результаты

Sm roma vs dima timing2.jpg Sm roma vs dima area2.jpg Sm roma vs dima power2.jpg


Персональные инструменты
Пространства имён

Варианты
Действия
Навигация