mirror of https://github.com/YosysHQ/yosys.git
109 lines
2.5 KiB
Plaintext
109 lines
2.5 KiB
Plaintext
read_verilog <<EOT
|
|
(* techmap_celltype = "$_DFF_P_" *)
|
|
module ffmap(...);
|
|
input D;
|
|
input C;
|
|
output Q;
|
|
parameter [0:0] _TECHMAP_WIREINIT_Q_ = 1'bx;
|
|
|
|
ffbb #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_(.D(D), .Q(Q), .C(C));
|
|
|
|
wire _TECHMAP_FAIL_ = _TECHMAP_WIREINIT_Q_ === 1'b1;
|
|
|
|
wire _TECHMAP_REMOVEINIT_Q_ = 1'b1;
|
|
|
|
endmodule
|
|
EOT
|
|
design -stash map
|
|
|
|
read_verilog <<EOT
|
|
(* techmap_celltype = "$_DFF_P_" *)
|
|
module ffmap(...);
|
|
input D;
|
|
input C;
|
|
output Q;
|
|
parameter [0:0] _TECHMAP_WIREINIT_Q_ = 1'bx;
|
|
|
|
ffbb #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_(.D(D), .Q(Q), .C(C));
|
|
|
|
wire _TECHMAP_FAIL_ = _TECHMAP_WIREINIT_Q_ === 1'b1;
|
|
|
|
wire _TECHMAP_REMOVEINIT_Q_ = 1'b0;
|
|
|
|
endmodule
|
|
EOT
|
|
design -stash map_noremove
|
|
|
|
read_verilog <<EOT
|
|
module ffbb (...);
|
|
parameter [0:0] INIT = 1'bx;
|
|
input D, C;
|
|
output Q;
|
|
endmodule
|
|
|
|
module top(...);
|
|
input clk;
|
|
input d;
|
|
output reg q0 = 0;
|
|
output reg q1 = 1;
|
|
output reg qq0 = 0;
|
|
output reg qx;
|
|
|
|
always @(posedge clk) begin
|
|
q0 <= d;
|
|
q1 <= d;
|
|
qq0 <= q0;
|
|
qx <= d;
|
|
end
|
|
endmodule
|
|
EOT
|
|
|
|
design -save ref
|
|
|
|
hierarchy -auto-top
|
|
proc
|
|
simplemap
|
|
techmap -map %map
|
|
clean
|
|
# Make sure the parameter was used properly.
|
|
select -assert-count 3 top/t:ffbb
|
|
select -set ff0 top/w:q0 %ci t:ffbb %i
|
|
select -set ffq0 top/w:qq0 %ci t:ffbb %i
|
|
select -set ffx top/w:qx %ci t:ffbb %i
|
|
select -assert-count 1 @ff0
|
|
select -assert-count 1 @ffq0
|
|
select -assert-count 1 @ffx
|
|
select -assert-count 1 @ff0 r:INIT=1'b0 %i
|
|
select -assert-count 1 @ffq0 r:INIT=1'b0 %i
|
|
select -assert-count 1 @ffx r:INIT=1'bx %i
|
|
select -assert-count 0 top/w:q1 %ci t:ffbb %i
|
|
# Make sure the init values are dropped from the wires iff mapping was performed.
|
|
select -assert-count 0 top/w:q0 a:init %i
|
|
select -assert-count 0 top/w:qq0 a:init %i
|
|
select -assert-count 1 top/w:q1 a:init=1'b1 %i
|
|
select -assert-count 0 top/w:qx a:init %i
|
|
|
|
design -load ref
|
|
hierarchy -auto-top
|
|
proc
|
|
simplemap
|
|
techmap -map %map_noremove
|
|
clean
|
|
# Make sure the parameter was used properly.
|
|
select -assert-count 3 top/t:ffbb
|
|
select -set ff0 top/w:q0 %ci t:ffbb %i
|
|
select -set ffq0 top/w:qq0 %ci t:ffbb %i
|
|
select -set ffx top/w:qx %ci t:ffbb %i
|
|
select -assert-count 1 @ff0
|
|
select -assert-count 1 @ffq0
|
|
select -assert-count 1 @ffx
|
|
select -assert-count 1 @ff0 r:INIT=1'b0 %i
|
|
select -assert-count 1 @ffq0 r:INIT=1'b0 %i
|
|
select -assert-count 1 @ffx r:INIT=1'bx %i
|
|
select -assert-count 0 top/w:q1 %ci t:ffbb %i
|
|
# Make sure the init values are not dropped from the wires.
|
|
select -assert-count 1 top/w:q0 a:init=1'b0 %i
|
|
select -assert-count 1 top/w:qq0 a:init=1'b0 %i
|
|
select -assert-count 1 top/w:q1 a:init=1'b1 %i
|
|
select -assert-count 0 top/w:qx a:init %i
|