Я пытаюсь смоделировать verilog netlist с модулями, содержащими экземпляры из PDK стандартной библиотеки ячеек CMOS. Вот пример одного модуля:
module seq_edge_rise_det (d_out, d_clk, d_in);
output d_out;
input d_clk, d_in;
AD2D1 I10 ( .Z(d_out), .A2(I28QN), .A1(I57Q));
FD1D1 I57 ( .CK(d_clk), .Q(I57Q), .D(d_in), .QN(I57QN));
FD1D1 I28 ( .CK(d_clk), .Q(I28Q), .D(I57Q), .QN(I28QN));
endmodule
Определение стандартных экземпляров ячейки взято из файла Verilog, предоставленного основателем dry, и содержит определения / переменные времени установки и удержания. Вот пример:
`timescale 1ns/1ps
`celldefine
module FD1D1 (Q, QN, D, CK);
output Q, QN;
input D, CK;
`protect
reg NOTIFIER;
supply1 xSN,xRN;
buf I0 (clk, CK);
udp_fd4 I1 (n0, D, clk, xRN, xSN, NOTIFIER);
and I2 (rnsn, xRN, xSN);
buf I3 (Q, n0);
not I4 (QN, n0);
specify
specparam
tplh$CK$Q = 1.0,
tphl$CK$Q = 1.0,
tplh$CK$QN = 1.0,
tphl$CK$QN = 1.0,
tsetup$D$CK = 1.0,
thold$D$CK = 0.5,
tminpwl$CK = 1.0,
tminpwh$CK = 1.0;
if (rnsn)
(posedge CK *> (Q +: D)) = (tplh$CK$Q, tphl$CK$Q);
if (rnsn)
(posedge CK *> (QN -: D)) = (tplh$CK$QN, tphl$CK$QN);
$setuphold(posedge CK &&& (rnsn == 1), posedge D, tsetup$D$CK, thold$D$CK, NOTIFIER);
$setuphold(posedge CK &&& (rnsn == 1), negedge D, tsetup$D$CK, thold$D$CK, NOTIFIER);
$width(negedge CK &&& (rnsn == 1), tminpwl$CK, 0, NOTIFIER);
$width(posedge CK &&& (rnsn == 1), tminpwh$CK, 0, NOTIFIER);
endspecify
`endprotect
endmodule
`endcelldefine
При запуске симуляции с Questa (modelsim) я сталкиваюсь со следующими ошибками:
Ошибка: .... $ hold (posedge CK &&& (rnsn == 1): 47 нс, позиция D: 47 нс, 500 пс); # Время: 47 нс. Итерация: 1 Экземпляр: / seq_main / xI_seq_adc_sram_xfer / xI_seq_control / I6 / I4
Поскольку я не заинтересован в проверке синхронизации модуля, а просто в функциональной симуляции, я хотел бы чтобы Modelsim игнорировал эти ошибки, но сохранял функциональность модуля. Как мне это сделать? В настоящее время из-за этих ошибок выходные данные триггеров получают состояние «X», которое не позволяет мне проверить модуль.
В качестве альтернативы, чтобы запустить симуляцию, PDK также содержит Liberty (.lib) файл с временной информацией о стандартных ячейках. Как можно легко конвертировать .lib файл в .sdf для подачи в Modelsim?