国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

明德?lián)PFPGA連載課程第一階段第三章VERILOG(2)

發(fā)布時間:2018-11-6 09:19    發(fā)布者:luckyb1
3.2 數(shù)字3.2.1數(shù)字表示方式
      在Verilog中的數(shù)字表示方式,最常用的格式是:<位寬>’<基數(shù)><數(shù)值>,如,4’b1011。
      位寬:描述常量所含位數(shù)的十進(jìn)制整數(shù),是可選項。4’b1011中的4就是位寬。通俗理解就是4根線。如果沒有這一項,可以從常量的值推斷出。例如’b1011可知位寬是4;’b10010可推斷出位寬為5。
       基數(shù):表示數(shù)值是多少進(jìn)制。可以是b,B,d,D,o,O,h或者H,分別表示二進(jìn)制、十進(jìn)制、八進(jìn)制和十六進(jìn)制。如果沒有此項,則缺省默認(rèn)為十進(jìn)制數(shù)。
      例如,二進(jìn)制的4’b1011,可以寫成十進(jìn)制的4’d11,也可以寫成十六進(jìn)制的4’hb,或者八進(jìn)制的4’o13,還可以不寫基數(shù)直接寫成11。不管怎么樣,只要二進(jìn)數(shù)相同,寫成十進(jìn)制、八進(jìn)制和十六進(jìn)制,都是同樣的數(shù)字。
       數(shù)值:是由基數(shù)所決定的表示常量真實值的一串ASCII碼。如果基數(shù)定義為 b或B,數(shù)值可以是0,1,x,X,z或Z。如果基數(shù)定義為 o或O,數(shù)值還可以是2,3,4,5,6,7。如果基數(shù)定義為 h或H,數(shù)值還可以是8,9,a,b,c,d,e,f,A,B,C,D,E,F(xiàn)。對于基數(shù)為d或者D的情況,數(shù)值符可以是任意的十進(jìn)制數(shù):0到9。但不可以是x或z。
      例如,4’b12是錯誤的,因為b表示二進(jìn)制,數(shù)值只能是0、1、x或者z,不有是2。
      32’h12等同于32’h00000012,也就是數(shù)值未寫完整時,高位補0。


3.2.2二進(jìn)制是基礎(chǔ)
      在數(shù)字電路中,如果芯片A給芯片B傳遞數(shù)據(jù),例如傳遞0或者1信息。可以將芯片A和芯片B,通過一個管腳進(jìn)行相連。然后由芯片A控制該管腳為高電平或者低電平,通過高低電平來表示0和1。例如,芯片B檢測到該管腳為低電平時,表示收到0;當(dāng)芯片B檢測到該管腳為高電平時,表示收到1。




      如果用低電平表示收到1,用高電平表示收到0,這可不可以呢?當(dāng)然可以,只要芯片A和芯片B事先協(xié)定。芯片A要發(fā)數(shù)字1時,會將該管腳置為低電平。芯片B檢測到該管腳為低電平,知道收到了數(shù)字1,通信完成。





       一個管腳擁有高低電平兩種狀態(tài),可以分別表示數(shù)字0和1兩種情況。如果芯片A要發(fā)數(shù)字0、1、2、3給芯片B,那該怎么辦呢?
       可以讓芯片A和芯片B連接兩根管腳,即兩條線,a和b。當(dāng)兩條線都為低電平時,表示發(fā)送數(shù)字0;當(dāng)a為高電平,b為低電平時,表示發(fā)送數(shù)字1;當(dāng)a為低電平,b為高電平時,表示發(fā)送數(shù)字2;當(dāng)兩條線都是高電平時,表示數(shù)字3。





       按照同樣的道理,芯片A要發(fā)送數(shù)據(jù)4,5,6,7給芯片B的時候,只要再添加一條線就可以了。三根線一共有8種狀態(tài),可以表示8個數(shù)字。
      綜上所述,我們可能通過線的不同電平狀態(tài),表示不同的含義。有多少個不同狀態(tài),就可以表示多少個數(shù)字。


       如果芯片A要發(fā)送+1,-1,0,+2等數(shù)字給芯片B,這里有正負(fù)了,那又該如何表示呢?參考前面的思想,線的高低電平表示的含義,是由芯片雙方向事先約定好的。既然是這樣,那么我們拿一根線出來,例如低電平表示正數(shù),高電平表示負(fù)數(shù)。



       上面就是三根線,我們用線c表示正負(fù),0表示正數(shù),1表示負(fù)數(shù)。用線a和線b表示數(shù)值。

       3’b111,可以解釋為十進(jìn)制數(shù)7,也可以解釋為有符號數(shù)原碼“-3”,也可以解釋為有符號數(shù)補碼“-1”,這取決于工程師對二進(jìn)制數(shù)的定義。只要這個定義不影響到電路之間的通信那就絕對不會有問題。
       所以,數(shù)字中的“0”和“1”不僅可以表示含義,也可以表示其他意義,如正負(fù)符號等。同樣的道理,

       在數(shù)字電路中,二進(jìn)制數(shù)是其他如八進(jìn)制、十進(jìn)制、十六進(jìn)制、有符號數(shù)、無符號數(shù)、小數(shù)等的根本。在FPGA設(shè)計中,不清楚小數(shù)、有符號數(shù)的計算方法,最根本的原因是不清楚這些數(shù)據(jù)所對應(yīng)的二進(jìn)制值。只要理解了它所對應(yīng)的二進(jìn)制值,很多問題都可以解決。
      例如,有初學(xué)者經(jīng)常問,F(xiàn)PGA中如何實現(xiàn)小數(shù)計算,如“0.5+0.25”這個功能。
