91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

關(guān)于VHDL編碼風格

FPGA之家 ? 來源:FPGA之家 ? 作者:FPGA之家 ? 2022-07-04 09:33 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

挺久沒有更新,今天更新一篇小文章。最近正在整理一個SDRAM控制器的教程(VHDL),現(xiàn)在更新的小文章是想為后續(xù)的SDRAM教程以及其它比較大的教程做鋪墊。本文主要講關(guān)于VHDL編碼風格(Verilog也可以用同樣的思想),這篇文章的核心思想就是:設(shè)計中的所有狀態(tài)都應(yīng)該被明確聲明在寄存器中。

這句話什么意思先不談,直接上兩段代碼,第一段如下:

library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use work.ff.all; -- 一些常用的元件包,這里面是可以自己寫的

-- 這篇文章主要就調(diào)用了基本的D觸發(fā)器,里面還有什么可以先忽略

entity Bad_Counter is generic( n: integer := 4 ); port( clk, rst: in std_logic;

output: buffer std_logic_vector(n-1 downto 0) );end Bad_Counter;

architecture impl of Bad_Counter issignal nxt: std_logic_vector(n-1 downto 0);begin process(clk) begin

if rising_edge(clk) then

if rst then

output 《= (others =》 ‘0’);

else

output 《= output + 1;

end if;

end if; end process;end impl;

一個4位計數(shù)器,能實現(xiàn)設(shè)計的功能,但其中output 《= output + 1存在一點問題,這種寫法非常C語言化,這也是很多人習慣的寫法。為什么說這種寫法不好,因為它混淆了當前狀態(tài)和下一狀態(tài)。先不多解釋,看下一段代碼如下:

library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use work.ff.all; -- 一些常用的元件包,這里面是可以自己寫的

-- 這篇文章主要就調(diào)用了基本的D觸發(fā)器,里面還有什么可以先忽略

entity Good_Counter is generic( n: integer := 4 ); port( clk, rst: in std_logic;

output: buffer std_logic_vector(n-1 downto 0) );end Good_Counter;

architecture impl of Good_Counter is signal nxt: std_logic_vector(n-1 downto 0);begin nxt 《= (others=》‘0’) when rst else output+1;

count: vDFF generic map(n) port map(clk, nxt, output);end impl;

這段代碼同樣的是4位計數(shù)器,為什么用這兩段代碼做比較,非常典型,第一段代碼的思想就是C語言的思想來寫的,很多人可能沒有注意自己在寫“數(shù)字電路”,也沒有特別關(guān)注寫出來的代碼綜合出來是什么樣子。第二段代碼明確表明nxt是下一狀態(tài),并且nxt是通過當前狀態(tài)output得到的,這很重要,與此同時還調(diào)用了一個D觸發(fā)器元件,這個D觸發(fā)器為什么用,之前在異步FIFO(二)中有談到:在實現(xiàn)所有的狀態(tài)變量都應(yīng)該被明確的聲明位D觸發(fā)器,不要讓編譯器去推斷應(yīng)該用什么觸發(fā)器。

講到這里,可能還是不懂這兩份代碼有什么具體的差別,我做了一個實驗,把兩份代碼都綜合了一遍,使用了兩個不同的版本,Quartus20.3和Quartus13.1(不同版本的軟件,無論是效率還是開發(fā)便捷程度還是有一定差別的)

先看Quartus13.1綜合出的兩份原理圖

940b584a-fb2e-11ec-ba43-dac502259ad0.png

這幅原理圖是第一份代碼綜合出來了,大概看一下沒什么問題,代碼也是這樣寫的。

再看第二份代碼綜合出來的原理圖

9425db3e-fb2e-11ec-ba43-dac502259ad0.png

區(qū)別來了,很明顯,第一份代碼因為用output <= output + 1的原因,左右兩端使用了相同的信號,混淆當前狀態(tài)和下一狀態(tài),下一狀態(tài)被隱藏起來。但第二份代碼綜合出來的很明顯,nxt是下一狀態(tài),并且nxt是通過當前狀態(tài)output得到的。當然還要個比較好的地方,第二份代碼直接調(diào)用D觸發(fā)器元件(在package里面寫了),告訴編譯器狀態(tài)變量要聲明為D觸發(fā)器,而不是讓編譯器自己判斷(盡管它可以)。

再看Quartus20.3綜合出來的原理圖

94400d92-fb2e-11ec-ba43-dac502259ad0.png

這個原理圖是第一份代碼Bad_Counter 綜合出來的,很顯然現(xiàn)在的EDA真行,可以把不那么優(yōu)秀的代碼綜合出優(yōu)秀代碼才能綜合出的原理圖了。當然這是很簡單代碼的情況下。

