Yosys: начальное значение переменной для триггера при перезагрузке - PullRequest
0 голосов
/ 26 октября 2018

Я пытаюсь присвоить начальное значение 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.

Есть ли способ заставить его работать?Я что-то пропустил?

1 Ответ

0 голосов
/ 30 октября 2018

Yosys 'dfflibmap не поддерживает выражения, такие как это, для очистки или предустановки в файле Liberty.

Однако вы можете использовать команду techmap с настраиваемым правилом отображения, чтобы сопоставить $_DFFSR_PPP_ с вашим собственным триггером - аналогично тому, как мы выполняем техкарту FPGA в Yosys.

...