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

Yosys 综合

实例

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

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

module adder(
  input  [7:0] a,
  input  [7:0] b, 
  input        ci, // carry in

  output [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 原理图

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java | Leetcode Java题解之第103题二叉树的锯齿形层序遍历

题目&#xff1a; 题解&#xff1a; class Solution {public List<List<Integer>> zigzagLevelOrder(TreeNode root) {List<List<Integer>> ans new LinkedList<List<Integer>>();if (root null) {return ans;}Queue<TreeNode> n…

el-tabs中的下拉框被覆盖解决方法

解决方法&#xff1a; ::v-deep .el-tabs__content{// overflow:hidden 会导致 分页下拉框超出部分会被.el-tabs__content隐藏overflow: visible; }

基础—SQL—DML(数据操作语言)修改和删除

一、引言 接着上次博客&#xff0c;这次讲解DML语句中的修改数据和删除数据操作。 二、DML—修改数据 UPDATE 表名 SET 字段名1值1 ,字段名2值2 , ...[ WHERE 条件]; 注意&#xff1a;修改语句的条件可以有&#xff0c;也可以没有。如果没有条件&#xff0c;则会修改整张表的…

MySQL 解决登录报错 - 错误1130- Host xxx is not allowed to connect to this server

1、原因 没有给远程连接权限 2、解决 2.1 打开命令行提示符界面输入命令cd C:\Program Files\MySQL\MySQL Server 8.0\bin\ 2.2 连接 MySQL 数据库 输入命令 mysql -u root -p &#xff0c;然后输入密码 回车登录 2.3 查看当前表中的数据库 show databases;查看当前使用的数…

每天写两道(二)LRU缓存、数组中最大的第k个元素

146.LRU 缓存 . - 力扣&#xff08;LeetCode&#xff09; 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存…

在Anki中按某个字段满足的条件查找笔记

Anki中可以使用deck、tag、card、note、is、prop、added、rated、nid、cid等关键字按照牌组、标签、卡片、卡片类型、状态、属性、添加时间、回答时间、对象id等对卡片进行筛选&#xff0c;但是没有提供按卡片字段进行筛选的关键字&#xff0c;那么&#xff0c;怎么按卡片字段是…

C++ (week5):Linux系统编程3:线程

文章目录 三、线程1.线程的基本概念①线程相关概念②我的理解 2.线程的基本操作 (API)(1)获取线程的标识&#xff1a;pthread_self(2)创建线程&#xff1a;pthread_create()(3)终止线程①pthread_exit()&#xff1a;当前线程终止&#xff0c;子线程主动退出②pthread_cancel()&…

安卓ADB通过WIFI无线连接手机[通过无线安装APK]

安卓ADB通过无线连接手机 本文摘录于&#xff1a;https://www.cnblogs.com/zhuxibo/p/14261117.html只是做学习备份之用&#xff0c;绝无抄袭之意&#xff0c;有疑惑请联系本人&#xff01; 别人给的操作确实可行,我这里实操记录如下: AdministratorpiaoranPC MINGW64 /e/Wor…

大模型部署框架 FastLLM 简要解析

0x0. 前言 本文主要是对FastLLM做了一个简要介绍&#xff0c;展示了一下FastLLM的部署效果。然后以chatglm-6b为例&#xff0c;对FastLLM模型导出的流程进行了解析&#xff0c;接着解析了chatglm-6b模型部分的核心实现。最后还对FastLLM涉及到的优化技巧进行了简单的介绍。 0…

Java 阻塞队列与生产者消费者模型

一、阻塞队列 阻塞队列是⼀种特殊的队列&#xff0c;其也遵守队列 "先进先出" 的原则&#xff1b; 阻塞队列是⼀种线程安全的数据结构&#xff0c;并且具有以下特性&#xff1a; 当队列满的时候&#xff0c;继续入队列就会阻塞&#xff0c;直到有其他线程从队列中…

成都市酷客焕学新媒体科技有限公司:助力品牌打破困境!

在数字化浪潮的推动下&#xff0c;营销策略对品牌的发展愈发关键。成都市酷客焕学新媒体科技有限公司&#xff0c;作为短视频营销领域的佼佼者&#xff0c;凭借其卓越的策略和实力&#xff0c;助力众多品牌在信息海洋中脱颖而出&#xff0c;实现品牌的显著增长。 酷客焕学专注于…

抖音和快手哪个好?来全面了解一下他们的区别!

快手和抖音虽然是短视频领域的两大主流平台&#xff0c;但是两者也存在本质的区别&#xff0c;从产品定位、用户群体到视频风格、变现模式&#xff0c;它们的特征都不一样。 &#xff08;一&#xff09;两个平台核心区别&#xff1a; 1. 核心用户不一样&#xff1a;抖音以1、…

【最优化方法】实验四 约束最优化方法的MATLAB实现

实验的目的和要求&#xff1a;通过本次实验使学生较为熟练使用MATLAB软件&#xff0c;并能利用该软件进行约束最优化方法的计算。 实验内容&#xff1a; &#xff11;、罚函数法的MATLAB实现 &#xff12;、可行方向法的MATLAB实现 学习建议&#xff1a; 本次实验就是要通…

942. 增减字符串匹配 - 力扣

1. 题目 由范围 [0,n] 内所有整数组成的 n 1 个整数的排列序列可以表示为长度为 n 的字符串 s &#xff0c;其中: 如果 perm[i] < perm[i 1] &#xff0c;那么 s[i] I 如果 perm[i] > perm[i 1] &#xff0c;那么 s[i] D 给定一个字符串 s &#xff0c;重构排列 pe…

新能源汽车推行精益生产:绿色动力下的效率革命

在新能源汽车行业迅猛发展的当下&#xff0c;推行精益生产已成为提升竞争力的关键所在。精益生产&#xff0c;作为一种以客户需求为导向、追求流程最优化和浪费最小化的管理理念&#xff0c;正逐步在新能源汽车领域展现出其独特的魅力。 新能源汽车的兴起&#xff0c;不仅代表了…

【云原生】kubernetes中Configmap原理解析与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

Python中tkinter入门编程9

在《Python中tkinter编程入门8-CSDN博客》中提到&#xff0c;tkinter中的Canvas表示画布&#xff0c;可以在画布中显示文字和图片。除了以上功能外&#xff0c;还可以在Canvas中添加对鼠标或键盘的响应。 1 为Canvas添加事件响应 可以通过Canvas的bind()方法添加对鼠标或键盘…

深圳比创达电子|EMC与EMI滤波器:电子设备的“电磁防护罩”

在电子科技日新月异的今天&#xff0c;电磁兼容性&#xff08;EMC&#xff09;问题越来越受到工程师和技术人员的关注。其中&#xff0c;电磁干扰&#xff08;EMI&#xff09;和电磁干扰抑制&#xff08;即EMI滤波器&#xff09;是实现良好EMC性能的关键技术之一。 一、EMC与E…

1218. 最长定差子序列

1218. 最长定差子序列 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;参考代码&#xff1a;_1218最长定差子序列 错误经验吸取 原题链接&#xff1a; 1218. 最长定差子序列 https://leetcode.cn/problems/longest-arithmetic-subsequence-of-given-differen…

FlashRAG

文章目录 一、关于 FlashRAG特点 ✨&#x1f527; 安装 二、快速入门&#x1f3c3;1、Toy Example2、使用现成的管道3、建立自己的管道4、只需使用组件 三、组件⚙️1、RAG 组件2、管道 四、支持方法&#x1f916;五、支持数据集&#x1f4d3;六、其他常见问题解答 &#x1f64…