首先,眾所周知的,0.5+0.25的結(jié)果為0.75。
      其次,我們可以考慮,0.5、0.25和0.75用二進(jìn)制該如何表示?這取決于工程師的做法,因為這種表示方法有很多種,例如定點小數(shù),浮點小數(shù),甚至如前面所討論,用幾根線自行來定義,只要能正常通信,那就絕對沒有問題。
      假設(shè),某工程師用三根線,自行定義了二進(jìn)制值所表示的小數(shù)值。



      為了說明二進(jìn)制值的意義是可以隨便定義的,我特意將數(shù)字順序打亂。當(dāng)然,有讀者可能說為什么只有這幾種小數(shù)呢?這是因為我假定本系統(tǒng)就只有這幾種數(shù)字,如果想表示更多數(shù)字,那就增加線就行了。
      有了上面定義之后,要實現(xiàn)“0.5+0.25”就很容易了,其實就是3’b001和3’b100“相加”,期望得到3’b010。如果我們直接使用3’b001 + 3’b100,結(jié)果為“101”了,不是想要的結(jié)果。那怎么辦呢?可以這么寫:



     當(dāng)然,這是其中一種寫法。總之,只要能實現(xiàn)所對應(yīng)的功能,結(jié)果正確就可以。
有讀者問,按上面的表格0.1+0.8應(yīng)該為0.9,但上面沒有0.9的表示。這個其實是設(shè)計者這個表格定義有缺陷,或者設(shè)計者認(rèn)為不會出現(xiàn)這個情況吧。總之,筆者要表達(dá)的是,只要定義好所對應(yīng)的二進(jìn)制數(shù),很多功能是很容易設(shè)計的。

      當(dāng)然,實際的工程中,我們通常會遵守約定成俗的做法,沒必要自己搞得另類。例如下面是常用的定點小數(shù)的定義。


      現(xiàn)在要實現(xiàn)0+0.5=0.5,也就是3’b000和3’b100相加,期望能得到3’b100。我們發(fā)現(xiàn)直接用二進(jìn)制3’b000+3’b100就可以得到3’b100。
      要實現(xiàn)0.125+0.75=0.8725,也就是3’b001和3’b110相加,期望能得到3’b111。我們發(fā)現(xiàn)直接用二進(jìn)制3’b001+3’b110就可以得到3’b111。  
      要0.5+0.75=1.25,這個1.25已經(jīng)超出了表示范圍,要不就增加信號位寬,要不只能表示小數(shù)位。如果只是表示小數(shù)位,那結(jié)果就是0.25。也就是3’b100和3’b110相加,期望得到3’b010。我們發(fā)現(xiàn)3’b100 + 3’b110 = 4’b1010,用3位表示就是3’b010,也就是0.25了。
      綜上所述,對于定點小數(shù)的計算很簡單,就是直接相加。

3.2.3不定態(tài)
      前面講過,數(shù)字電路只有高電平和低電平,分別表示1和0。但代碼中經(jīng)常能看到x和z,如1’bx,1’bz。那么這個x和z是什么電平呢?答案是沒有實際的電平來對應(yīng)。這個x和z是更多地用來表示設(shè)計者的意圖或者用于仿真目的,告訴仿真器和綜合器怎么解釋這段代碼。
      X態(tài),稱之為不定態(tài),設(shè)計者常用于判斷條件,用于告訴綜合工具,設(shè)計者不關(guān)心它的電平是多少,是0還是1都可以。



上面的例子,條件是din==4’b10x0,這個條件等價于din==4’b1000||din==4’b1010,其中“||”是“或”符號。


      明德?lián)P則建議,直接寫成din==4’b1000||din==4’b1010,好于寫成“din==4’b10x0”,直接簡單明了。
      仿真的時候,有些信號產(chǎn)生了不定態(tài),那么設(shè)計者就要認(rèn)真分析,這個不定態(tài)是不是應(yīng)該的。如果真的不關(guān)心它是0還是1,那么可以不解決。但明德?lián)P建議,所有信號都不應(yīng)該處于不定態(tài),是0還是1,寫清楚,不要給設(shè)計添加“思考”的麻煩。
