mirror of
https://github.com/YosysHQ/yosys
synced 2025-06-06 22:23:23 +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
21
docs/source/code_examples/techmap/Makefile
Normal file
21
docs/source/code_examples/techmap/Makefile
Normal file
|
@ -0,0 +1,21 @@
|
|||
PROGRAM_PREFIX :=
|
||||
|
||||
YOSYS ?= ../../../$(PROGRAM_PREFIX)yosys
|
||||
|
||||
all: red_or3x1.dot sym_mul.dot mymul.dot mulshift.dot addshift.dot
|
||||
|
||||
red_or3x1.dot: red_or3x1_*
|
||||
$(YOSYS) red_or3x1_test.ys
|
||||
|
||||
sym_mul.dot: sym_mul_*
|
||||
$(YOSYS) sym_mul_test.ys
|
||||
|
||||
mymul.dot: mymul_*
|
||||
$(YOSYS) mymul_test.ys
|
||||
|
||||
mulshift.dot: mulshift_*
|
||||
$(YOSYS) mulshift_test.ys
|
||||
|
||||
addshift.dot: addshift_*
|
||||
$(YOSYS) addshift_test.ys
|
||||
|
20
docs/source/code_examples/techmap/addshift_map.v
Normal file
20
docs/source/code_examples/techmap/addshift_map.v
Normal file
|
@ -0,0 +1,20 @@
|
|||
module \$add (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;
|
||||
|
||||
parameter _TECHMAP_BITS_CONNMAP_ = 0;
|
||||
parameter _TECHMAP_CONNMAP_A_ = 0;
|
||||
parameter _TECHMAP_CONNMAP_B_ = 0;
|
||||
|
||||
wire _TECHMAP_FAIL_ = A_WIDTH != B_WIDTH || B_WIDTH < Y_WIDTH ||
|
||||
_TECHMAP_CONNMAP_A_ != _TECHMAP_CONNMAP_B_;
|
||||
|
||||
assign Y = A << 1;
|
||||
endmodule
|
5
docs/source/code_examples/techmap/addshift_test.v
Normal file
5
docs/source/code_examples/techmap/addshift_test.v
Normal file
|
@ -0,0 +1,5 @@
|
|||
module test (A, B, X, Y);
|
||||
input [7:0] A, B;
|
||||
output [7:0] X = A + B;
|
||||
output [7:0] Y = A + A;
|
||||
endmodule
|
6
docs/source/code_examples/techmap/addshift_test.ys
Normal file
6
docs/source/code_examples/techmap/addshift_test.ys
Normal file
|
@ -0,0 +1,6 @@
|
|||
read_verilog addshift_test.v
|
||||
hierarchy -check -top test
|
||||
|
||||
techmap -map addshift_map.v;;
|
||||
|
||||
show -prefix addshift -format dot -notitle
|
26
docs/source/code_examples/techmap/mulshift_map.v
Normal file
26
docs/source/code_examples/techmap/mulshift_map.v
Normal file
|
@ -0,0 +1,26 @@
|
|||
module MYMUL(A, B, Y);
|
||||
parameter WIDTH = 1;
|
||||
input [WIDTH-1:0] A, B;
|
||||
output reg [WIDTH-1:0] Y;
|
||||
|
||||
parameter _TECHMAP_CONSTVAL_A_ = WIDTH'bx;
|
||||
parameter _TECHMAP_CONSTVAL_B_ = WIDTH'bx;
|
||||
|
||||
reg _TECHMAP_FAIL_;
|
||||
wire [1023:0] _TECHMAP_DO_ = "proc; clean";
|
||||
|
||||
integer i;
|
||||
always @* begin
|
||||
_TECHMAP_FAIL_ <= 1;
|
||||
for (i = 0; i < WIDTH; i=i+1) begin
|
||||
if (_TECHMAP_CONSTVAL_A_ === WIDTH'd1 << i) begin
|
||||
_TECHMAP_FAIL_ <= 0;
|
||||
Y <= B << i;
|
||||
end
|
||||
if (_TECHMAP_CONSTVAL_B_ === WIDTH'd1 << i) begin
|
||||
_TECHMAP_FAIL_ <= 0;
|
||||
Y <= A << i;
|
||||
end
|
||||
end
|
||||
end
|
||||
endmodule
|
5
docs/source/code_examples/techmap/mulshift_test.v
Normal file
5
docs/source/code_examples/techmap/mulshift_test.v
Normal file
|
@ -0,0 +1,5 @@
|
|||
module test (A, X, Y);
|
||||
input [7:0] A;
|
||||
output [7:0] X = A * 8'd 6;
|
||||
output [7:0] Y = A * 8'd 8;
|
||||
endmodule
|
7
docs/source/code_examples/techmap/mulshift_test.ys
Normal file
7
docs/source/code_examples/techmap/mulshift_test.ys
Normal file
|
@ -0,0 +1,7 @@
|
|||
read_verilog mulshift_test.v
|
||||
hierarchy -check -top test
|
||||
|
||||
techmap -map sym_mul_map.v \
|
||||
-map mulshift_map.v;;
|
||||
|
||||
show -prefix mulshift -format dot -notitle -lib sym_mul_cells.v
|
15
docs/source/code_examples/techmap/mymul_map.v
Normal file
15
docs/source/code_examples/techmap/mymul_map.v
Normal file
|
@ -0,0 +1,15 @@
|
|||
module MYMUL(A, B, Y);
|
||||
parameter WIDTH = 1;
|
||||
input [WIDTH-1:0] A, B;
|
||||
output reg [WIDTH-1:0] Y;
|
||||
|
||||
wire [1023:0] _TECHMAP_DO_ = "proc; clean";
|
||||
|
||||
integer i;
|
||||
always @* begin
|
||||
Y = 0;
|
||||
for (i = 0; i < WIDTH; i=i+1)
|
||||
if (A[i])
|
||||
Y = Y + (B << i);
|
||||
end
|
||||
endmodule
|
4
docs/source/code_examples/techmap/mymul_test.v
Normal file
4
docs/source/code_examples/techmap/mymul_test.v
Normal file
|
@ -0,0 +1,4 @@
|
|||
module test(A, B, Y);
|
||||
input [1:0] A, B;
|
||||
output [1:0] Y = A * B;
|
||||
endmodule
|
15
docs/source/code_examples/techmap/mymul_test.ys
Normal file
15
docs/source/code_examples/techmap/mymul_test.ys
Normal file
|
@ -0,0 +1,15 @@
|
|||
read_verilog mymul_test.v
|
||||
hierarchy -check -top test
|
||||
|
||||
techmap -map sym_mul_map.v \
|
||||
-map mymul_map.v;;
|
||||
|
||||
rename test test_mapped
|
||||
read_verilog mymul_test.v
|
||||
miter -equiv test test_mapped miter
|
||||
flatten miter
|
||||
|
||||
sat -verify -prove trigger 0 miter
|
||||
|
||||
splitnets -ports test_mapped/A
|
||||
show -prefix mymul -format dot -notitle test_mapped
|
5
docs/source/code_examples/techmap/red_or3x1_cells.v
Normal file
5
docs/source/code_examples/techmap/red_or3x1_cells.v
Normal file
|
@ -0,0 +1,5 @@
|
|||
module OR3X1(A, B, C, Y);
|
||||
input A, B, C;
|
||||
output Y;
|
||||
assign Y = A | B | C;
|
||||
endmodule
|
48
docs/source/code_examples/techmap/red_or3x1_map.v
Normal file
48
docs/source/code_examples/techmap/red_or3x1_map.v
Normal file
|
@ -0,0 +1,48 @@
|
|||
module \$reduce_or (A, Y);
|
||||
|
||||
parameter A_SIGNED = 0;
|
||||
parameter A_WIDTH = 0;
|
||||
parameter Y_WIDTH = 0;
|
||||
|
||||
input [A_WIDTH-1:0] A;
|
||||
output [Y_WIDTH-1:0] Y;
|
||||
|
||||
function integer min;
|
||||
input integer a, b;
|
||||
begin
|
||||
if (a < b)
|
||||
min = a;
|
||||
else
|
||||
min = b;
|
||||
end
|
||||
endfunction
|
||||
|
||||
genvar i;
|
||||
generate begin
|
||||
if (A_WIDTH == 0) begin
|
||||
assign Y = 0;
|
||||
end
|
||||
if (A_WIDTH == 1) begin
|
||||
assign Y = A;
|
||||
end
|
||||
if (A_WIDTH == 2) begin
|
||||
wire ybuf;
|
||||
OR3X1 g (.A(A[0]), .B(A[1]), .C(1'b0), .Y(ybuf));
|
||||
assign Y = ybuf;
|
||||
end
|
||||
if (A_WIDTH == 3) begin
|
||||
wire ybuf;
|
||||
OR3X1 g (.A(A[0]), .B(A[1]), .C(A[2]), .Y(ybuf));
|
||||
assign Y = ybuf;
|
||||
end
|
||||
if (A_WIDTH > 3) begin
|
||||
localparam next_stage_sz = (A_WIDTH+2) / 3;
|
||||
wire [next_stage_sz-1:0] next_stage;
|
||||
for (i = 0; i < next_stage_sz; i = i+1) begin
|
||||
localparam bits = min(A_WIDTH - 3*i, 3);
|
||||
assign next_stage[i] = |A[3*i +: bits];
|
||||
end
|
||||
assign Y = |next_stage;
|
||||
end
|
||||
end endgenerate
|
||||
endmodule
|
5
docs/source/code_examples/techmap/red_or3x1_test.v
Normal file
5
docs/source/code_examples/techmap/red_or3x1_test.v
Normal file
|
@ -0,0 +1,5 @@
|
|||
module test (A, Y);
|
||||
input [6:0] A;
|
||||
output Y;
|
||||
assign Y = |A;
|
||||
endmodule
|
7
docs/source/code_examples/techmap/red_or3x1_test.ys
Normal file
7
docs/source/code_examples/techmap/red_or3x1_test.ys
Normal file
|
@ -0,0 +1,7 @@
|
|||
read_verilog red_or3x1_test.v
|
||||
hierarchy -check -top test
|
||||
|
||||
techmap -map red_or3x1_map.v;;
|
||||
|
||||
splitnets -ports
|
||||
show -prefix red_or3x1 -format dot -notitle -lib red_or3x1_cells.v
|
6
docs/source/code_examples/techmap/sym_mul_cells.v
Normal file
6
docs/source/code_examples/techmap/sym_mul_cells.v
Normal file
|
@ -0,0 +1,6 @@
|
|||
module MYMUL(A, B, Y);
|
||||
parameter WIDTH = 1;
|
||||
input [WIDTH-1:0] A, B;
|
||||
output [WIDTH-1:0] Y;
|
||||
assign Y = A * B;
|
||||
endmodule
|
15
docs/source/code_examples/techmap/sym_mul_map.v
Normal file
15
docs/source/code_examples/techmap/sym_mul_map.v
Normal file
|
@ -0,0 +1,15 @@
|
|||
module \$mul (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 || B_WIDTH != Y_WIDTH;
|
||||
|
||||
MYMUL #( .WIDTH(Y_WIDTH) ) g ( .A(A), .B(B), .Y(Y) );
|
||||
endmodule
|
5
docs/source/code_examples/techmap/sym_mul_test.v
Normal file
5
docs/source/code_examples/techmap/sym_mul_test.v
Normal file
|
@ -0,0 +1,5 @@
|
|||
module test(A, B, C, Y1, Y2);
|
||||
input [7:0] A, B, C;
|
||||
output [7:0] Y1 = A * B;
|
||||
output [15:0] Y2 = A * C;
|
||||
endmodule
|
6
docs/source/code_examples/techmap/sym_mul_test.ys
Normal file
6
docs/source/code_examples/techmap/sym_mul_test.ys
Normal file
|
@ -0,0 +1,6 @@
|
|||
read_verilog sym_mul_test.v
|
||||
hierarchy -check -top test
|
||||
|
||||
techmap -map sym_mul_map.v;;
|
||||
|
||||
show -prefix sym_mul -format dot -notitle -lib sym_mul_cells.v
|
Loading…
Add table
Add a link
Reference in a new issue