mirror of
https://github.com/YosysHQ/yosys
synced 2025-04-23 00:55:32 +00:00
synth_gatemate: Initial implementation
Signed-off-by: Patrick Urban <patrick.urban@web.de>
This commit is contained in:
parent
b3e2001e1f
commit
240d289fff
29 changed files with 4053 additions and 0 deletions
9
tests/arch/gatemate/add_sub.ys
Normal file
9
tests/arch/gatemate/add_sub.ys
Normal file
|
@ -0,0 +1,9 @@
|
|||
read_verilog ../common/add_sub.v
|
||||
hierarchy -top top
|
||||
proc
|
||||
equiv_opt -assert -map +/gatemate/cells_sim.v synth_gatemate -noiopad # equivalency check
|
||||
design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
|
||||
cd top # Constrain all select calls below inside the top module
|
||||
select -assert-count 8 t:CC_ADDF
|
||||
select -assert-count 4 t:CC_LUT1
|
||||
select -assert-none t:CC_ADDF t:CC_LUT1 %% t:* %D
|
43
tests/arch/gatemate/adffs.ys
Normal file
43
tests/arch/gatemate/adffs.ys
Normal file
|
@ -0,0 +1,43 @@
|
|||
read_verilog ../common/adffs.v
|
||||
design -save read
|
||||
|
||||
hierarchy -top adff
|
||||
proc
|
||||
equiv_opt -async2sync -assert -map +/gatemate/cells_sim.v synth_gatemate -noiopad # equivalency check
|
||||
design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
|
||||
cd adff # Constrain all select calls below inside the top module
|
||||
select -assert-count 1 t:CC_BUFG
|
||||
select -assert-count 1 t:CC_DFF
|
||||
select -assert-none t:CC_BUFG t:CC_DFF %% t:* %D
|
||||
|
||||
design -load read
|
||||
hierarchy -top adffn
|
||||
proc
|
||||
equiv_opt -async2sync -assert -map +/gatemate/cells_sim.v synth_gatemate -noiopad # equivalency check
|
||||
design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
|
||||
cd adffn # Constrain all select calls below inside the top module
|
||||
select -assert-count 1 t:CC_BUFG
|
||||
select -assert-count 1 t:CC_DFF
|
||||
select -assert-none t:CC_BUFG t:CC_DFF %% t:* %D
|
||||
|
||||
design -load read
|
||||
hierarchy -top dffs
|
||||
proc
|
||||
equiv_opt -async2sync -assert -map +/gatemate/cells_sim.v synth_gatemate -noiopad # equivalency check
|
||||
design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
|
||||
cd dffs # Constrain all select calls below inside the top module
|
||||
select -assert-count 1 t:CC_BUFG
|
||||
select -assert-count 1 t:CC_DFF
|
||||
select -assert-count 1 t:CC_LUT2
|
||||
select -assert-none t:CC_BUFG t:CC_DFF t:CC_LUT2 %% t:* %D
|
||||
|
||||
design -load read
|
||||
hierarchy -top ndffnr
|
||||
proc
|
||||
equiv_opt -async2sync -assert -map +/gatemate/cells_sim.v synth_gatemate -noiopad # equivalency check
|
||||
design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
|
||||
cd ndffnr # Constrain all select calls below inside the top module
|
||||
select -assert-count 1 t:CC_BUFG
|
||||
select -assert-count 1 t:CC_DFF
|
||||
select -assert-count 1 t:CC_LUT2
|
||||
select -assert-none t:CC_BUFG t:CC_DFF t:CC_LUT2 %% t:* %D
|
12
tests/arch/gatemate/counter.ys
Normal file
12
tests/arch/gatemate/counter.ys
Normal file
|
@ -0,0 +1,12 @@
|
|||
read_verilog ../common/counter.v
|
||||
hierarchy -top top
|
||||
proc
|
||||
flatten
|
||||
equiv_opt -assert -async2sync -map +/gatemate/cells_sim.v synth_gatemate -noiopad # equivalency check
|
||||
design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
|
||||
cd top # Constrain all select calls below inside the top module
|
||||
|
||||
select -assert-count 8 t:CC_ADDF
|
||||
select -assert-count 1 t:CC_BUFG
|
||||
select -assert-count 8 t:CC_DFF
|
||||
select -assert-none t:CC_ADDF t:CC_BUFG t:CC_DFF %% t:* %D
|
21
tests/arch/gatemate/dffs.ys
Normal file
21
tests/arch/gatemate/dffs.ys
Normal file
|
@ -0,0 +1,21 @@
|
|||
read_verilog ../common/dffs.v
|
||||
design -save read
|
||||
|
||||
hierarchy -top dff
|
||||
proc
|
||||
equiv_opt -assert -async2sync -map +/gatemate/cells_sim.v synth_gatemate -noiopad # equivalency check
|
||||
design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
|
||||
cd dff # Constrain all select calls below inside the top module
|
||||
select -assert-count 1 t:CC_BUFG
|
||||
select -assert-count 1 t:CC_DFF
|
||||
select -assert-none t:CC_BUFG t:CC_DFF %% t:* %D
|
||||
|
||||
design -load read
|
||||
hierarchy -top dffe
|
||||
proc
|
||||
equiv_opt -assert -async2sync -map +/gatemate/cells_sim.v synth_gatemate -noiopad # equivalency check
|
||||
design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
|
||||
cd dffe # Constrain all select calls below inside the top module
|
||||
select -assert-count 1 t:CC_BUFG
|
||||
select -assert-count 1 t:CC_DFF
|
||||
select -assert-none t:CC_BUFG t:CC_DFF %% t:* %D
|
20
tests/arch/gatemate/fsm.ys
Normal file
20
tests/arch/gatemate/fsm.ys
Normal file
|
@ -0,0 +1,20 @@
|
|||
read_verilog ../common/fsm.v
|
||||
hierarchy -top fsm
|
||||
proc
|
||||
flatten
|
||||
|
||||
equiv_opt -run :prove -map +/gatemate/cells_sim.v synth_gatemate -noiopad
|
||||
async2sync
|
||||
miter -equiv -make_assert -flatten gold gate miter
|
||||
stat
|
||||
sat -verify -prove-asserts -show-public -set-at 1 in_reset 1 -seq 20 -prove-skip 1 miter
|
||||
|
||||
design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
|
||||
cd fsm # Constrain all select calls below inside the top module
|
||||
|
||||
select -assert-count 1 t:CC_BUFG
|
||||
select -assert-count 6 t:CC_DFF
|
||||
select -assert-count 3 t:CC_LUT2
|
||||
select -assert-count 4 t:CC_LUT3
|
||||
select -assert-count 8 t:CC_LUT4
|
||||
select -assert-none t:CC_BUFG t:CC_DFF t:CC_LUT2 t:CC_LUT3 t:CC_LUT4 %% t:* %D
|
29
tests/arch/gatemate/latches.ys
Normal file
29
tests/arch/gatemate/latches.ys
Normal file
|
@ -0,0 +1,29 @@
|
|||
read_verilog ../common/latches.v
|
||||
design -save read
|
||||
|
||||
hierarchy -top latchp
|
||||
proc
|
||||
equiv_opt -async2sync -assert -map +/gatemate/cells_sim.v synth_gatemate -noiopad # equivalency check
|
||||
design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
|
||||
cd latchp # Constrain all select calls below inside the top module
|
||||
select -assert-count 1 t:CC_DLT
|
||||
select -assert-none t:CC_DLT %% t:* %D
|
||||
|
||||
design -load read
|
||||
hierarchy -top latchn
|
||||
proc
|
||||
equiv_opt -async2sync -assert -map +/gatemate/cells_sim.v synth_gatemate -noiopad # equivalency check
|
||||
design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
|
||||
cd latchn # Constrain all select calls below inside the top module
|
||||
select -assert-count 1 t:CC_DLT
|
||||
select -assert-none t:CC_DLT %% t:* %D
|
||||
|
||||
design -load read
|
||||
hierarchy -top latchsr
|
||||
proc
|
||||
equiv_opt -async2sync -assert -map +/gatemate/cells_sim.v synth_gatemate -noiopad # equivalency check
|
||||
design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
|
||||
cd latchsr # Constrain all select calls below inside the top module
|
||||
select -assert-count 1 t:CC_DLT
|
||||
select -assert-count 2 t:CC_LUT3
|
||||
select -assert-none t:CC_DLT t:CC_LUT3 %% t:* %D
|
10
tests/arch/gatemate/logic.ys
Normal file
10
tests/arch/gatemate/logic.ys
Normal file
|
@ -0,0 +1,10 @@
|
|||
read_verilog ../common/logic.v
|
||||
hierarchy -top top
|
||||
proc
|
||||
equiv_opt -assert -map +/gatemate/cells_sim.v synth_gatemate -noiopad # equivalency check
|
||||
design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
|
||||
cd top # Constrain all select calls below inside the top module
|
||||
select -assert-count 1 t:CC_LUT1
|
||||
select -assert-count 6 t:CC_LUT2
|
||||
select -assert-count 2 t:CC_LUT4
|
||||
select -assert-none t:CC_LUT1 t:CC_LUT2 t:CC_LUT4 %% t:* %D
|
34
tests/arch/gatemate/memory.ys
Normal file
34
tests/arch/gatemate/memory.ys
Normal file
|
@ -0,0 +1,34 @@
|
|||
# 512 x 40 bit -> CC_BRAM_20K SDP RAM
|
||||
read_verilog ../common/blockram.v
|
||||
chparam -set ADDRESS_WIDTH 9 -set DATA_WIDTH 40 sync_ram_sdp
|
||||
synth_gatemate -top sync_ram_sdp -noiopad
|
||||
cd sync_ram_sdp
|
||||
select -assert-count 1 t:CC_BUFG
|
||||
select -assert-count 1 t:CC_BRAM_20K
|
||||
|
||||
# 512 x 80 bit -> CC_BRAM_40K SDP RAM
|
||||
design -reset
|
||||
read_verilog ../common/blockram.v
|
||||
chparam -set ADDRESS_WIDTH 9 -set DATA_WIDTH 80 sync_ram_sdp
|
||||
synth_gatemate -top sync_ram_sdp -noiopad
|
||||
cd sync_ram_sdp
|
||||
select -assert-count 1 t:CC_BUFG
|
||||
select -assert-count 1 t:CC_BRAM_40K
|
||||
|
||||
# 512 x 40 bit -> CC_BRAM_20K SDP ROM
|
||||
design -reset
|
||||
read_verilog ../common/blockrom.v
|
||||
chparam -set ADDRESS_WIDTH 9 -set DATA_WIDTH 40 sync_rom
|
||||
synth_gatemate -top sync_rom -noiopad
|
||||
cd sync_rom
|
||||
select -assert-count 1 t:CC_BUFG
|
||||
select -assert-count 1 t:CC_BRAM_20K
|
||||
|
||||
# 512 x 80 bit -> CC_BRAM_40K SDP ROM
|
||||
design -reset
|
||||
read_verilog ../common/blockrom.v
|
||||
chparam -set ADDRESS_WIDTH 9 -set DATA_WIDTH 80 sync_rom
|
||||
synth_gatemate -top sync_rom -noiopad
|
||||
cd sync_rom
|
||||
select -assert-count 1 t:CC_BUFG
|
||||
select -assert-count 1 t:CC_BRAM_40K
|
79
tests/arch/gatemate/mul.v
Normal file
79
tests/arch/gatemate/mul.v
Normal file
|
@ -0,0 +1,79 @@
|
|||
|
||||
module mul_plain(a, b, p);
|
||||
|
||||
parameter M = 6;
|
||||
parameter N = 6;
|
||||
|
||||
input wire [M-1:0] a;
|
||||
input wire [N-1:0] b;
|
||||
output wire [M+N-1:0] p;
|
||||
|
||||
assign p = a * b;
|
||||
|
||||
endmodule
|
||||
|
||||
module mul_signed_async (clk, rst, en, a, b, p);
|
||||
|
||||
parameter M = 8;
|
||||
parameter N = 6;
|
||||
|
||||
input wire signed clk, rst, en;
|
||||
input wire signed [M-1:0] a;
|
||||
input wire signed [N-1:0] b;
|
||||
output reg signed [M+N-1:0] p;
|
||||
|
||||
reg signed [M-1:0] a_reg;
|
||||
reg signed [N-1:0] b_reg;
|
||||
|
||||
// signed M*N multiplier with
|
||||
// - input and output pipeline registers
|
||||
// - asynchronous reset (active high)
|
||||
// - clock enable (active high)
|
||||
always @(posedge clk or posedge rst)
|
||||
begin
|
||||
if (rst) begin
|
||||
a_reg <= 0;
|
||||
b_reg <= 0;
|
||||
p <= 0;
|
||||
end
|
||||
else if (en) begin
|
||||
a_reg <= a;
|
||||
b_reg <= b;
|
||||
p <= a_reg * b_reg;
|
||||
end
|
||||
end
|
||||
|
||||
endmodule
|
||||
|
||||
module mul_unsigned_sync (clk, rst, en, a, b, p);
|
||||
|
||||
parameter M = 6;
|
||||
parameter N = 3;
|
||||
|
||||
input wire clk, rst, en;
|
||||
input wire [M-1:0] a;
|
||||
input wire [N-1:0] b;
|
||||
output reg [M+N-1:0] p;
|
||||
|
||||
reg [M-1:0] a_reg;
|
||||
reg [N-1:0] b_reg;
|
||||
|
||||
// unsigned M*N multiplier with
|
||||
// - input and output pipeline registers
|
||||
// - synchronous reset (active high)
|
||||
// - clock enable (active high)
|
||||
always @(posedge clk)
|
||||
begin
|
||||
if (rst) begin
|
||||
a_reg <= 0;
|
||||
b_reg <= 0;
|
||||
p <= 0;
|
||||
end
|
||||
else if (en) begin
|
||||
a_reg <= a;
|
||||
b_reg <= b;
|
||||
p <= a_reg * b_reg;
|
||||
end
|
||||
end
|
||||
|
||||
endmodule
|
33
tests/arch/gatemate/mul.ys
Normal file
33
tests/arch/gatemate/mul.ys
Normal file
|
@ -0,0 +1,33 @@
|
|||
read_verilog mul.v
|
||||
design -save read
|
||||
|
||||
hierarchy -top mul_plain
|
||||
proc
|
||||
equiv_opt -assert -map +/gatemate/cells_sim.v synth_gatemate -noiopad # equivalency check
|
||||
design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
|
||||
cd mul_plain # Constrain all select calls below inside the top module
|
||||
select -assert-count 1 t:CC_MULT
|
||||
select -assert-none t:CC_MULT %% t:* %D
|
||||
|
||||
design -load read
|
||||
hierarchy -top mul_signed_async
|
||||
proc
|
||||
equiv_opt -assert -async2sync -map +/gatemate/cells_sim.v synth_gatemate -noiopad # equivalency check
|
||||
design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
|
||||
cd mul_signed_async # Constrain all select calls below inside the top module
|
||||
select -assert-count 1 t:CC_MULT
|
||||
select -assert-count 1 t:CC_BUFG
|
||||
select -assert-count 28 t:CC_DFF
|
||||
select -assert-none t:CC_MULT t:CC_BUFG t:CC_DFF %% t:* %D
|
||||
|
||||
design -load read
|
||||
hierarchy -top mul_unsigned_sync
|
||||
proc
|
||||
equiv_opt -assert -async2sync -map +/gatemate/cells_sim.v synth_gatemate -noiopad # equivalency check
|
||||
design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
|
||||
cd mul_unsigned_sync # Constrain all select calls below inside the top module
|
||||
select -assert-count 1 t:CC_MULT
|
||||
select -assert-count 1 t:CC_BUFG
|
||||
select -assert-count 18 t:CC_LUT4
|
||||
select -assert-count 18 t:CC_DFF
|
||||
select -assert-none t:CC_MULT t:CC_BUFG t:CC_LUT4 t:CC_DFF %% t:* %D
|
20
tests/arch/gatemate/mux.ys
Normal file
20
tests/arch/gatemate/mux.ys
Normal file
|
@ -0,0 +1,20 @@
|
|||
read_verilog ../common/mux.v
|
||||
design -save read
|
||||
|
||||
design -load read
|
||||
hierarchy -top mux4
|
||||
proc
|
||||
equiv_opt -assert -map +/gatemate/cells_sim.v synth_gatemate -noiopad # equivalency check
|
||||
design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
|
||||
cd mux4 # Constrain all select calls below inside the top module
|
||||
select -assert-count 1 t:CC_MX4
|
||||
select -assert-none t:CC_MX4 %% t:* %D
|
||||
|
||||
design -load read
|
||||
hierarchy -top mux8
|
||||
proc
|
||||
equiv_opt -assert -map +/gatemate/cells_sim.v synth_gatemate -noiopad # equivalency check
|
||||
design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
|
||||
cd mux8 # Constrain all select calls below inside the top module
|
||||
select -assert-count 1 t:CC_MX8
|
||||
select -assert-none t:CC_MX8 %% t:* %D
|
4
tests/arch/gatemate/run-test.sh
Executable file
4
tests/arch/gatemate/run-test.sh
Executable file
|
@ -0,0 +1,4 @@
|
|||
#!/usr/bin/env bash
|
||||
set -eu
|
||||
source ../../gen-tests-makefile.sh
|
||||
run_tests --yosys-scripts --bash --yosys-args "-w 'Yosys has only limited support for tri-state logic at the moment.'"
|
10
tests/arch/gatemate/shifter.ys
Normal file
10
tests/arch/gatemate/shifter.ys
Normal file
|
@ -0,0 +1,10 @@
|
|||
read_verilog ../common/shifter.v
|
||||
hierarchy -top top
|
||||
proc
|
||||
flatten
|
||||
equiv_opt -assert -async2sync -map +/gatemate/cells_sim.v synth_gatemate -noiopad # equivalency check
|
||||
design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
|
||||
cd top # Constrain all select calls below inside the top module
|
||||
select -assert-count 1 t:CC_BUFG
|
||||
select -assert-count 8 t:CC_DFF
|
||||
select -assert-none t:CC_BUFG t:CC_DFF %% t:* %D
|
13
tests/arch/gatemate/tribuf.ys
Normal file
13
tests/arch/gatemate/tribuf.ys
Normal file
|
@ -0,0 +1,13 @@
|
|||
read_verilog ../common/tribuf.v
|
||||
hierarchy -top tristate
|
||||
proc
|
||||
tribuf
|
||||
flatten
|
||||
synth
|
||||
equiv_opt -assert -map +/gatemate/cells_sim.v -map +/simcells.v synth_gatemate # equivalency check
|
||||
design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
|
||||
cd tristate # Constrain all select calls below inside the top module
|
||||
select -assert-count 2 t:CC_IBUF
|
||||
select -assert-count 1 t:CC_LUT1
|
||||
select -assert-count 1 t:CC_TOBUF
|
||||
select -assert-none t:CC_IBUF t:CC_LUT1 t:CC_TOBUF %% t:* %D
|
Loading…
Add table
Add a link
Reference in a new issue