在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

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

FPGA之家 ? 來(lái)源:FPGA之家 ? 作者:FPGA之家 ? 2022-07-04 09:33 ? 次閱讀

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

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

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

-- 這篇文章主要就調(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;

一個(gè)4位計(jì)數(shù)器,能實(shí)現(xiàn)設(shè)計(jì)的功能,但其中output 《= output + 1存在一點(diǎn)問(wèn)題,這種寫(xiě)法非常C語(yǔ)言化,這也是很多人習(xí)慣的寫(xiě)法。為什么說(shuō)這種寫(xiě)法不好,因?yàn)樗煜水?dāng)前狀態(tài)和下一狀態(tài)。先不多解釋?zhuān)聪乱欢未a如下:

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

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

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

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

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

這幅原理圖是第一份代碼綜合出來(lái)了,大概看一下沒(méi)什么問(wèn)題,代碼也是這樣寫(xiě)的。

再看第二份代碼綜合出來(lái)的原理圖

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

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

再看Quartus20.3綜合出來(lái)的原理圖

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

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

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

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

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

審核編輯 :李倩

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

    關(guān)注

    31

    文章

    5424

    瀏覽量

    123508
  • vhdl
    +關(guān)注

    關(guān)注

    30

    文章

    819

    瀏覽量

    129603

原文標(biāo)題:VHDL的編碼風(fēng)格(Verilog也可參考思想)

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

