Verilog实战学习到RiscV - 1 : Yosys 综合

Yosys 综合

实例

一般 FPGA IDE 的第一步都是RTL 综合(Synthesis)。之后就能看到数字电路图了。然后可以做RTL 级的仿真模拟。

直接上代码,这里我们看一个简单的加法器来学习。

module adder(input  [7:0] a,input  [7:0] b, input        ci, // carry inoutput [7:0] sum, output        co // carry out    
);wire   [8:0] tmp;  // 多一位是为了输出进位assign tmp = a + b + ci;  // 算上进位assign sum = tmp [7:0];assign co  = tmp [8];     // 输出进位
endmodule

如何综合

写一个yosys脚本:

read_verilog adder.v
hierarchy -check
proc; opt; memory; opt; fsm; opt
show -format dot -prefix ./adder_rtl
write_json out.json 

这个 .ys 文件是用于 yosys 工具的脚本,它指定了如何对 Verilog 设计文件进行综合。本脚本的作用是读取一个 Verilog 文件,并执行一系列综合步骤,最后生成一个 JSON 格式的输出文件以及一个 RTL (寄存器传输级) 图。以下是对脚本各部分的详细解释:

  1. 读取设计

    read_verilog adder.v
    
    • read_verilog 命令读取指定的 Verilog 文件 (adder.v) 并将其载入到 yosys 的设计数据库中。这个文件应该包含你要综合的硬件描述代码。
  2. 层次结构检查

    hierarchy -check
    
    • hierarchy 命令检查设计的模块层次结构,确保所有的模块引用都是一致的,并且所有的子模块都能找到。-check 选项会在检查过程中报告任何发现的问题。
  3. 高级综合步骤

    proc; opt; memory; opt; fsm; opt
    
    • 这一系列命令执行了多步优化和转换处理:
      • proc:处理进程,转换所有的进程 (always 块) 成为数据流图 (DFG)。
      • opt:优化设计,执行一系列常规优化步骤以简化和优化电路。
      • memory:处理和优化存储器 (RAM, ROM),将其转换成适当的实现。
      • opt:再一次优化设计,以利用前一步的转换可能带来的新优化机会。
      • fsm:处理有限状态机 (FSM),将 FSM 转换成最优实现。
      • opt:最后再进行一次优化,确保所有前面的转换和优化都得到充分利用。
  4. 展示设计

    show -format dot -prefix ./adder_rtl
    
    • show 命令生成设计的图形表示。-format dot 选项指定输出格式为 DOT 格式 (Graphviz 使用的图形描述语言),-prefix ./adder_rtl 选项指定生成的文件前缀为 ./adder_rtl。最终会生成一个 ./adder_rtl.dot 文件,该文件可以用 Graphviz 工具进行可视化。
  5. 生成 JSON 输出

    write_json out.json
    
    • write_json 命令将当前设计写入 JSON 格式文件 out.json。这个文件包含了综合后的设计信息,可以用于其他工具进行进一步处理或分析。

运行脚本:

yosys ./synthesis_rtl.ys

这时我们可以看到out.jsonadder_rtl.dot 文件。

查看 RTL 原理图

.dot 文件如何看呢?运行如下命令即可。我用的是Ubuntu22.04, dot 应该已经默认安装了。

dot -Tpng adder_rtl.dot > adder_rtl_dot.png

Adder RTL 原理图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/15275.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java延时队列取消未支付的订单 之 重启服务任务丢失

