| read_verilog -icells <<EOT |
| module \$__XILINX_SHREG_ (input C, input D, input [31:0] L, input E, output Q, output SO); |
| parameter DEPTH = 1; |
| parameter [DEPTH-1:0] INIT = 0; |
| parameter CLKPOL = 1; |
| parameter ENPOL = 2; |
| |
| wire pos_clk = C == CLKPOL; |
| reg pos_en; |
| always @(E) |
| if (ENPOL == 2) pos_en = 1'b1; |
| else pos_en = (E == ENPOL[0]); |
| |
| reg [DEPTH-1:0] r; |
| always @(posedge pos_clk) |
| if (pos_en) |
| r <= {r[DEPTH-2:0], D}; |
| |
| assign Q = r[L]; |
| assign SO = r[DEPTH-1]; |
| endmodule |
| EOT |
| read_verilog +/xilinx/cells_sim.v |
| proc |
| design -save model |
| |
| test_pmgen -generate xilinx_srl.fixed |
| hierarchy -top pmtest_xilinx_srl_pm_fixed |
| flatten; opt_clean |
| |
| design -save gold |
| xilinx_srl -fixed |
| techmap -autoproc -map %model |
| design -stash gate |
| |
| design -copy-from gold -as gold pmtest_xilinx_srl_pm_fixed |
| design -copy-from gate -as gate pmtest_xilinx_srl_pm_fixed |
| dff2dffe -unmap # sat does not support flops-with-enable yet |
| miter -equiv -flatten -make_assert gold gate miter |
| sat -set-init-zero -seq 5 -verify -prove-asserts miter |
| |
| design -load model |
| |
| test_pmgen -generate xilinx_srl.variable |
| hierarchy -top pmtest_xilinx_srl_pm_variable |
| flatten; opt_clean |
| |
| design -save gold |
| xilinx_srl -variable |
| techmap -autoproc -map %model |
| design -stash gate |
| |
| design -copy-from gold -as gold pmtest_xilinx_srl_pm_variable |
| design -copy-from gate -as gate pmtest_xilinx_srl_pm_variable |
| dff2dffe -unmap # sat does not support flops-with-enable yet |
| miter -equiv -flatten -make_assert gold gate miter |
| sat -set-init-zero -seq 5 -verify -prove-asserts miter |