收藏 人收藏

    評(píng)論

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

    從步進(jìn)電機(jī)到智能系統(tǒng),編碼器究竟如何選擇?

    從步進(jìn)電機(jī)到智能系統(tǒng),編碼器的選擇是一個(gè)關(guān)鍵決策,它直接影響到系統(tǒng)的性能和精度。以下是一些關(guān)于如何選擇編碼器的建議: 一、明確應(yīng)用場(chǎng)景和需求 首先,需要明確編碼器的應(yīng)用場(chǎng)景和需求。不同
    的頭像 發(fā)表于 03-05 07:34 ?378次閱讀
    從步進(jìn)電機(jī)到智能系統(tǒng),<b class='flag-5'>編碼</b>器究竟如何選擇?

    DISCOAA編碼器類(lèi)型功能

    DISCOAA編碼器可能包括絕對(duì)編碼器和增量編碼器兩種類(lèi)型,其主要功能是將輸入信號(hào)進(jìn)行分析和處理,并將其轉(zhuǎn)換為數(shù)字信號(hào) ?。 關(guān)于類(lèi)型,雖然搜索結(jié)果中并未直接提及DISCOAA
    的頭像 發(fā)表于 02-20 13:47 ?287次閱讀

    淺談Verilog和VHDL的區(qū)別

    Verilog和VHDL是兩種廣泛使用的硬件描述語(yǔ)言(HDL),它們用于描述和模擬數(shù)字電路系統(tǒng)的行為和結(jié)構(gòu)。這兩種語(yǔ)言的主要作用是幫助工程師設(shè)計(jì)、仿真和驗(yàn)證集成電路(IC)和系統(tǒng)級(jí)芯片(SoC)中的硬件模塊。
    的頭像 發(fā)表于 02-17 14:20 ?1269次閱讀
    淺談Verilog和<b class='flag-5'>VHDL</b>的區(qū)別

    ADS1298負(fù)數(shù)的編碼,應(yīng)該怎么處理?

    由于是送到TFT屏上顯示,沒(méi)做過(guò)負(fù)的顯示。ADS1298是24位,而常見(jiàn)的都是32和16位,我要同時(shí)顯示正負(fù)數(shù),關(guān)于負(fù)數(shù)的編碼,應(yīng)該怎么處理?
    發(fā)表于 02-12 07:59

    信道編碼和信源編碼的區(qū)別

    信道編碼和信源編碼是數(shù)字通信系統(tǒng)中兩個(gè)至關(guān)重要的環(huán)節(jié),它們各自承擔(dān)著不同的功能和角色。
    的頭像 發(fā)表于 01-29 16:29 ?1412次閱讀

    MT-HIL(4):如何在Simulink下使用HDL Coder導(dǎo)出FPGA/VHDL代碼

    vhdl
    芒果樹(shù)數(shù)字
    發(fā)布于 :2025年01月10日 17:22:17

    Verilog與VHDL的比較 Verilog HDL編程技巧

    Verilog 與 VHDL 比較 1. 語(yǔ)法和風(fēng)格 Verilog :Verilog 的語(yǔ)法更接近于 C 語(yǔ)言,對(duì)于有 C 語(yǔ)言背景的工程師來(lái)說(shuō),學(xué)習(xí)曲線較平緩。它支持結(jié)構(gòu)化編程,代碼更直觀,易于
    的頭像 發(fā)表于 12-17 09:44 ?1504次閱讀

    編碼器類(lèi)型詳解:探索不同編碼技術(shù)的奧秘

    編碼器類(lèi)型詳解:探索不同編碼技術(shù)的奧秘 在自動(dòng)化、機(jī)器控制和數(shù)據(jù)處理等領(lǐng)域,編碼器作為關(guān)鍵的傳感器組件,扮演著至關(guān)重要的角色。它們通過(guò)將物理位置、速度或方向轉(zhuǎn)換為電信號(hào),為各種設(shè)備提供精確的控制
    的頭像 發(fā)表于 11-19 08:58 ?1750次閱讀
    <b class='flag-5'>編碼</b>器類(lèi)型詳解:探索不同<b class='flag-5'>編碼</b>技術(shù)的奧秘

    FPGA編碼風(fēng)格介紹

    組合邏輯環(huán)路(Combinational Loops):指組合邏輯的輸出信號(hào)不經(jīng)過(guò)任何時(shí)序邏輯電路(FF等),而直接反饋到輸入節(jié)點(diǎn),從而構(gòu)成的電路環(huán)路。
    的頭像 發(fā)表于 11-15 10:49 ?589次閱讀
    FPGA<b class='flag-5'>編碼</b><b class='flag-5'>風(fēng)格</b>介紹

    求助vhdl

    vhdl 技術(shù)
    發(fā)表于 11-13 11:35

    風(fēng)華貼片電容物料編碼如何看?

    風(fēng)華貼片電容的物料編碼規(guī)則通常包含多個(gè)部分,每個(gè)部分都代表了不同的信息。以下是關(guān)于如何解讀風(fēng)華貼片電容物料編碼的分點(diǎn)表示和歸納: 1、電容數(shù)值: 編碼的第一至第三位數(shù)字表示電容的數(shù)值,
    的頭像 發(fā)表于 11-04 15:33 ?719次閱讀
    風(fēng)華貼片電容物料<b class='flag-5'>編碼</b>如何看?

    增量編碼器和絕對(duì)值編碼器是什么

    工業(yè)編碼器是一類(lèi)傳感器,是在工業(yè)自動(dòng)化閉環(huán)控制和數(shù)字化轉(zhuǎn)型物理感知重要的傳感器。關(guān)于傳感器的宣傳已很多,但是對(duì)于編碼器這么重要的傳感器,大家的認(rèn)識(shí)還是模糊的。
    的頭像 發(fā)表于 10-22 14:23 ?984次閱讀
    增量<b class='flag-5'>編碼</b>器和絕對(duì)值<b class='flag-5'>編碼</b>器是什么

    有沒(méi)有關(guān)于PDM信號(hào)編碼格式輸出的IC呢?

    請(qǐng)教一下大家,有沒(méi)有關(guān)于PDM信號(hào)編碼格式輸出的IC呢? 比如PCM轉(zhuǎn)PDM或者I2S什么的轉(zhuǎn)PDM?
    發(fā)表于 10-15 07:37

    磁電編碼器和光電編碼器的區(qū)別

    磁電編碼器和光電編碼器是兩種不同類(lèi)型的編碼器,它們?cè)谠怼⒔Y(jié)構(gòu)、性能和應(yīng)用領(lǐng)域上都有所不同。 磁電編碼器和光電編碼器的區(qū)別 1. 引言
    的頭像 發(fā)表于 10-12 09:54 ?2837次閱讀

    【招聘】verilog vhdl FPGA

    1.熟悉FPGA架構(gòu)及應(yīng)用,熟悉圖像算法的FPGA實(shí)現(xiàn)。 2.熟悉verilog vhdl,熟悉Xilinx或Intel等開(kāi)發(fā)工具。 3.有AI算法 fpga實(shí)現(xiàn)經(jīng)驗(yàn)優(yōu)先。 4.本科及以上學(xué)歷,碩士?jī)?yōu)先。具有強(qiáng)烈的責(zé)任心,執(zhí)行力,良好的溝通能力和團(tuán)隊(duì)合作能力。
    發(fā)表于 09-02 15:50
    主站蜘蛛池模板: 九九人人 | 国产色产综合色产在线观看视频 | 护士巨好爽好大乳 | 18美女扒开尿口无遮挡 | 激情五月婷婷综合网 | 天天天干干干 | 天天激情站 | 狠狠狠狠干| 天天艹夜夜艹 | 777影院| 午夜美女网站 | xxx性欧美| 亚洲天堂视频一区 | 日本三区四区免费高清不卡 | 国产黄视频网站 | 午夜欧美精品久久久久久久久 | 自偷自拍亚洲欧美清纯唯美 | 日本在线不卡一区二区 | 久久婷婷国产精品香蕉 | 日本不卡在线视频高清免费 | 91精品啪国产在线观看免费牛牛 | 免费在线看黄色 | 日本免费不卡视频 | 国内久久精品 | 亚洲精品久久久久久久蜜桃 | 精品四虎免费观看国产高清午夜 | 亚洲免费三级 | 国模私拍一区二区三区 | 欧美午夜视频 | 美女视频黄视大全视频免费网址 | 亚色成人| 亚洲看黄 | 激情五月婷婷综合网 | 国产一级毛片国语版 | 欧美另类网 | 欧美成人精品一区二区 | 亚洲国产情侣偷自在线二页 | 中文字幕在线播放不卡 | 一级片黄色免费 | 1024你懂的日韩 | 精品伊人久久大线蕉色首页 |