mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-28 10:19:26 +00:00 
			
		
		
		
	docs: moving code examples
Code now resides in `docs/source/code_examples`. `CHAPTER_Prog` -> `stubnets` `APPNOTE_011_Design_Investigation` -> `selections` and `show` `resources/PRESENTATION_Intro` -> `intro` `resources/PRESENTATION_ExSyn` -> `synth_flow` `resources/PRESENTATION_ExAdv` -> `techmap`, `macc`, and `selections` `resources/PRESENTATION_ExOth` -> `scrambler` and `axis` Note that generated images are not yet configured to build from the new code locations.
This commit is contained in:
		
							parent
							
								
									3d70867809
								
							
						
					
					
						commit
						dbc38d72cf
					
				
					 119 changed files with 264 additions and 905 deletions
				
			
		
							
								
								
									
										12
									
								
								docs/source/code_examples/macc/Makefile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								docs/source/code_examples/macc/Makefile
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,12 @@ | |||
| PROGRAM_PREFIX := | ||||
| 
 | ||||
| YOSYS ?= ../../../$(PROGRAM_PREFIX)yosys | ||||
| 
 | ||||
| all: macc_simple_xmap.pdf macc_xilinx_xmap.pdf | ||||
| 
 | ||||
| macc_simple_xmap.pdf: macc_simple_*.v macc_simple_test.ys | ||||
| 	$(YOSYS) macc_simple_test.ys | ||||
| 
 | ||||
| macc_xilinx_xmap.pdf: macc_xilinx_*.v macc_xilinx_test.ys | ||||
| 	$(YOSYS) macc_xilinx_test.ys | ||||
| 
 | ||||
							
								
								
									
										6
									
								
								docs/source/code_examples/macc/macc_simple_test.v
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								docs/source/code_examples/macc/macc_simple_test.v
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | |||
| module test(a, b, c, d, y); | ||||
| input [15:0] a, b; | ||||
| input [31:0] c, d; | ||||
| output [31:0] y; | ||||
| assign y = a * b + c + d; | ||||
| endmodule | ||||
							
								
								
									
										37
									
								
								docs/source/code_examples/macc/macc_simple_test.ys
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								docs/source/code_examples/macc/macc_simple_test.ys
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,37 @@ | |||
| read_verilog macc_simple_test.v | ||||
| hierarchy -check -top test;; | ||||
| 
 | ||||
| show -prefix macc_simple_test_00a -format pdf -notitle -lib macc_simple_xmap.v | ||||
| 
 | ||||
| extract -constports -map macc_simple_xmap.v;; | ||||
| show -prefix macc_simple_test_00b -format pdf -notitle -lib macc_simple_xmap.v | ||||
| 
 | ||||
| ################################################# | ||||
| 
 | ||||
| design -reset | ||||
| read_verilog macc_simple_test_01.v | ||||
| hierarchy -check -top test;; | ||||
| 
 | ||||
| show -prefix macc_simple_test_01a -format pdf -notitle -lib macc_simple_xmap.v | ||||
| 
 | ||||
| extract -map macc_simple_xmap.v;; | ||||
| show -prefix macc_simple_test_01b -format pdf -notitle -lib macc_simple_xmap.v | ||||
| 
 | ||||
| ################################################# | ||||
| 
 | ||||
| design -reset | ||||
| read_verilog macc_simple_test_02.v | ||||
| hierarchy -check -top test;; | ||||
| 
 | ||||
| show -prefix macc_simple_test_02a -format pdf -notitle -lib macc_simple_xmap.v | ||||
| 
 | ||||
| extract -map macc_simple_xmap.v;; | ||||
| show -prefix macc_simple_test_02b -format pdf -notitle -lib macc_simple_xmap.v | ||||
| 
 | ||||
| ################################################# | ||||
| 
 | ||||
| design -reset | ||||
| read_verilog macc_simple_xmap.v | ||||
| hierarchy -check -top macc_16_16_32;; | ||||
| 
 | ||||
