mirror of
https://github.com/YosysHQ/yosys
synced 2025-04-23 00:55:32 +00:00
iopadmap: Refactor and fix tristate buffer mapping. (#1527)
The previous code for rerouting wires when inserting tristate buffers was overcomplicated and didn't handle all cases correctly (in particular, only cell connections were rewired — internal connections were not).
This commit is contained in:
parent
10014e2643
commit
2abe38e73e
2 changed files with 196 additions and 146 deletions
99
tests/techmap/iopadmap.ys
Normal file
99
tests/techmap/iopadmap.ys
Normal file
|
@ -0,0 +1,99 @@
|
|||
read_verilog << EOT
|
||||
module ibuf ((* iopad_external_pin *) input i, output o); endmodule
|
||||
module obuf (input i, (* iopad_external_pin *) output o); endmodule
|
||||
module obuft (input i, input oe, (* iopad_external_pin *) output o); endmodule
|
||||
module iobuf (input i, input oe, output o, (* iopad_external_pin *) inout io); endmodule
|
||||
|
||||
module a(input i, output o);
|
||||
assign o = i;
|
||||
endmodule
|
||||
|
||||
module b(input i, output o);
|
||||
assign o = i;
|
||||
ibuf b (.i(i), .o(o));
|
||||
endmodule
|
||||
|
||||
module c(input i, output o);
|
||||
obuf b (.i(i), .o(o));
|
||||
endmodule
|
||||
|
||||
module d(input i, oe, output o, o2, o3);
|
||||
assign o = oe ? i : 1'bz;
|
||||
assign o2 = o;
|
||||
assign o3 = ~o;
|
||||
endmodule
|
||||
|
||||
module e(input i, oe, inout io, output o2, o3);
|
||||
assign io = oe ? i : 1'bz;
|
||||
assign o2 = io;
|
||||
assign o3 = ~io;
|
||||
endmodule
|
||||
EOT
|
||||
|
||||
opt_clean
|
||||
tribuf
|
||||
simplemap
|
||||
iopadmap -bits -inpad ibuf o:i -outpad obuf i:o -toutpad obuft oe:i:o -tinoutpad iobuf oe:o:i:io
|
||||
opt_clean
|
||||
|
||||
select -assert-count 1 a/t:ibuf
|
||||
select -assert-count 1 a/t:obuf
|
||||
select -set ib w:i %a %co a/t:ibuf %i
|
||||
select -set ob w:o %a %ci a/t:obuf %i
|
||||
select -assert-count 1 @ib
|
||||
select -assert-count 1 @ob
|
||||
select -assert-count 1 @ib %co %co @ob %i
|
||||
|
||||
select -assert-count 1 b/t:ibuf
|
||||
select -assert-count 1 b/t:obuf
|
||||
select -set ib w:i %a %co b/t:ibuf %i
|
||||
select -set ob w:o %a %ci b/t:obuf %i
|
||||
select -assert-count 1 @ib
|
||||
select -assert-count 1 @ob
|
||||
select -assert-count 1 @ib %co %co @ob %i
|
||||
|
||||
select -assert-count 1 c/t:ibuf
|
||||
select -assert-count 1 c/t:obuf
|
||||
select -set ib w:i %a %co c/t:ibuf %i
|
||||
select -set ob w:o %a %ci c/t:obuf %i
|
||||
select -assert-count 1 @ib
|
||||
select -assert-count 1 @ob
|
||||
select -assert-count 1 @ib %co %co @ob %i
|
||||
|
||||
select -assert-count 2 d/t:ibuf
|
||||
select -assert-count 2 d/t:obuf
|
||||
select -assert-count 1 d/t:obuft
|
||||
select -set ib w:i %a %co d/t:ibuf %i
|
||||
select -set oeb w:oe %a %co d/t:ibuf %i
|
||||
select -set ob w:o %a %ci d/t:obuft %i
|
||||
select -set o2b w:o2 %a %ci d/t:obuf %i
|
||||
select -set o3b w:o3 %a %ci d/t:obuf %i
|
||||
select -assert-count 1 @ib
|
||||
select -assert-count 1 @oeb
|
||||
select -assert-count 1 @ob
|
||||
select -assert-count 1 @o2b
|
||||
select -assert-count 1 @o3b
|
||||
select -assert-count 1 @ib %co %co @ob %i
|
||||
select -assert-count 1 @oeb %co %co @ob %i
|
||||
select -assert-count 1 @ib %co %co @o2b %i
|
||||
select -assert-count 1 @ib %co %co t:$_NOT_ %i
|
||||
select -assert-count 1 @o3b %ci %ci t:$_NOT_ %i
|
||||
|
||||
select -assert-count 2 e/t:ibuf
|
||||
select -assert-count 2 e/t:obuf
|
||||
select -assert-count 1 e/t:iobuf
|
||||
select -set ib w:i %a %co e/t:ibuf %i
|
||||
select -set oeb w:oe %a %co e/t:ibuf %i
|
||||
select -set iob w:io %a %ci e/t:iobuf %i
|
||||
select -set o2b w:o2 %a %ci e/t:obuf %i
|
||||
select -set o3b w:o3 %a %ci e/t:obuf %i
|
||||
select -assert-count 1 @ib
|
||||
select -assert-count 1 @oeb
|
||||
select -assert-count 1 @iob
|
||||
select -assert-count 1 @o2b
|
||||
select -assert-count 1 @o3b
|
||||
select -assert-count 1 @ib %co %co @iob %i
|
||||
select -assert-count 1 @oeb %co %co @iob %i
|
||||
select -assert-count 1 @iob %co %co @o2b %i
|
||||
select -assert-count 1 @iob %co %co t:$_NOT_ %i
|
||||
select -assert-count 1 @o3b %ci %ci t:$_NOT_ %i
|
Loading…
Add table
Add a link
Reference in a new issue