閑庭信步使用SV搭建圖像測試平臺:第十三課——談談SV的數據類型

?(本系列只需要modelsim即可完成數字圖像的處理,每個工程都搭建了全自動化的仿真環境,只需要雙擊top_tb.bat文件就可以完成整個的仿真,大大降低了初學者的門檻!!!!如需要該系列的工程文件請關注知識星球:成工fpga,https://t.zsxq.com/DMeqH關注即送200GB學習資料,鏈接已置頂!)

成工有個強迫癥,就是要求工程的 編號和文章的編號能對應上,由于上篇的package有單個package和多個package,工程是有兩個,但是成工在一篇文章中寫完了。如果繼續往下寫,后面的文章和工程就會錯位,這是成工不能容忍的,所以增加一課,來談談SV的數據類型。

其實看前面幾篇相應的工程,有心者應該能發現成工在使用數據類型的變化,在逐漸由verilog向system verilog轉變。不信的話可以看看第一個工程的數據類型,變量用的是interger和reg。

再看看最近工程數據類型的使用,int,logic,bit,int unsigned。

很多人可能一頭霧水,到底什么時候應該使用什么數據類型呢?有疑問其實就是考點,FPGA測試崗位的面試,數據類型的使用是必問的。

也不要急于一時,我們還是先從verilog的數據類型講起。其實verilog提供了兩種基本的數據類型,那就是變量類型和線網類型,在RTL開發過程中,用的最多的就是reg和wire,其實分別就是變量類型和線網類型。其實變量類型還有integer,time等等,主要用來存儲組合邏輯或者時序邏輯。而線網類型除了wire,還有wor,wand等,用的比較少,主要用來連接功能模塊,當然也可以用來實現組合邏輯,比如wire類型數據可以用assign來實現組合邏輯。

但是有一點需要注意,verilog的數據類型,不管是變量類型還是線網類型,都是四值邏輯的,也就是說,verilog中所有數據的每一位,都有0,1,X和Z四個值可取。所以嚴格的來說,verilog并沒有區分信號的類型,因為所用的數據都是四值邏輯。

而system verilog在verilog的基礎上添加了很多新的數據類型,大大方便了FPGA的設計和驗證,最主要的是SV將硬件信號區分為類型和數據類型。

SV的信號類型和verilog一樣也是分為變量類型和線網類型。而數據類型則分為四值邏輯(logic)和二值邏輯(bit)。

其實大家都知道,數字信號一般就兩種狀態,那就是0和1,而為了硬件仿真的功能,增加了未知狀態X和高組態Z,比如一個信號沒有任何的輸入驅動,處于懸空狀態,那就是Z;而一個信號在某個時刻可能是0也可以是1,那就是未知狀態X。但是如果是不涉及硬件的功能仿真測試,是沒有必要使用X和Z兩張狀態的,這時候使用二值邏輯不僅可以節約內存,還可以加快仿真

回到SV的信號類型常用的變量類型reg和常用線網類型wire依然可以使用,也就是說用verilog寫的.v文件直接改成.sv文件可以直接進行綜合和仿真。但是在SV中,用的最多的信號類型是logic,就是不管是變量還是線網,都可以使用logic。當然信號聲明成logic類型,默認是表示變量類型,用戶可以直接在logic前加var或者wire聲明信號的類型,var logic就是變量類型,wire logic就是線網類型,但是一般我們不會如此聲明信號。

下面我們對數據類型按照四值邏輯和二值邏輯進行分類:

四值邏輯:wire,reg,logic,integer,tri;

二值邏輯:bit,byte,shortint,int,longint。

其實數據可以是有符號數也可以是無符號數,進一步分類:

有符號數:integer,byte,shortint,int,longint;

無符號數:wire,reg,logic,tri,bit。

上面的數據分類是面試的考點,其實挺好記的,四值邏輯除了integer一般都是無符號數而integer和int一看就是同一類的,都是有符號數。二值邏輯除了bit一般都是有符號是,這個更好理解了,bit就一位,如果是符號位就不用表示其它的了。當然有符號的數據類型也可以用來定義無符號的信號,加上unsigned即可。

有了上面的分析,我們來總結一下什么時候使用什么數據類型。如果使用SV設計可綜合的RTL代碼,基本使用logic即可。如果使用SV進行非硬件的功能仿真測試,可以多使用二值邏輯。當然這個不是絕對的,還有考慮個人的喜歡,比如成工就是喜歡用logic而不是reg和wire,喜歡用int而不是integer。

舉個例子,RGB每個通道的每個圖像數據都是8bit的無符號數,那我們可以用四值邏輯logic [7:0]來定義,也可以使用二值邏輯bit [7:0]來定義,當然也可以使用二值邏輯byte unsigned來定義,形式可以多樣,只要功能正確就可以。

最后說一點,就是一個文件中使用了四值邏輯和二值邏輯,要注意交互信號的相互轉換,不然可能會出現意想不到的錯誤,后續成工會用實例的說明。這兒僅僅需要先記住一點,那就是四值邏輯的X和Z都會轉換成二值邏輯的0

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/86928.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/86928.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/86928.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

前端進階之路-從傳統前端到VUE-JS(第一期-VUE-JS環境配置)(Node-JS環境配置)(Node-JS/npm換源)

經過前面的傳統前端開發學習后,我們接下來進行前端的VUE-JS框架學習(寫這篇文章的時候VUE-JS最新版是VUE3,所以默認為VUE3即可) 首先,我們要配置Node-JS環境,雖然我們還不學習Node-JS但是Node-JS可以快速配…

Requests源碼分析:面試考察角度梳理

簡單描述執行流程 ?? Q:能簡單描述一下發送一個requests.get(url)請求時,在requests庫內部的主要執行流程嗎?(從調用get方法到收到響應) 入口委托: get() 方法內部調用 requests.request(GET, url)。Session 接管: request() 方法會獲取或隱式創建一個 Session 對象,并…

航天VR賦能,無人機總測實驗艙開啟高效新篇?

(一)沉浸式培訓體驗? 在傳統的無人機培訓中,操作人員主要通過理論學習和簡單的模擬操作來掌握技能。但這種方式存在很大局限性,難以讓操作人員真正感受無人機在復雜環境下的運行狀態。而航天 VR 技術引入到 VR 無人機總測實驗艙后,徹底改變了…

Kotlin 函數與 Lambda 表達式

今天繼續分享Kotlin學習內容。 目標:掌握函數定義、調用、參數傳遞,以及 Lambda 表達式的基礎用法 1. 函數:Kotlin 的代碼模塊化工具 定義:函數是可重復調用的代碼塊,用于封裝邏輯。 語法: fun 函數名(參…

[mcp-servers] docs | AI客戶端-MCP服務器-AI 架構

鏈接:https://github.com/punkpeye/awesome-mcp-servers 服務器調用 相關專欄:實現Json-Rpc docs:精選MCP服務器資源列表 本專欄為精選 模型上下文協議(MCP)服務器的列表。 MCP 是一種標準協議語言,允許*…

1688商品發布API:自動化上架與信息同步

一、1688商品發布API的核心功能與技術架構 1.1 API功能全景 1688商品發布API是1688開放平臺的核心組件之一,支持商品信息的自動化發布、編輯、上下架及庫存同步。其核心功能包括: 商品信息管理:支持商品標題、描述、價格、庫存、SKU&#…

如何在x86_64 Linux上部署Android Cuttlefish模擬器運行環境

0 軟硬件環境 x86_64服務器Ubuntu20.04 LTS參考:Cuttlefish 虛擬 Android 設備參考: 筆記:搭建 Cuttlefish 運行環境可以下載編好的android-cuttlefish:android-cuttlefish.tar.gz 1 系統采用Ubuntu20.04 LTS 2 搭建cuttlefish…

機器學習9——決策樹

決策樹 Intro 歸納學習(Inductive Learning)的目標:從訓練數據中學習一般規則,應用于未見過的數據。 決策樹是一個樹形結構,其中: 每個分支節點表示一個屬性上的選擇(即決策條件)。…

CppCon 2017 學習:The Asynchronous C++ Parallel Programming Model

清晰理解 Amdahl’s Law(阿姆達爾定律),這是一條描述并行計算加速能力的核心定律。 定義公式: S 1 ( 1 ? P ) P N S \frac{1}{(1 - P) \frac{P}{N}} S(1?P)NP?1? S S S:加速比(Speedup&#xff09…

60頁PPT實戰方案 | 大數據決策分析平臺建設全流程路徑圖

目錄 一、什么是大數據決策分析平臺? 二、為什么要做大數據決策分析平臺建設? 1. 數據已經成為“資源”,但多數組織還停留在“信息孤島” 2. 管理復雜度上升,傳統報表跟不上業務節奏 3. 外部環境不確定性高,倒逼企…

芯谷科技--降壓型DC-DC轉換器D4005

在現代電子設備中,電源管理芯片的性能直接關系到設備的穩定性和效率。D4005以其高效、穩定的性能和廣泛的應用范圍,成為眾多工程師在設計電源方案時的優選。 產品簡介 D4005 是一款高效降壓型 DC-DC 轉換器,具備固定 400KHz 開關頻率&#…

【51單片機節日彩燈控制器設計】2022-6-11

緣由單片機節日彩燈控制器設計-編程語言-CSDN問答 #include "reg52.h" sbit k0P1^2; sbit k1P1^3; sbit k2P1^4; sbit k3P1^5; bit k0,kk0; void main() {unsigned char Xd0;unsigned int ys0; while(1){if(k00&&Xd0){kk0;kP31;while(k00);}if(k10&&…

PyEcharts教程(010):天貓訂單數據可視化項目

文章目錄 1、讀取數據2、數據處理3、重復值查看4、缺失值查看5、PyEcharts可視化5.1 各個省份的訂單量5.2 時間序列分析5.3 每天訂單量統計可視化6、數據下載1、讀取數據 1??讀取數據: import pandas as pd from pyecharts import options as opts from pyecharts.charts …

Redis 持久化之 AOF 策略

1. 什么是 AOF AOF 是 append only file,AOF 文件中記錄了每次的操作指令,在啟動 Redis 時,會將 AOF 文件中的數據讀取出來以恢復數據。 2. 開啟 AOF Redis 默認關閉 AOF,可以通過將 Redis 配置文件中的 appendonly 設置為 ye…

實現OFD轉換PDF文件的實用方法

ODF格式的文件屬于國內新型的文件格式,一般應用在保密等級比較高的系統或者單位中,比如一般政務方面或者法律行業經常會用到這種類型的文件,但是有些時候我們把文件分享給別人的時候別人不一定能打開,這時候就需要把OFD文件轉換成…

JSON + 存儲過程:SaaS 架構下的統一接口與租戶定制之道

在多租戶 SaaS 系統中,不同客戶往往有差異化的業務邏輯、字段要求與流程規則。傳統“統一模型 配置參數”的開發模式,雖然具有可控性,但在高度動態、合作多樣化的場景下,逐漸暴露出擴展困難、上線周期長、定制成本高等問題。 隨…

各種常用的串口助手工具分享

記錄一篇常用串口工具的文章 工具的下載鏈接:https://download.csdn.net/download/m0_59415345/91204823?spm1001.2014.3001.5503 各工具的使用操作說明參考嵌入式hxydj博主的文章:https://blog.csdn.net/qq_20222919/article/details/117038284

AVL樹的簡潔寫法

文章目錄 零、寫在前面一、AVL 樹定義1.1 性質1.2 樹高的證明 二、AVL樹實現(AVL樹實現名次樹)2.1 節點定義2.2 左/右旋轉2.3 zig-zag / zag-zig 雙旋2.4 重平衡函數2.5 插入2.6 刪除2.7 排名查詢2.8 查前驅/后繼2.9 查第 k 小2.10 完整代碼 三、online …

紅外圖像增強(dde):基于“基礎層-細節層”分解的增強算法

1、引言 與可見光圖像相比,紅外熱成像捕捉的是物體表面的溫度分布,其原始數據(通常為12位或14位)包含了極寬的溫度動態范圍。然而,人眼能夠感知的灰度范圍以及顯示設備能夠展示的灰度級(通常為8位&#xf…

Java-day28-其他流

1. 緩沖流 昨天學習了基本的一些流,作為IO流的入門,今天我們要見識一些更強大的流。比如能夠高效讀寫的緩沖流,能夠轉換編碼的轉換流,能夠持久化存儲對象的序列化流等等。這些功能更為強大的流,都是在基本的流對象基礎…