我试图在复位时为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。似乎clear
或preset
中的方程式并未被Yosys接受。
有什么办法可以使它起作用?我想念什么吗?
答案 0 :(得分:1)
Yosys的dfflibmap
不支持在Liberty文件中进行清晰或预设的表达式。
但是,您可以将techmap
命令与定制的映射规则一起使用,以将$_DFFSR_PPP_
映射到您自己的触发器上-类似于我们在Yosys中进行FPGA技术映射的方式。