mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-11-04 05:19:11 +00:00 
			
		
		
		
	Progress in presentation
This commit is contained in:
		
							parent
							
								
									0dadfed46d
								
							
						
					
					
						commit
						b0e84802ec
					
				
					 5 changed files with 207 additions and 0 deletions
				
			
		
							
								
								
									
										30
									
								
								manual/PRESENTATION_ExAdv/macc_xilinx_swap_map.v
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								manual/PRESENTATION_ExAdv/macc_xilinx_swap_map.v
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,30 @@
 | 
			
		|||
 | 
			
		||||
(* techmap_celltype = "$mul" *)
 | 
			
		||||
module mul_swap_ports (A, B, Y);
 | 
			
		||||
 | 
			
		||||
parameter A_SIGNED = 0;
 | 
			
		||||
parameter B_SIGNED = 0;
 | 
			
		||||
parameter A_WIDTH = 1;
 | 
			
		||||
parameter B_WIDTH = 1;
 | 
			
		||||
parameter Y_WIDTH = 1;
 | 
			
		||||
 | 
			
		||||
input [A_WIDTH-1:0] A;
 | 
			
		||||
input [B_WIDTH-1:0] B;
 | 
			
		||||
output [Y_WIDTH-1:0] Y;
 | 
			
		||||
 | 
			
		||||
wire _TECHMAP_FAIL_ = A_WIDTH >= B_WIDTH;
 | 
			
		||||
 | 
			
		||||