945799f8-fb2e-11ec-ba43-dac502259ad0.png

這個原理圖是第二份代碼Good_Counter綜合出來的,除了下一狀態(tài)的命名和位數(shù)區(qū)間不一樣外,其它的兩個代碼綜合出來的沒有區(qū)別!

小結(jié):從上面的四幅原理圖看,盡管隨著EDA的發(fā)展讓不那么優(yōu)秀的代碼綜合出和優(yōu)秀代碼一樣的原理圖,但良好編碼風格的代碼仍然非常必要,即使是13.1和20.3巨大版本差異的情況下,良好編碼風格的代碼綜合出來的原理圖也是一樣的。但在代碼風格不好的情況下,13.1和20.3卻有比較大的差距。人作為設(shè)計的主體,不能完全依靠EDA的優(yōu)化,編譯器也不是萬能的,有些其它地方未必會優(yōu)化的那么好,在大型復(fù)雜項目中不太好的編碼風格可能編譯器也未必能夠給出比較好的優(yōu)化,好的編碼風格可以讓我們更好的理解一些底層的設(shè)計,也能知道代碼會如何綜合。更重要的是需要知道自己數(shù)字設(shè)計師!用數(shù)字的思想去設(shè)計FPGA。這些只是自己的意見,大家可以做一個參考,有不對的地方也歡迎批評指正。

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5608

    瀏覽量

    130001
  • vhdl
    +關(guān)注

    關(guān)注

    30

    文章

    822

    瀏覽量

    131701

原文標題:VHDL的編碼風格(Verilog也可參考思想)

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    hcs301 編碼跳變編碼器應(yīng)用手冊

    電子發(fā)燒友網(wǎng)站提供《hcs301 編碼跳變編碼器應(yīng)用手冊.pdf》資料免費下載
    發(fā)表于 02-09 16:35 ?0次下載

    Linux內(nèi)核編碼風格權(quán)威總結(jié):從縮進到底層設(shè)計,讓你的代碼更“內(nèi)核味”

    作為全球最龐大的開源項目之一,Linux 內(nèi)核的代碼量早已突破千萬行。要讓來自世界各地的開發(fā)者高效協(xié)作,一套統(tǒng)一、嚴謹?shù)?b class='flag-5'>編碼風格必不可少 —— 這不僅是 “代碼顏值” 的要求,更是可讀性、可維護性的核心保障。
    的頭像 發(fā)表于 02-09 16:29 ?129次閱讀
    Linux內(nèi)核<b class='flag-5'>編碼</b><b class='flag-5'>風格</b>權(quán)威總結(jié):從縮進到底層設(shè)計,讓你的代碼更“內(nèi)核味”

    基于FPGA VHDL的FSK調(diào)制與解調(diào)設(shè)計

    VHDL誕生于1982年。在1987年底,VHDL被IEEE和美國國防部確認為標準硬件描述語言。
    的頭像 發(fā)表于 01-27 10:58 ?341次閱讀
    基于FPGA <b class='flag-5'>VHDL</b>的FSK調(diào)制與解調(diào)設(shè)計

    FPGA 入門必看:Verilog 與 VHDL 編程基礎(chǔ)解析!

    很多開發(fā)者第一次接觸FPGA,都會有同樣的疑問:FPGA是硬件,不是軟件,怎么寫程序?答案就是用硬件描述語言(HDL),最常用的就是Verilog和VHDL。今天,我們就帶你入門,搞清楚FPGA編程
    的頭像 發(fā)表于 01-19 09:05 ?458次閱讀
    FPGA 入門必看:Verilog 與 <b class='flag-5'>VHDL</b> 編程基礎(chǔ)解析!

    Vishay USB編碼器接口技術(shù)解析與應(yīng)用指南

    Vishay/MCB Industrie RAMK/RAME USB編碼器接口是一款設(shè)計用于Vishay MCB編碼器(AMK和RAME系列,包括霍爾效應(yīng))的電子板。該接口板只需使用隨附的USB
    的頭像 發(fā)表于 11-12 11:51 ?871次閱讀

    舵機伺服編碼

    舵機伺服編碼器是用于實時檢測舵機輸出軸位置、速度或角度的核心反饋元件,它能將機械運動轉(zhuǎn)化為電信號,讓控制系統(tǒng)實現(xiàn)對舵機的精準閉環(huán)控制。 這個問題切得很準,它直接指向了舵機 “精準控制” 的關(guān)鍵所在
    的頭像 發(fā)表于 10-30 10:05 ?327次閱讀

    編碼器為何能取代光電編碼器?

    在復(fù)雜工業(yè)場景下,磁編碼器憑借其不怕油污粉塵、抗沖擊振動、安裝便捷及高速響應(yīng)等優(yōu)勢,正有效解決光電編碼器怕臟、怕震、難安裝、怕高速的痛點,逐漸成為提升機器人性能的新選擇。
    的頭像 發(fā)表于 10-15 09:55 ?666次閱讀
    磁<b class='flag-5'>編碼</b>器為何能取代光電<b class='flag-5'>編碼</b>器?

    Bourns發(fā)布全新增量式微型編碼

    Bourns 推出 PEC04 系列 4 mm 增量式微型編碼器、PEC05 PEC05 系列 5 mm 增量式微型編碼器,以及 PEC06 型號 6 mm 增量式微型編碼器。Bourns 全新微型
    的頭像 發(fā)表于 09-22 16:05 ?1306次閱讀

    絕對值編碼器與增量式編碼器相比有哪些優(yōu)勢?

    絕對值編碼器與增量式編碼器相比有哪些優(yōu)勢?核心功能:斷電后位置信息不丟失,絕對值編碼器:通過機械結(jié)構(gòu)或電子存儲(如電池備份),能實時輸出當前位置的唯一絕對值編碼(如二進制、格雷碼)。無
    的頭像 發(fā)表于 08-11 13:57 ?1654次閱讀
    絕對值<b class='flag-5'>編碼</b>器與增量式<b class='flag-5'>編碼</b>器相比有哪些優(yōu)勢?

    增量型編碼器與絕對值型編碼器怎么選擇?

    在選擇增量型編碼器與絕對值型編碼器時,需要考慮多個因素,包括應(yīng)用需求、成本、精度、可靠性以及環(huán)境適應(yīng)性等。以下是對兩種編碼器的詳細比較及選擇建議: 一、增量型編碼器 1. 優(yōu)點: ?
    的頭像 發(fā)表于 07-10 10:34 ?1399次閱讀

    為什么我選擇VHDL入門

    在群里交流提問的時候,大家總是驚訝并疑惑:為什么我要選擇 VHDL入門?因為好像 99% 搞 FPGA 開發(fā)的人都在用 Verilog。 我的選擇,是通過網(wǎng)上搜索的討論而做出的,為了留存,我這里水一
    的頭像 發(fā)表于 06-25 11:18 ?1217次閱讀
    為什么我選擇<b class='flag-5'>VHDL</b>入門

    一文讀懂什么是磁性編碼

    磁性編碼器是一種用于測量角度和線性位置的傳感器。它使用磁性信號來監(jiān)測旋轉(zhuǎn)或線性位置的變化,并把這些變化轉(zhuǎn)換成數(shù)字信號。磁性編碼器可用于各種應(yīng)用中,比如機器人、汽車、數(shù)控機床等領(lǐng)域
    的頭像 發(fā)表于 04-27 17:18 ?1075次閱讀

    優(yōu)先編碼器:高效數(shù)據(jù)選擇與編碼的解決方案

    在現(xiàn)代數(shù)字電路設(shè)計中,數(shù)據(jù)的選擇與編碼是不可或缺的重要環(huán)節(jié)。面對眾多輸入信號,如何高效地選擇并編碼所需數(shù)據(jù),成為設(shè)計師們面臨的一大挑戰(zhàn)。優(yōu)先編碼器,作為一種獨特的數(shù)字電路組件,憑借其高效、靈活的特點
    的頭像 發(fā)表于 03-25 08:33 ?1172次閱讀

    編碼器與無軸承編碼器,到底如何選擇?

    在選擇軸編碼器與無軸承編碼器時,需要根據(jù)具體的應(yīng)用場景、性能需求、環(huán)境條件和成本預(yù)算等因素進行綜合考慮。以下是對兩者的詳細對比,以幫助做出合適的選擇: 一、工作原理與結(jié)構(gòu) 1. 軸編碼
    的頭像 發(fā)表于 03-11 15:33 ?1325次閱讀
    軸<b class='flag-5'>編碼</b>器與無軸承<b class='flag-5'>編碼</b>器,到底如何選擇?

    伺服電機編碼器怎么選型

    伺服電機編碼器的選型是一個綜合性的過程,需要考慮多個因素以確保所選編碼器能夠滿足系統(tǒng)的性能要求。以下是一些關(guān)鍵的選型步驟和考慮因素: 一、明確應(yīng)用需求 首先,需要明確伺服電機編碼器的應(yīng)用需求,包括
    的頭像 發(fā)表于 03-11 12:01 ?2063次閱讀
    伺服電機<b class='flag-5'>編碼</b>器怎么選型