| show -prefix macc_simple_xmap -format pdf -notitle | ||||
							
								
								
									
										6
									
								
								docs/source/code_examples/macc/macc_simple_test_01.v
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								docs/source/code_examples/macc/macc_simple_test_01.v
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | |||
| module test(a, b, c, d, x, y); | ||||
| input [15:0] a, b, c, d; | ||||
| input [31:0] x; | ||||
| output [31:0] y; | ||||
| assign y = a*b + c*d + x; | ||||
| endmodule | ||||
							
								
								
									
										6
									
								
								docs/source/code_examples/macc/macc_simple_test_02.v
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								docs/source/code_examples/macc/macc_simple_test_02.v
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | |||
| module test(a, b, c, d, x, y); | ||||
| input [15:0] a, b, c, d; | ||||
| input [31:0] x; | ||||
| output [31:0] y; | ||||
| assign y = a*b + (c*d + x); | ||||
| endmodule | ||||
							
								
								
									
										6
									
								
								docs/source/code_examples/macc/macc_simple_xmap.v
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								docs/source/code_examples/macc/macc_simple_xmap.v
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | |||
| module macc_16_16_32(a, b, c, y); | ||||
| input [15:0] a, b; | ||||
| input [31:0] c; | ||||
| output [31:0] y; | ||||
| assign y = a*b + c; | ||||
| endmodule | ||||
							
								
								
									
										28
									
								
								docs/source/code_examples/macc/macc_xilinx_swap_map.v
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								docs/source/code_examples/macc/macc_xilinx_swap_map.v
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,28 @@ | |||
| (* 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 | ||||
							
								
								
									
										13
									
								
								docs/source/code_examples/macc/macc_xilinx_test.v
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								docs/source/code_examples/macc/macc_xilinx_test.v
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,13 @@ | |||
| module test1(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 | ||||
| 
 | ||||
| module test2(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 | ||||
							
								
								
									
										43
									
								
								docs/source/code_examples/macc/macc_xilinx_test.ys
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								docs/source/code_examples/macc/macc_xilinx_test.ys
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,43 @@ | |||
| read_verilog macc_xilinx_test.v | ||||
| read_verilog -lib -icells macc_xilinx_unwrap_map.v | ||||
| read_verilog -lib -icells macc_xilinx_xmap.v | ||||
| hierarchy -check ;; | ||||
| 
 | ||||
| show -prefix macc_xilinx_test1a -format pdf -notitle test1 | ||||
| show -prefix macc_xilinx_test2a -format pdf -notitle test2 | ||||
| 
 | ||||
| techmap -map macc_xilinx_swap_map.v;; | ||||
| 
 | ||||
| show -prefix macc_xilinx_test1b -format pdf -notitle test1 | ||||
| show -prefix macc_xilinx_test2b -format pdf -notitle test2 | ||||
| 
 | ||||
| techmap -map macc_xilinx_wrap_map.v | ||||
| 
 | ||||
| connwrappers -unsigned $__mul_wrapper Y Y_WIDTH \ | ||||
|              -unsigned $__add_wrapper Y Y_WIDTH;; | ||||
| 
 | ||||
| show -prefix macc_xilinx_test1c -format pdf -notitle test1 | ||||
| show -prefix macc_xilinx_test2c -format pdf -notitle test2 | ||||
| 
 | ||||
| design -push | ||||
| read_verilog macc_xilinx_xmap.v | ||||
| techmap -map macc_xilinx_swap_map.v | ||||
| techmap -map macc_xilinx_wrap_map.v;; | ||||
| design -save __macc_xilinx_xmap | ||||
| design -pop | ||||
| 
 | ||||
| extract -constports -ignore_parameters \ | ||||
|         -map %__macc_xilinx_xmap       \ | ||||
|         -swap $__add_wrapper A,B ;; | ||||
| 
 | ||||
| show -prefix macc_xilinx_test1d -format pdf -notitle test1 | ||||
| show -prefix macc_xilinx_test2d -format pdf -notitle test2 | ||||
| 
 | ||||
| techmap -map macc_xilinx_unwrap_map.v;; | ||||
| 
 | ||||
| show -prefix macc_xilinx_test1e -format pdf -notitle test1 | ||||
| show -prefix macc_xilinx_test2e -format pdf -notitle test2 | ||||
| 
 | ||||
| design -load __macc_xilinx_xmap | ||||
| show -prefix macc_xilinx_xmap -format pdf -notitle | ||||
| 
 | ||||
							
								
								
									
										61
									
								
								docs/source/code_examples/macc/macc_xilinx_unwrap_map.v
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								docs/source/code_examples/macc/macc_xilinx_unwrap_map.v
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,61 @@ | |||
| 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 [17:0] A; | ||||
| input [24:0] B; | ||||
| output [47: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 [47:0] A; | ||||
| input [47:0] B; | ||||
| output [47: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 | ||||
							
								
								
									
										89
									
								
								docs/source/code_examples/macc/macc_xilinx_wrap_map.v
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								docs/source/code_examples/macc/macc_xilinx_wrap_map.v
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,89 @@ | |||
| (* 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 [17:0] A_18 = A; | ||||
| wire [24:0] B_25 = 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 > 18 || B_WIDTH > 25) | ||||
| 		_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_18), | ||||
| 	.B(B_25), | ||||
| 	.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 | ||||
							
								
								
									
										10
									
								
								docs/source/code_examples/macc/macc_xilinx_xmap.v
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								docs/source/code_examples/macc/macc_xilinx_xmap.v
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,10 @@ | |||
| module DSP48_MACC (a, b, c, y); | ||||
| 
 | ||||
| input [17:0] a; | ||||
| input [24:0] b; | ||||
| input [47:0] c; | ||||
| output [47:0] y; | ||||
| 
 | ||||
| assign y = a*b + c; | ||||
| 
 | ||||
| endmodule | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue