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…

智能体之斯坦福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.概述 论文提出了一种多个智能体进行协同,进而模拟可信的人…

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.学习感悟与思考…

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

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

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卷积神经网络人脸识别公寓人员进出管理系统

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

C++ 数据结构算法 学习笔记(32) -五大排序算法

C 数据结构算法 学习笔记(32) -五大排序算法 选择算法 如下若有多个女生的身高需要做排序: 常规思维: 第一步先找出所有候选美女中身高最高的,与最后一个数交换 第二步再找出除最后一位美女外其它美女中的最高者,与倒数第二个美女交换位置 再找出除最…

k8s-pod详解

一、Pod基本概念: 1.pod介绍: Pod是kubernetes中最小的资源管理组件,Pod也是最小化运行容器化应用的资源对象。一个Pod代表着集群中运行的一个进程。kubernetes中其他大多数组件都是围绕着Pod来进行支撑和扩展Pod功能的,例如&am…

电赛经验分享——赛前准备

⏩ 大家好哇!我是小光,想要成为系统架构师的嵌入式爱好者。 ⏩在之前的电赛中取得了省一的成绩,本文对电赛比赛前需要准备什么做一个经验分享。 ⏩感谢你的阅读,不对的地方欢迎指正。 加入小光嵌入式交流群(qq群号&…

在线人才测评在企业招聘和大学生求职中的应用场景

每年的春招秋招,都是毕业生们忙着找工作的季节,相比社招来说,春招秋招是每个毕业生务必重视的机会,大厂名企毕竟名额有限,如果找到自己心仪的职业岗位,作为毕业生就必须提前准备,深入了解招聘的…

五管OTA输入极性快速判断

做CMFB还有负反馈的时候曾经在判断输入输出极性上吃了大亏,直接做实验波形正确就是输入正端,全差分就不用考虑这么多了 和弯折,形状类似7,相同方向输入正端,相反的就是输入负端,输出也是和输入负端一个方向…

【NLP】人机对话

概念 机器翻译就是用计算机把一种语言翻译成另外一种语言的技术 机器翻译的产生与发展 17 世纪,笛卡尔与莱布尼茨试图用统一的数字代码来编写词典 1930 机器脑 1933 苏联发明家特洛阳斯基用机械方法将一种语言翻译为另一种语言 1946 ENIAC 诞生 1949 机器翻译问题…

香蕉成熟度检测YOLOV8NANO

香蕉成熟度检测YOLOV8NANO,采用YOLOV8NANO训练,得到PT模型,然后转换成ONNX模型,让OEPNCV调用,从而摆脱PYTORCH依赖,支持C。python,安卓开发。能检测六种香蕉类型freshripe freshunripe overripe…