Я пытаюсь присвоить начальное значение FF при сбросе.Начальное значение является входом в схему.В библиотеку ячеек я добавил следующую FF:
cell (DFF){
area : 0;
ff(IQ,IQN){
next_state : "D";
clocked_on : "CLK";
clear : "I'*RST";
preset : "I*RST";
clear_preset_var1 : L;
}
pin(CLK){
direction : input;
capacitance : 0;
clock : true;
}
pin(RST){
direction : input;
capacitance : 0;
}
pin(D){
direction : input;
capacitance : 0;
timing() {
related_pin : "CLK";
}
}
pin(I){
direction : input;
capacitance : 0;
}
pin(Q){
direction : output;
function : "IQ";
timing() {
related_pin : "CLK";
timing_type : falling_edge;
}
timing() {
related_pin : "RST";
timing_type : clear;
timing_sense : positive_unate;
}
timing() {
related_pin : "I";
timing_type : clear;
timing_sense : negative_unate;
}
timing() {
related_pin : "RST";
timing_type : preset;
timing_sense : positive_unate;
}
timing() {
related_pin : "I";
timing_type : preset;
timing_sense : positive_unate;
}
}
}
Часть кода Verilog, которую я пытаюсь синтезировать с этой FF, равна
always@(posedge clk or posedge rst)
if(rst) begin
e_reg <= e_input;
end
else begin
e_reg <= e_shift;
end
Однако, когда я запускаюсинтез, он использует один из встроенных FF из библиотеки Yosys ($_DFFSR_PPP_
), игнорируя тот из пользовательской библиотеки ячеек.Если я включу один из FF набора-сброса (SR) в определяемую пользователем библиотеку, как показано ниже, то, что подхватывает Yosys.
cell(DFF) {
area: 0;
ff("IQ", "IQN") { clocked_on: CLK;
next_state: D;
preset: I;
clear: RST; }
pin(CLK) { direction: input;
clock: true; }
pin(D) { direction: input; }
pin(Q) { direction: output;
function: "IQ"; }
pin(I) { direction: input; }
pin(RST) { direction: input; }
}
Предыдущий работает с Synopsys DC, но не с Yosys.Кажется, что уравнения в clear
или preset
не воспринимаются Yosys.
Есть ли способ заставить его работать?Я что-то пропустил?