我有以下简单的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
,但这也无济于事。
我想念什么?
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