3.2.4高阻態(tài)
      Z態(tài),一般稱之為高阻態(tài),表示設(shè)計者不驅(qū)動這個信號(既不給0也不給1),通常用于三態(tài)門接口當(dāng)中。


      上圖就是三態(tài)總線的應(yīng)用案例。圖中的連接總線對于CPU和FPGA來說,既當(dāng)作輸入又當(dāng)作輸出,是雙向接口。一般的硬件電路中,會將該線接上一個上拉電阻(弱上拉)或下拉電阻(弱下拉)。
      當(dāng)CPU和FPGA都不驅(qū)動該總線時,A點保持為高電平。當(dāng)FPGA不驅(qū)動該總線,CPU驅(qū)動該總線時,A點的值就由CPU決定。當(dāng)CPU不驅(qū)動該總線,F(xiàn)PGA驅(qū)動該總線時,A點的值就由FPGA決定。FPGA和CPU不能同時驅(qū)動該總線,否則A的電平就不確定了。通常FPGA和CPU何時驅(qū)動總線,是按協(xié)議事先協(xié)商好的。


      上圖是典型的I2C的時序。I2C的總線SDA就是一個三態(tài)信號。I2C協(xié)議已規(guī)定好上面的時間中,哪段時間是由主設(shè)備驅(qū)動,哪段時間是由從設(shè)備驅(qū)動,雙方都要遵守協(xié)議,不能存在同時驅(qū)動的情況。

      那么FPGA在設(shè)計中,是如何做到“不驅(qū)動”這一行為呢?這是因為FPGA內(nèi)部有三態(tài)門。



      三態(tài)門是一個硬件,上圖是它的典型結(jié)構(gòu)。三態(tài)門有四個接口,例如上圖中的寫使能wr_en、寫數(shù)據(jù)wr_data、讀數(shù)據(jù)rd_data和與外面器件相連的三態(tài)信號data。
      注意寫使能信號,當(dāng)該信號有效時,三態(tài)門會將wr_data的值賦給三態(tài)線data,此時data的值由wr_data決定,當(dāng)wr_data為0時,data值就為0;當(dāng)wr_data為1時,data值就為1。
      當(dāng)寫使能信號無效時,則不管wr_data值是多少,都不會對外面的data值有影響,也就是不驅(qū)動。
      那么在Verilog中,是通過如下兩行代碼來描述這一功能的。



      綜合器看到這兩行代碼,就知道要綜合成三態(tài)門了。
      這個高阻z的作用就在于這里。而且注意到,硬件上用三態(tài)線是為了減少管腳,而在FPGA內(nèi)部沒有必要減少連線,所以使用三態(tài)信號是沒有意義的。
      也就是說,明德?lián)P的設(shè)計建議,F(xiàn)PGA內(nèi)部不要使用高阻態(tài)“z”,沒有必要給自己添加“思考”的麻煩。當(dāng)然,使用了也不會報錯,也能實現(xiàn)功能。
      總結(jié)一點,高阻態(tài)“z”是表示“不驅(qū)動總線”這個行為,實際上數(shù)字電路就是高電平或者低電平,不存在其他電平的情況。

3.2 數(shù)據(jù)類型
      Verilog HDL的信號類型有很多種,但主要包括兩種數(shù)據(jù)類型:線網(wǎng)類型(net type) 和寄存器類型(reg type)。明德?lián)P的設(shè)計,也是只會使用這兩個類型。

3.2.1線網(wǎng)類型wire
      線網(wǎng)類型用于對結(jié)構(gòu)化器件之間的物理連線的建模。如器件的管腳,內(nèi)部器件如與門的輸出等。以上面的加法器為例,輸入信號A,B是由外部器件所驅(qū)動,異或門X1的輸出S1是與異或門X2輸入腳相連的物理連接線,它由異或門X1所驅(qū)動。
      由于線網(wǎng)類型代表的是物理連接線,因此它不存貯邏輯值。必須由器件所驅(qū)動。通常由assign 進(jìn)行賦值。如 assign  A =  B ^ C;

      wire 類型定義語法如下:
      wire [msb: lsb] wire1, wire2, . . .,wireN;
Ø  msb 和lsb 定義了范圍,表示了位寬。例如[7:0]是8位位寬,也就是可以表示成8’b0至8’b1111_1111;
Ø  msb和lsb必須為常數(shù)值;
Ø  如果沒有定義范圍,缺省值為1位;
Ø  信號沒有定義數(shù)據(jù)類型時,缺省為wire 類型。
Ø  對數(shù)組類型,請按降序方式,如[7:0] ;不要寫成[0:7]。

      wire [3:0]   Sat; // S a t 為4 位線型信號
      wire Cnt; //1 位線型信號
      wire [0:31]   Kisp, Pisp, Lisp ;// Kisp, Pisp, Lisp 都是32位的線型信號,不建議這樣定義。

