首页 > 其他分享 >从零开始学习VLSI设计(二)Yosys工具进阶

从零开始学习VLSI设计(二)Yosys工具进阶

时间:2024-10-20 09:21:15浏览次数:8  
标签:lib NangateOpenCellLibrary 进阶 VLSI show 指令 使用 Yosys

系列文章目录

从零开始学习VLSI设计(一)Yosys工具概述


目录


前言

  今天更新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:工具安装

标签:lib,NangateOpenCellLibrary,进阶,VLSI,show,指令,使用,Yosys
From: https://blog.csdn.net/iverss/article/details/142997854

相关文章

  • 【进阶OpenCV】 (20) --疲劳检测
    文章目录疲劳检测一、面部识别二、主循环1.计算眼睛纵横比2.判断疲劳状态3.绘制双眼凸包4.显示眼睛闭合程度值5.显示图像三、释放资源四、完整代码展示总结疲劳检测使用OpenCV实现疲劳检测通常依赖于面部特征分析,特别是眼睛的状态(如眼睛开合程度)以及闭眼的时......
  • Java 实战虚拟机 进阶 (一 万字)
    实战Java虚拟机-高级篇什么是GraalVMGraalVM是Oracle官方推出的一款**高性能JDK,**使用它享受比OpenJDK或者OracleJDK更好的性能。GraalVM的官方网址:https://www.graalvm.org/官方标语:Buildfaster,smaller,leanerapplications.更低的CPU、内存使用率......
  • JavaScript从零学起 —— 数据类型(进阶篇3)
    说明:此文章用作个人学习记录,若有任何问题或建议欢迎大家在评论区讨论文章目录前言对象(Object)1.定义2.对象创建方式2.1使用对象字面量(ObjectLiteral)2.2使用Object()构造函数2.3使用自定义构造函数(ConstructorFunction)2.4工厂函数(FactoryFunction)2.5类(Cl......
  • 推断二叉树(进阶)
    Description给出一棵二叉树的中序遍历和每个节点的父节点,求这棵二叉树的先序和后序遍历。Input输入第一行为一个正整数n表示二叉树的节点数目,节点编号从1到n,其中1为根节点。第2行有n个数字,第i个数字表示i的父亲节点。(1的父亲节点为0,表示无)第3行为中......
  • 2024年网络安全进阶手册:黑客技术自学路线
    ......
  • 卡尔曼讲解与各种典型进阶MATLAB编程(专栏目录,持续更新……)
    专栏链接:https://blog.csdn.net/callmeup/category_12574912.html文章目录专栏介绍重点文章卡尔曼滤波的原理卡尔曼滤波的例程进阶MATLAB编程后续更新专栏介绍本专栏旨在深入探讨卡尔曼滤波及其在各类应用中的实现,尤其是通过MATLAB编程进行的典型案例分析。卡尔曼......
  • 昇思MindSpore进阶教程--故障恢复
    大家好,我是刘明,明志科技创始人,华为昇思MindSpore布道师。技术上主攻前端开发、鸿蒙开发和AI算法研究。努力为大家带来持续的技术分享,如果你也喜欢我的文章,就点个关注吧概述模型训练过程中,可能会遇到故障。重新启动训练,各种资源的开销是巨大的。为此MindSpore提供了故障......
  • Winform控件基础与进阶----DataGridView
    Winform控件基础之封装一个通用的DataGridView操作类1、创建Winform项目2、创建公共控件操作文件夹3、主界面1、控件布局2、提取通用方法3、静态方法类实现4、其他工具类实现1、JsonHelper工具类实现2、TxtOperateHelper工具类实现5、数据模型实现1、创建表结构模型2......
  • JavaScript从零学起 —— 数据类型(进阶篇2)
    说明:此文章用作个人学习记录,若有任何问题或建议欢迎大家在评论区讨论文章目录前言一、Boolean(布尔值)1.定义2.实现3.用法示例4.常见问题与解决方法二、Undefined(未定义)1.定义2.实现3.常见问题与解决方法三、Null(空值)1.定义2.实现3.用法示例4.常见问题与......
  • 【进阶OpenCV】 (17)-- Dlib库 --实现人脸检测
    文章目录Dlib库一、Dlib库安装二、实现人脸检测1.生成人脸检测器2.检测人脸3.显示人脸总结Dlib库Dlib提供了丰富的图像处理和计算机视觉工具,如面部特征检测、物体检测、图像变换等,这些工具使得开发者能够轻松地进行各种图像处理任务。一、Dlib库安装pipinst......