系列文章目录
目录
前言
今天更新Yosys的进阶操作,包括如何使用xdot查看电路图及对数字电路逻辑进行优化。完整项目查看于Yosys_0.2。
一、使用xdot,以图像形式查看电路逻辑
&emsp本次的top.v
文件为一个二位选择器,其Verilog代码为:
module top(clk, a, b, x, y, sel, z);
input clk;
input [7:0] a, b, x, y;
input sel;
output reg [15:0] z;
always @(posedge clk) begin
if (sel == 1'b0)
z = a * b;
else
z = x * y;
end
endmodule
电路在高电平时输出,选择器为0时输出a*b
,为1时输出x*y
由于yosys工具没有自带的图形显示包,因此需要安装一下。使用以下指令进行安装。
sudo dnf install python3-gobject
如果你有anaconda,建议使用anaconda在虚拟环境下安装
conda activate yosys_env
conda install -c conda-forge pygobject
conda install xdot
之后进入yosys工具后使用read_verilog
指令读取描述文件,再使用show
指令查看可视化结果。
yosys
read_verilog top.v
proc
show
可以看到$1mux
为一个两位的多路选择器。
二、使用Yosys进行逻辑优化
使用的Technology Library: NangateOpenCellLibrary_typical.lib,下载方式见上一篇从零开始学习VLSI设计(一)Yosys工具概述的<3.开始逻辑综合部分>。
1.opt指令逻辑优化
使用以下tcl语句对top.v
文件进行器件及逻辑映射,注意在映射前使用opt
操作进行优化
read_verilog top.v
# translate processes to netlists
proc
# remove unused cells and wires
clean
# show the generic netlist
show
# perform optimization
opt
# show the generic netlist
show
# mapping to internal cell library
techmap
# mapping flip-flops to toy.lib
dfflibmap -liberty NangateOpenCellLibrary_typical.lib
# mapping logic to toy.lib
abc -liberty NangateOpenCellLibrary_typical.lib
# remove unused cells and wires
clean
优化后的电路图变为:
可以看到移除了一个没有使用的单元和4根没用的导线。
2.share指令资源共享
资源共享是一种使用相同硬件资源进行多次计算的技术,可以极大程度的减少芯片的空间占用。简单RTL例子如下:
- If s=0, assign Z= A*B;
- If s=1, assign Z= X*Y;
一个最直接的做法是直接使用两个Mul乘法器实现AB与XY,但是如果使用资源共享,就可以减少一个乘法器的使用。
具体指令如下:
# resource sharing optimization
share -aggressive
-aggressive
表示使用较为激进的优化策略。之后使用TCL指令开始正常映射:
techmap
# mapping flip-flops to toy.lib
dfflibmap -liberty NangateOpenCellLibrary_typical.lib
# mapping logic to toy.lib
abc -liberty NangateOpenCellLibrary_typical.lib
# remove unused cells and wires
clean
# report design statistics
stat -liberty NangateOpenCellLibrary_typical.lib
# Write the current design to a Verilog file
write_verilog -noattr -noexpr -nohex -nodec netlist_final_opt.v
对比不使用资源共享的情况,可以看到有将近一半的面积节省
可以发现,使用的各个门级器件均有一定程度的减少。
但是需要注意的是,这种优化的本质是一种trade-off,使用show指令查看共享后的电路图:
虽然资源共享减少了硬件占用,但也可能带来一些额外的选择器逻辑(mux),稍微增加了信号的延迟。
总结
这次算是对Yosys工具的补充应用,主要是介绍了更切合工程项的优化操作。如有问题欢迎评论或是私信讨论。
参考文献
【1】Enhancing VLSI Designs with Logic Optimization Using Yosys
【2】集成电路设计开源EDA软件yosys详解1:工具安装