如何为Yosys创建自定义技术单元图

问题描述 投票:0回答:1

我有以下简单的Verilog设计(在test.v中:]

module digital (
  input a, b, c,
  output reg q
);
  wire ena = a & b;
  always @ (ena, c) begin
    if (ena)
      q <= c;
  end
endmodule

[模拟哪个简单的闩锁,其ena输入上带有门。我正在使用以下Yosys TCL脚本:

yosys -import
set name digital
set libfile my_tech.lib
read_liberty -lib $libfile
read_verilog test.v
hierarchy -check -top ${name}
procs; opt
memory; opt
fsm -norecode; opt -full
techmap; opt -full
dfflibmap -liberty $libfile
opt
abc -liberty $libfile \
    -script {+strash;ifraig;scorr;dc2;dretime;strash;&get,-n;&dch,-f;&nf,{D};&put}
hilomap -hicell TIEHIM Y -locell TIELOM Y
clean -purge
write_verilog ${name}_synth.v

即使DFF映射良好(我尝试了不同的设计),生成的Verilog文件也包含\$_DLATCH_P_单元的实例。

因此,我尝试遵循this comment中的说明,即编写自定义技术映射文件以将Yosys锁存器映射到技术库中的锁存器:

[1。使用从yosys命令help $dlatch+获得的模板,并查看the built-in Yosys techmap中的一些示例,我创建了我认为是映射文件的文件test_map.v,以使用库自身的[ C0]锁存单元:

TLATX1M

2。然后,我还在合成脚本的(* techmap_simplemap *) (* techmap_celltype = "$dlatch" *) module _library_latch (EN, D, Q); parameter WIDTH = 0; parameter EN_POLARITY = 1'b1; input EN; input [WIDTH-1:0] D; output reg [WIDTH-1:0] Q; genvar i; generate begin for (i = 0; i < WIDTH; i=i+1) begin:latch_bit TLATX1M _TECHMAP_REPLACE_ ( // TODO: support EN_POLARITY = 1'b0 .D(D[i]), .G(EN), .Q(Q[i]), .QN() ); end end endgenerate endmodule 行之后添加了techmap -map test_map.v行。

[不幸的是,没有成功:Yosys输出网表中仍然有一个techmap; opt -full实例。在Yosys日志输出中,我也找不到任何相关的警告/错误。

3。我还尝试将映射单元的模块名称(上面的代码中的\$_DLATCH_P_)和/或_library_latch注释更改为techmap_celltype,但这也无济于事。

我想念什么?

verilog yosys
1个回答
0
投票
test_map.v

...并且我的Yosys脚本中的module \$_DLATCH_N_ (E, D, Q); wire [1023:0] _TECHMAP_DO_ = "simplemap; opt"; input E, D; output Q; TLATNX1M _TECHMAP_REPLACE_ ( .D(D), .GN(E), .Q(Q), .QN() ); endmodule module \$_DLATCH_P_ (E, D, Q); wire [1023:0] _TECHMAP_DO_ = "simplemap; opt"; input E, D; output Q; TLATX1M _TECHMAP_REPLACE_ ( .D(D), .G(E), .Q(Q), .QN() ); endmodule 行已经正确,这里是供参考的整个文件:

techmap -map test_map.v

现在输出网表具有如下实例:

yosys -import
set name digital
set libfile my_tech.lib
read_liberty -lib $libfile
read_verilog test.v
hierarchy -check -top ${name}
procs; opt
memory; opt
fsm -norecode; opt -full
techmap; opt -full
techmap -map test_map.v
dfflibmap -liberty $libfile
opt
abc -liberty $libfile \
    -script {+strash;ifraig;scorr;dc2;dretime;strash;&get,-n;&dch,-f;&nf,{D};&put}
hilomap -hicell TIEHIM Y -locell TIELOM Y
clean -purge
write_verilog ${name}_synth.v
© www.soinside.com 2019 - 2024. All rights reserved.