久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5743|回復: 0
打印 上一主題 下一主題
收起左側

可維護,可移植的verilog工程設計技巧

[復制鏈接]
跳轉到指定樓層
樓主
       忙碌的一年即將結束了,去年對我來說有痛、有糾結、有忙碌、有喜悅、有快樂、有幸福,如五彩絲綢一般,極度絢爛的一年!
        從我們創業以來,很多朋友送來支持和祝福,當然,也有很多朋友擔心我會慢慢放棄技術這條路,會停止我之前一直進行的技術經驗共享。
        2013年的確很忙,但我仍然抽空寫了幾篇技術文檔和經驗感受分享。可畢竟一個人的精力有限,我一個人的經驗分享改變不了什么……最早的時候我分享設計,但后來想授人魚,不如授之以漁,于是開始分享設計思路和經驗;但現在想來,分享設計思路和經驗,不如分享自己樂于總結和分享的理念,在這個層面上,魚和漁又有了新的指代。
        現在,我們有了公司,公司技術大咖小咖都支持我的做法,開始了技術經驗的總結。我會從中選出一些技術含量較高,質量好的跟喜歡電子的朋友們一起分享。我不知道我們的公司能存活多久,但我們堅持著從事科技前沿的東西,我們的目標不只是單純的贏利,我們還可以把更多前沿的技術帶給更多的人。
        下面附件是我們團隊一位“神秘咖”總結的FPGA設計技巧。因為分工配合的需要,他剛剛轉入FPGA開發不久,用他的話說,等以后寫的文檔水平能被他自己認可了,才署名……我覺得這篇文檔質量挺高,可以看出總結整理的非常用心,很適FPGA剛入門的朋友們參考。

完整的pdf文檔下載: 可維護,可移植的verilog工程設計技巧.pdf (241.29 KB, 下載次數: 26)





--------------------------------------------------------------
以下是pdf部分內容預覽:
TIDERIP——新手上路 A


隨著集成電路發展的腳步,28nm 技術已經大規模應用在 FPGA 領域,FPGA 開發者面 臨著日趨龐大的系統設計。筆者也在這段時間開始接觸帶有硬核ARM 的 Cyclone V,Quartus 也華麗麗地升級到了 13.1 版本。隨著硬件平臺及開發環境的更迭,項目版本的更新,深深 感覺到代碼的可維護性,可移植性異常重要,所以寫下這篇筆記,筆者接觸 FPGA 的時間 并不長,水平有限,就當做拋磚引玉吧。

一,工程設計層次化,結構化


要編寫可維護、可移植的工程首先要對設計進行層次化、結構化設計。不要急于 Coding,先整理思路,做好體系結構和模塊的劃分。一個設計任務需要按照功能或者類別分 成若干個可獨立操作的模塊,每個模塊又可以細分下去,這樣可以由若干名工程師同時設計, 當然也可以選用商業模塊。通過這樣的逐次分解與模塊的例化,整個工程能以設計樹的方式 繪出。
如圖 1 所示:











這樣的設計在后期維護以及移植的時候可以根據具體要求更新部分模塊,盡量少地改 變其他部分的代碼和時序。(由于 FPGA結構的原因,即使修改部分模塊,也會對整體的布 局布線造成改變,需要對時序進行約束,而這又是另外一個課題了)
二,模塊及例化 設計要做到可維護,可移植,對底層模塊的要求較高,要求盡量做到功能獨立、可重入。
功能獨立便于移植裁剪、系統維護的時候可以只對部分模塊進行修改。而模塊的重入性
越高,維護和移植的時候修改的代碼量就越小,只對底層模塊修改即可,上層行為級模塊可 不做修改。
Verilog 中以例化的方式調用其他功能模塊,與 C 語言等軟件函數調用不同的是,硬件 描述語言的例化是實實在在的電路,同一個功能模塊的多次例化分別是獨立的實體,而不是 軟件函數簡單的復用。所以,上面的兩種設計技巧只是從 coding 的方面考慮問題,而 FPGA 向來要求從硬件的角度去考慮問題,底層模塊的修改,意味電路結構,布局布線,時序都發生了變化,可維護性和可移植性在硬件的角度需要更多考慮。詳細的例化語法這里不做詳述,大家可參考夏宇聞老師的《verilog 數字系統設計 教程》。
Verilog 模塊有兩種編輯方法:原理圖輸入和 verilog 代碼輸入方式。原理圖輸入的方式
勝在結構清晰,而代碼輸入方式則更便于移植和仿真。(一般我們都用 Modelsim進行仿真, 目前還無法對原理圖輸入的方法進行仿真。不過可以把原理圖轉換成 verilogHDL文件再進 行仿真,方法是菜單欄 File-->Creat/Updata-->CreatHDLdesignfilesformcurrentfile

三,Parameter 參數傳遞


Verilog 中可以用 parameter 定義一個標識符代表一個常量,有助于提高程序的可讀 性,同時也方便了模塊例化的可維護性和可擴展性,簡單舉例:可以對總線的位寬進行 parameter 的定義,這樣就可以很方便地修改總線容量。由于它是 verilog 所特有的參數傳遞 方法,我們在這里詳細說明一下,Parameter語法格式如下:
parameter 參數名 1 = 表達式, 參數名 2 = 表達式,  .......  參數名 n = 表達式;

(這里建議參數名使用大寫字母,方便和變量區分開,而表達式必須是常量表達式。)
舉例
module Box( X,Y);
parameter LENTH = 100, WIDTH = 50, HIGH = 25;
......

...... endmodule


以下是在 verilog 文件中例化模塊時傳遞參數常用的兩種方法:
1、module_name #( parameter1, parameter2) inst_name( port_map);
例如例化上面模塊 Box              #(80,40,20)              box_1( X1, Y1) ;
Box_1 中實際引用的 LENTH , WIDTH, HIGH 分別為 80,40,20。
2、defparam
defparam heirarchy_path.parameter_name = value;
還是用上面的例子:
module Top( X,Y);
Box box_2( X2,Y2);
endmodule


module Annotate;
defparam
Top.box_2. LENTH =80; Top.box_2. WIDTH =40; Top.box_2. HIGH =20;
endmodule
Box_2 中實際引用的 LENTH , WIDTH, HIGH 分別為 80,40,20。


在原理圖文件中傳遞參數的方法比較簡單,例化的 Box 模塊如下圖,參數以表格的方 式在例化的 block/symbol 旁邊出現,我們只需要修改表格中的值就可以了。




(這里需要注意的是,如果在表格中修改了參數的值,即使我們修改該模塊的源文件中 parameter的初始值,再重新生成 block/symbol,然后 update原理圖中的該 block/symbol,也 無法改變實際使用中引用的 parameter的值,也就是說,一切以表格中的值為準)

四,宏定義 和 條件編譯
`define 宏定義對系統的可維護,可移植上的作用和 parameter 類似,區別是兩者的作 用域不同,parameter 作用于聲明的那個文件,`define 從編譯器讀到這條指令開始到編譯結 束都有效,或者遇到`undef 命令使之失效。(還有一個小區別是 parameter前面沒有“`”)
`define 和 C 語言上的 define 用法很類似,所以在這里不作詳述。 條件編譯常常和宏定義配合使用,用來對一部分程序內容進行選擇性編譯。語法如下:
`ifdef 宏名(標識符) 程序段
`endif
條件編譯可以很好地增強程序的可移植性,比如 Verilog 代碼中的一部分可能適用于某 個編譯環境,但不適用于另一個編譯環境。如設計者不想為兩個環境設計兩個版本的 verilog 設計,就需要對部分代碼進行條件編譯。

五,代碼可讀性 代碼的可讀性不會影響到程序的功能,但是維護和移植的工作畢竟要人來做,所以能
以更少的時間讀懂代碼,就能更效率地完成工作。在使用 verilog 進行 Coding 的過程中,以 更少的代碼,完成更多的工作,并不一定表示代碼的效率更高,因為編譯器和綜合器會對代 碼進行優化。
代碼的可讀性要求寫代碼要規范,風格統一,注釋簡潔,verilog 的風格和 C 語言類 似,所以在此我不對代碼規范作過多的筆墨,大家有興趣可以參考Altera 官網上的 Code style 相關的 PPT。
(我個人的一個設計小習慣是在工程中新建一個文本文檔,菜單欄 File-->New-->Textfile,在這個文檔中詳細記錄一些設計思路和版本更新記錄,配合代碼中的注釋,可以很快 對工程進行深入理解)
原理圖輸入才是 FPGA 設計與其他編程語言不一樣的地方,所以我詳細的講一下如 何在 Quartus 中完成可讀性更高,條理結構清晰的原理圖輸入方式,下面簡單介紹下如何使 用原理圖輸入的方式完成圖 1 的設計:
底層功能模塊還是采用 verilog 代碼輸入,如圖 1 所示的模塊 A1,A2,B1,C1,C2,需要 將它們生成 block/symbol 以方便原理圖輸入的時候例化,方法是在工程管理器窗口的 file 頁 右鍵點擊要生成 block/symbol 的文件,選擇 Creat symbol files for current file。如圖 2

圖 2 verilog 文件生成 block/symbol


圖 1 所示的中間模塊 A,B,C 同樣采用原理圖輸入方式,可以使用底層模塊剛剛生成 的 block/symbol。方法為雙擊原理圖的空白處,在彈出的窗口中,雙擊 library 中 Project 目 錄下的 block/symbol


圖 3 放置 block/symbol

以模塊 A 為例,需要例化 A1,A2 模塊,根據功能連接,并放置輸入輸出端口(方法: 可在圖 3 所示的 name 輸入 input 放置輸入端口,輸入 output 放置輸出端口),圖 4 是編輯完 的模塊 A:




圖 4              模塊 A


模塊 A 的原理圖編輯完成后,也需要生成 block/symbol 以便頂層模塊 Top 例化,方法 和底層模塊生成 block/symbol 的方式不同,需要在該原理圖為當前頁的時候,在 Quartus 菜 單欄選擇 File,在 File 的下拉菜單中選擇 Creat/Updata 中的 Creat block/symbol files for current file,將會在工程目錄下生成和模塊同名的.bsf 文件。如圖 5 所示

圖 5 原理圖文件生成 block/symbol



之后就可以在頂層模塊的原理圖文件中添加相應 block/symbol 了。圖 1 中的模塊 B,C 可以選
擇同樣的辦法。
頂層模塊選擇采用原理圖輸入,例化 A,B,C 后,加入相關功能邏輯和端口后完成 全部設計,如圖 6:


圖 6 頂層模塊 Top

在頂層模塊原理圖中,只有模塊 A,B,C 可見,結構簡單。可以雙擊 A,B,C 任一模塊 就可以看到下一層的構成,由此可見系統層次分明,有助于對系統的理解和維護。
原理圖輸入的方法更貼近硬件工程師的思維,所以層次感很強,對系統理解也沒有 verilog 代碼文件那么抽象。但是構建可維護,可移植的設計思想和什么方式輸入是沒有關 系的,模塊 A,B,C 以及 TOP 使用 verilog 代碼輸入的方式也同樣能實現相應的功能,關鍵是 對模塊功能的理解及分類,這無關于編輯和例化模塊的形式。



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 老牛影视av一区二区在线观看 | 日本精品在线播放 | 日韩一区二区在线免费观看 | 伊人伊人| 一区二区精品电影 | 在线观看亚| 国产精品不卡一区 | 黄色片在线 | 国产精品亚洲一区二区三区在线 | 最新国产精品精品视频 | 亚洲精品在线观 | 在线播放一区二区三区 | 国产精品日韩在线观看 | 中文字幕视频网 | 亚洲高清视频一区二区 | 久草精品在线 | 国产欧美日韩精品一区 | 九九在线精品视频 | 国产中文| 97在线超碰 | 欧产日产国产精品99 | 91精品久久久 | 国产精品久久久久一区二区三区 | 中午字幕在线观看 | 在线欧美一区 | 在线日韩 | 最新中文字幕在线 | 国产一区中文字幕 | 欧美综合一区二区三区 | 一级片在线视频 | 亚洲欧美激情精品一区二区 | 色婷婷av一区二区三区软件 | 久久黄色网 | 国产成人影院 | 日韩有码在线播放 | 国产精品成人国产乱 | 九九热免费观看 | 91精品国产91久久久久久吃药 | 成人在线视频一区二区三区 | 91丨九色丨国产在线 | 国产美女在线观看 |