3.3.2寄存器類型reg
      reg 是最常用的寄存器類型,寄存器類型通常用于對存儲單元的描述,如D型觸發(fā)器、ROM 等。存儲器類型的信號當(dāng)在某種觸發(fā)機制下分配了一個值,在分配下一個值之時保留原值。但必須注意的是,reg 類型的變量,不一定是存儲單元,如在always 語句中進(jìn)行描述的必須用reg 類型的變量。
      reg 類型定義語法如下:
      reg  [msb: lsb] reg1, reg2, . . . r e g N;
Ø  msb 和lsb 定義了范圍,表示了位寬。例如[7:0]是8位位寬,也就是可以表示成8’b0至8’b1111_1111;
Ø  msb和lsb必須為常數(shù)值;
Ø  如果沒有定義范圍,缺省值為1位;
Ø  信號沒有定義數(shù)據(jù)類型時,缺省為wire 類型,不是reg型。
Ø  對數(shù)組類型,請按降序方式,如[7:0] ;不要寫成[0:7]。

例如:
reg [3:0]   Sat; // S a t 為4 位寄存器。
reg Cnt; //1 位寄存器。
reg [1:32]  Kisp, Pisp, Lisp ;

3.3.3Wire和reg定義的場合區(qū)分
      Reg型信號不一定生成寄存器。那么什么時候使用wire類型,什么時候用reg類型,明德?lián)P總結(jié)出一套方法:在本模塊中,使用always設(shè)計的信號都定義為reg型;其他都用wire型。



       上面代碼中,cnt1是用always設(shè)計的,所以要用reg型。Add_cnt1和end_cnt不是由always產(chǎn)生的,所以定義為wire型。



      上面代碼中,x是用always設(shè)計的,所以要定義為reg型。注意,實際的電路中,x不是寄存器,但我們?nèi)匀欢x為reg型。
      上面是例化的代碼,其中df是例化模塊的輸出。由于df不是由always產(chǎn)生的,而是例化產(chǎn)生的,所以要定義成wire型。
      注:(本博客連載的內(nèi)容將出版成圖書,并將錄制視頻,免費公開學(xué)習(xí),歡迎大家留意。本連載前面是基礎(chǔ)部分,與一般教材無異,后面是項目實踐,是本連載的特色。如果你有一定的基礎(chǔ)(能看懂verilog代碼即可),那么可跳過前面部分,直接學(xué)習(xí)后面的項目實踐。
      項目實踐將有16個,從基礎(chǔ)的閃爍燈開始,到最后是信號處理的項目,如信號發(fā)生器、FIR濾波器、插值濾波器和AD采集等。
      本連載學(xué)習(xí)效果:不難看能懂代碼,還能知道每一行代碼怎么寫,怎么設(shè)計


本文地址:http://www.qingdxww.cn/thread-549585-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點和對其真實性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區(qū)
  • 基于CEC1712實現(xiàn)的處理器SPI FLASH固件安全彈性方案培訓(xùn)教程
  • 安靜高效的電機控制——這才是正確的方向!
  • 想要避免發(fā)生災(zāi)難,就用MPLAB® SiC電源仿真器!
  • 為何選擇集成電平轉(zhuǎn)換?
  • 貿(mào)澤電子(Mouser)專區(qū)
關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美人成片免费看视频不卡 | 91先生在线观看 | 黄色成人影视 | 欧美一级视频 | 在线观看不卡视频 | 国内精品久久国产大陆 | 日韩免费 | 日韩欧美亚洲另类 | 97视频在线免费播放 | 99热都是精品 | 亚洲第一成年网 | 国产精品剧情原创麻豆国产 | 成人福利社区 | 天堂网视频在线 | 明星三级国产免费播放 | 日本成人不卡视频 | 99免费观看视频 | 亚洲 欧美 日韩 丝袜 另类 | 亚洲午夜在线视频 | 特级a级毛片| 女教师韩国无删减完整版 | 哦好紧| 国产小视频免费观看 | 扫黑决战免费完整版高清 | 香蕉在线观看 | 五月天黄网 | 亚洲天堂在线观看视频 | 国产三级福利 | juc-398中文字幕 | 在线观看免费av网 | 在线亚洲黄色 | 特级一级毛片免费完整版视频 | 国产成人精品久久免费动漫 | 天堂中文在线乱码 | 亚洲成年 | www.色在线| 亚洲激情综合 | 视频在线观看国产 | 国产精品一区二区三区免费视频 | 天天草天天草 | 免费看黄视频网站 |