一、定义延迟任务类 package com.activity.domain;import java.util.concurrent.Delayed; import java.util.concurrent.TimeUnit;/*** 延迟任务类*/ public class DelayedCancellation implements Delayed {private String order;private final long delayTime; // 延迟时间p…

链表类型的无界阻塞队列-LinkedBlockingQueue

一:LinkedBlockingQueue介绍 1:LinkedBlockingQueue是一个基于链表实现的阻塞队列,默认情况下,该阻塞队列的大小为Integer.MAX_VALUE,由于这个数值特别大,所以 LinkedBlockingQueue 也被称作无界队列,代表它几乎没有界限,队列可以随着元素的添加而动态增长,但是如果没…

智能体之斯坦福AI小镇(Generative Agents: Interactive Simulacra of Human Behavior)

相关代码地址见文末 论文地址:Generative Agents: Interactive Simulacra of Human Behavior | Proceedings of the 36th Annual ACM Symposium on User Interface Software and Technology 1.概述 论文提出了一种多个智能体进行协同,进而模拟可信的人…

Python燃气轮机汽车钢棒整流电路控制图统计模型过程潜力分析

🎯要点 🎯活塞模拟器:🖊控制图过程能力分析:Cp 对过程提供在规格上限和下限内的输出的潜力度量,Cpk中心过程能力指数,Cpl估计仅包含规格下限过程能力,Cpu估计仅包含规格上限过程能力…

Linux系统下Mysql忘记密码怎么解决

一、对Mysql配置文件进行设置 1、找到/etc/mysql/my.cnf路径下,用Vi命令编辑my.cnf配置文件,命令如下: # 以管理员身份登录 sudo su # 输入管理员密码 # 登录成功后,找到Mysql的配置文件-->Mysql配置文件默认在此 cd /etc/my…

善用KEGG数据库挖掘目的基因

有关KEGG的分析在很多已发表的论文中都十分常见,涉及到的方向也很广泛,比如:代谢组、表观组、转录组等等。通常得到相关的基因集或者代谢物后,我们都希望能够快速了解它们的蛋白功能和涉及的调控机制,从而进一步锁定接…

NetSuite Intercompany COGS科目设置问题

在22年底的NetSuite多公司功能串讲中,有一个题目是Intercompany COGS科目的设置问题。近期在项目上这个问题被密集讨论。为了方便分享,所以在此摘出来独立成文。有兴趣的同学也可以翻看之前的视频。 NetSuite知识会 第8谈 多公司功能串讲 NetSuite Inter…

图论(从数据结构的三要素出发)

文章目录 逻辑结构物理结构邻接矩阵定义性能分析性质存在的问题 邻接表定义性能分析存在的问题 十字链表(有向图)定义性能分析 邻接多重表(无向图)定义性能分析 数据的操作图的基本操作图的遍历广度优先遍历(BFS)算法思想和实现性能分析深度优先最小生成…

WORD、PPT技巧

WORD技巧 编辑设置 word标题导航窗口怎么调出word2016,缩小了页面,可是怎么是竖着的一页一页排列啊?以前不是好几页横排着的么?怎么设置,求救:在Word标题栏那一行找到“视图”,点击“显示比例…

20212416 2023-2024-2 《移动平台开发与实践》第5次作业

百度地图应用 1.实验内容2.实验过程2.1 Android Studio配置2.1. 创建一个Android项目2.2 在项目中本地集成BaiduMap SDK 2.2 编写代码2.2.1 配置AndroidManifest.xml文件2.2.2 编写UI界面布局文件2.2.3 编写主函数代码2.2.4 运行结果 3.学习中遇到的问题及解决4.学习感悟与思考…

向量数据库的使用

向量数据库 向量数据库是一种专门用于存储、管理和查询高维向量数据的数据库系统。随着人工智能和机器学习的广泛应用,向量数据库在处理非结构化数据(如文本、图像、音频和视频等)的任务中变得越来越重要。本文将介绍快速使用Chroma 安装 …

Pyqt5中获取按钮的值

使用Sender()函数 // An highlighted block class MyWindow(QWidget):def __init__(self):super(MyWindow, self).__init__()self.setui()# #def calculate(self):button self.sender()print("button:{}".format(button.text()))def setui(self):data [["7&…

Nginx将https重定向为http进行访问的配置(附Demo)

目录 前言1. Demo2. 彩蛋前言 对应nginx的基本知识推荐阅读: Nginx配置静态网页访问(图文界面)Nginx从入门到精通(全)java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)由于网站默认无配置https,但输入网址的时候浏览器默认带https,导致网页一直无法访问…

Spring的依赖注入

Date public class Student{public String name ;public String[] array ;public Grade grade;public List list;public Set set;public Map map;public Properties prop;//使用IOC默认使用无参构造器创建对象,没有无参构造器会报错 // public Student(Strin…

数据结构篇其三---链表分类和双向链表

​ 前言 数据结构篇其二实现了一个简单的单链表,链表的概念,单链表具体实现已经说明,如下: 单链表 事实上,前面的单链表本质上是无头单向不循环链表。此篇说明的双向链表可以说完全反过来了了。无论是之前的单链表还…

Java进阶学习笔记12——final、常量

final关键字: final是最终的意思。可以修饰类、方法、变量。 修饰类:该类就被称为最终类,特点是不能被继承了。 修饰方法:该方法是最终方法,特点是不能被重写了。 修饰变量:该变量只能被赋值一次。 有些…

智慧校园的建设思路

智慧校园建设的一个主要目的就是要打破学校内的信息孤岛,其核心是在人、流程和信息三个层面的全面整合。智慧校园应该能够为全校师生员工及校外用户提供统一的、一站式的服务渠道;能够将学校各种业务流程连接起来,实现各种应用系统的互联互通…

postgresql insert on conflict 不存在则插入,存在则更新

向一张表执行插入动作,如果插入的字段数据已存在,则执行更新操作,不存在则进行插入操作。 1、创建一张表 CREATE TABLE "user_info" ( "id" int2 NOT NULL, "name" varchar(20) COLLATE "pg_catalog&quo…

基于Tensorflow卷积神经网络人脸识别公寓人员进出管理系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 随着科技的快速发展和智能化水平的提高,公寓管理面临着越来越多的挑战。传统的公寓…

Go语言标准库之log和三方库zap

一、Log 1.1 logger基本使用 Go语言内置的log包实现了简单的日志服务。本包也提供了一个预定义的“标准”logger,可以通过调用函数Print系列(Print|Printf|Println)、Fatal系列(Fatal|Fatalf|Fatalln)、和Panic系列(Panic|Panicf|Panicln)来…