\$mul #(
 | 
			
		||||
	.A_SIGNED(B_SIGNED),
 | 
			
		||||
	.B_SIGNED(A_SIGNED),
 | 
			
		||||
	.A_WIDTH(B_WIDTH),
 | 
			
		||||
	.B_WIDTH(A_WIDTH),
 | 
			
		||||
	.Y_WIDTH(Y_WIDTH)
 | 
			
		||||
) _TECHMAP_REPLACE_ (
 | 
			
		||||
	.A(B),
 | 
			
		||||
	.B(A),
 | 
			
		||||
	.Y(Y)
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										6
									
								
								manual/PRESENTATION_ExAdv/macc_xilinx_test.v
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								manual/PRESENTATION_ExAdv/macc_xilinx_test.v
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
module test(a, b, c, d, e, f, y);
 | 
			
		||||
input [19:0] a, b, c;
 | 
			
		||||
input [15:0] d, e, f;
 | 
			
		||||
output [41:0] y;
 | 
			
		||||
assign y = a*b + c*d + e*f;
 | 
			
		||||
endmodule
 | 
			
		||||
							
								
								
									
										17
									
								
								manual/PRESENTATION_ExAdv/macc_xilinx_test.ys
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								manual/PRESENTATION_ExAdv/macc_xilinx_test.ys
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,17 @@
 | 
			
		|||
read_verilog macc_xilinx_test.v
 | 
			
		||||
read_verilog -lib -icells macc_xilinx_unwrap_map.v
 | 
			
		||||
hierarchy -check -top test;;
 | 
			
		||||
 | 
			
		||||
show -prefix macc_xilinx_test_a -format pdf -notitle
 | 
			
		||||
 | 
			
		||||
techmap -map macc_xilinx_swap_map.v;;
 | 
			
		||||
 | 
			
		||||
show -prefix macc_xilinx_test_b -format pdf -notitle
 | 
			
		||||
 | 
			
		||||
techmap -map macc_xilinx_wrap_map.v
 | 
			
		||||
 | 
			
		||||
connwrappers -unsigned $__mul_wrapper Y Y_WIDTH \
 | 
			
		||||
             -unsigned $__add_wrapper Y Y_WIDTH;;
 | 
			
		||||
 | 
			
		||||
show -prefix macc_xilinx_test_c -format pdf -notitle
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										63
									
								
								manual/PRESENTATION_ExAdv/macc_xilinx_unwrap_map.v
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								manual/PRESENTATION_ExAdv/macc_xilinx_unwrap_map.v
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,63 @@
 | 
			
		|||
 | 
			
		||||
module \$__mul_wrapper (A, B, Y);
 | 
			
		||||
 | 
			
		||||
parameter A_SIGNED = 0;
 | 
			
		||||
parameter B_SIGNED = 0;
 | 
			
		||||
parameter A_WIDTH = 1;
 | 
			
		||||
parameter B_WIDTH = 1;
 | 
			
		||||
parameter Y_WIDTH = 1;
 | 
			
		||||
 | 
			
		||||
input [A_WIDTH-1:0] A;
 | 
			
		||||
input [B_WIDTH-1:0] B;
 | 
			
		||||
output [Y_WIDTH-1:0] Y;
 | 
			
		||||
 | 
			
		||||
wire [A_WIDTH-1:0] A_ORIG = A;
 | 
			
		||||
wire [B_WIDTH-1:0] B_ORIG = B;
 | 
			
		||||
wire [Y_WIDTH-1:0] Y_ORIG;
 | 
			
		||||
assign Y = Y_ORIG;
 | 
			
		||||
 | 
			
		||||
\$mul #(
 | 
			
		||||
	.A_SIGNED(A_SIGNED),
 | 
			
		||||
	.B_SIGNED(B_SIGNED),
 | 
			
		||||
	.A_WIDTH(A_WIDTH),
 | 
			
		||||
	.B_WIDTH(B_WIDTH),
 | 
			
		||||
	.Y_WIDTH(Y_WIDTH)
 | 
			
		||||
) _TECHMAP_REPLACE_ (
 | 
			
		||||
	.A(A_ORIG),
 | 
			
		||||
	.B(B_ORIG),
 | 
			
		||||
	.Y(Y_ORIG)
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
module \$__add_wrapper (A, B, Y);
 | 
			
		||||
 | 
			
		||||
parameter A_SIGNED = 0;
 | 
			
		||||
parameter B_SIGNED = 0;
 | 
			
		||||
parameter A_WIDTH = 1;
 | 
			
		||||
parameter B_WIDTH = 1;
 | 
			
		||||
parameter Y_WIDTH = 1;
 | 
			
		||||
 | 
			
		||||
input [A_WIDTH-1:0] A;
 | 
			
		||||
input [B_WIDTH-1:0] B;
 | 
			
		||||
output [Y_WIDTH-1:0] Y;
 | 
			
		||||
 | 
			
		||||
wire [A_WIDTH-1:0] A_ORIG = A;
 | 
			
		||||
wire [B_WIDTH-1:0] B_ORIG = B;
 | 
			
		||||
wire [Y_WIDTH-1:0] Y_ORIG;
 | 
			
		||||
assign Y = Y_ORIG;
 | 
			
		||||
 | 
			
		||||
\$add #(
 | 
			
		||||
	.A_SIGNED(A_SIGNED),
 | 
			
		||||
	.B_SIGNED(B_SIGNED),
 | 
			
		||||
	.A_WIDTH(A_WIDTH),
 | 
			
		||||
	.B_WIDTH(B_WIDTH),
 | 
			
		||||
	.Y_WIDTH(Y_WIDTH)
 | 
			
		||||
) _TECHMAP_REPLACE_ (
 | 
			
		||||
	.A(A_ORIG),
 | 
			
		||||
	.B(B_ORIG),
 | 
			
		||||
	.Y(Y_ORIG)
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										91
									
								
								manual/PRESENTATION_ExAdv/macc_xilinx_wrap_map.v
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								manual/PRESENTATION_ExAdv/macc_xilinx_wrap_map.v
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,91 @@
 | 
			
		|||
 | 
			
		||||
(* techmap_celltype = "$mul" *)
 | 
			
		||||
module mul_wrap (A, B, Y);
 | 
			
		||||
 | 
			
		||||
parameter A_SIGNED = 0;
 | 
			
		||||
parameter B_SIGNED = 0;
 | 
			
		||||
parameter A_WIDTH = 1;
 | 
			
		||||
parameter B_WIDTH = 1;
 | 
			
		||||
parameter Y_WIDTH = 1;
 | 
			
		||||
 | 
			
		||||
input [A_WIDTH-1:0] A;
 | 
			
		||||
input [B_WIDTH-1:0] B;
 | 
			
		||||
output [Y_WIDTH-1:0] Y;
 | 
			
		||||
 | 
			
		||||
wire [24:0] A_25 = A;
 | 
			
		||||
wire [17:0] B_18 = B;
 | 
			
		||||
wire [47:0] Y_48;
 | 
			
		||||
assign Y = Y_48;
 | 
			
		||||
 | 
			
		||||
wire [1023:0] _TECHMAP_DO_ = "proc; clean";
 | 
			
		||||
 | 
			
		||||
reg _TECHMAP_FAIL_;
 | 
			
		||||
initial begin
 | 
			
		||||
	_TECHMAP_FAIL_ <= 0;
 | 
			
		||||
	if (A_SIGNED || B_SIGNED)
 | 
			
		||||
		_TECHMAP_FAIL_ <= 1;
 | 
			
		||||
	if (A_WIDTH < 4 || B_WIDTH < 4)
 | 
			
		||||
		_TECHMAP_FAIL_ <= 1;
 | 
			
		||||
	if (A_WIDTH > 25 || B_WIDTH > 18)
 | 
			
		||||
		_TECHMAP_FAIL_ <= 1;
 | 
			
		||||
	if (A_WIDTH*B_WIDTH < 100)
 | 
			
		||||
		_TECHMAP_FAIL_ <= 1;
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
\$__mul_wrapper #(
 | 
			
		||||
	.A_SIGNED(A_SIGNED),
 | 
			
		||||
	.B_SIGNED(B_SIGNED),
 | 
			
		||||
	.A_WIDTH(A_WIDTH),
 | 
			
		||||
	.B_WIDTH(B_WIDTH),
 | 
			
		||||
	.Y_WIDTH(Y_WIDTH)
 | 
			
		||||
) _TECHMAP_REPLACE_ (
 | 
			
		||||
	.A(A_25),
 | 
			
		||||
	.B(B_18),
 | 
			
		||||
	.Y(Y_48)
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
(* techmap_celltype = "$add" *)
 | 
			
		||||
module add_wrap (A, B, Y);
 | 
			
		||||
 | 
			
		||||
parameter A_SIGNED = 0;
 | 
			
		||||
parameter B_SIGNED = 0;
 | 
			
		||||
parameter A_WIDTH = 1;
 | 
			
		||||
parameter B_WIDTH = 1;
 | 
			
		||||
parameter Y_WIDTH = 1;
 | 
			
		||||
 | 
			
		||||
input [A_WIDTH-1:0] A;
 | 
			
		||||
input [B_WIDTH-1:0] B;
 | 
			
		||||
output [Y_WIDTH-1:0] Y;
 | 
			
		||||
 | 
			
		||||
wire [47:0] A_48 = A;
 | 
			
		||||
wire [47:0] B_48 = B;
 | 
			
		||||
wire [47:0] Y_48;
 | 
			
		||||
assign Y = Y_48;
 | 
			
		||||
 | 
			
		||||
wire [1023:0] _TECHMAP_DO_ = "proc; clean";
 | 
			
		||||
 | 
			
		||||
reg _TECHMAP_FAIL_;
 | 
			
		||||
initial begin
 | 
			
		||||
	_TECHMAP_FAIL_ <= 0;
 | 
			
		||||
	if (A_SIGNED || B_SIGNED)
 | 
			
		||||
		_TECHMAP_FAIL_ <= 1;
 | 
			
		||||
	if (A_WIDTH < 10 && B_WIDTH < 10)
 | 
			
		||||
		_TECHMAP_FAIL_ <= 1;
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
\$__add_wrapper #(
 | 
			
		||||
	.A_SIGNED(A_SIGNED),
 | 
			
		||||
	.B_SIGNED(B_SIGNED),
 | 
			
		||||
	.A_WIDTH(A_WIDTH),
 | 
			
		||||
	.B_WIDTH(B_WIDTH),
 | 
			
		||||
	.Y_WIDTH(Y_WIDTH)
 | 
			
		||||
) _TECHMAP_REPLACE_ (
 | 
			
		||||
	.A(A_48),
 | 
			
		||||
	.B(B_48),
 | 
			
		||||
	.Y(Y_48)
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue