Yosys:可变的初始值以在重置时触发

时间:2018-10-25 22:14:41

标签: yosys

我试图在复位时为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;
        }
    }
}

我要与此FF合成的Verilog代码部分是

    always@(posedge clk or posedge rst)
    if(rst) begin 
        e_reg <= e_input;
    end
    else begin 
        e_reg <= e_shift;
    end 

但是,当我运行综合时,它使用Yosys库($_DFFSR_PPP_)中的内置FF之一,而忽略了用户定义的单元库中的内置FF。如果我在用户定义的库中包括一个置位重置(SR)FF,如下所示,则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。似乎clearpreset中的方程式并未被Yosys接受。

有什么办法可以使它起作用?我想念什么吗?

1 个答案:

答案 0 :(得分:1)

Yosys的dfflibmap不支持在Liberty文件中进行清晰或预设的表达式。

但是,您可以将techmap命令与定制的映射规则一起使用,以将$_DFFSR_PPP_映射到您自己的触发器上-类似于我们在Yosys中进行FPGA技术映射的方式。