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.pswp.cn/bicheng/15275.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/15275.shtml
英文地址,請注明出處:http://en.pswp.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)來…