FPGA筆記之verilog語言(基礎語法篇)_第1頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、fpga筆記之verilog語言(基礎語法篇)筆記之verilog語言(基礎語法篇)寫在前面:veriloghdl語言是面對硬件的語言,換句話說,就是用語言的形式來描述硬件線路。因此與等軟件語言不同,假如想要在實際的中實現(xiàn),那么在舉行verilog語言編寫時,就需要提前有個硬件電路的構思和主意,同時,在編寫verilog語言時,應當采納可綜合的語句和結構。1. verilog 的基礎結構1.1 verilog設計的基本單元module在數(shù)字電路中,我們經(jīng)常把一些復雜的電路或者具有特定功能的電路封裝起來作為一個模塊用法。以后在運用這種模塊化的封裝時,我們只需要知道:1.模塊的輸入是什么;2.模塊

2、的輸出是什么;3.什么樣的輸入對應什么樣的輸出。而中間輸入是經(jīng)過什么樣的電路轉化為輸出就不是我們在用法時需要特殊重視的問題。當無數(shù)個這樣的模塊互相組合,就能構成一個系統(tǒng),解決一些復雜的問題。verilog語言的基礎結構就是基于這種思想。verilog中最基本的模塊是module,就可以看做是一個封裝好的模塊,我們用verilog來寫無數(shù)個基本模塊,然后再用verilog描述多個模塊之間的接線方式等,將多個模塊組合得到一個系統(tǒng)。那么一個module應當具有哪些要素呢?首先對于一個module,我們應當設計好其各個i/o,以及每個i/o的性質,用于與模塊外部的信號相聯(lián)系,讓用法者知道如何連線。第二

3、,作為開發(fā)者,我們需要自己設計模塊內部的線路來實現(xiàn)所需要的功能。因此需要對模塊內部浮現(xiàn)的變量舉行聲明,同時通過語句、代碼塊等實現(xiàn)模塊的功能。綜上所述,我們把一個module分成以下五個部分:模塊名端口定義i/o解釋內部信號的聲明模塊功能實現(xiàn)例:/module 模塊名 (端口1,端口2,端口3);/i/o解釋/內部信號解釋/模塊功能實現(xiàn)/endmodule/module 模塊名 (端口1,端口2,端口3);/module fredevider (clock,rst,clkout);/i/o解釋/input clock;input rst;output clkout;/內部信號解釋/reg clk

4、out;/模塊功能實現(xiàn)/always(posedge clock or posedge rst)beginif(rst)clkout 進制 數(shù)字 位寬 進制 數(shù)字舉例解釋:8d23 /位寬8 十進制 數(shù)字238b00010111 /位寬8 二進制 數(shù)字238o27 /位寬8 八進制 數(shù)字238h17 /位寬8 十六進制 數(shù)字231234對于任何一個數(shù)字,無論其后面是什么進制,什么數(shù)字,最后都要轉化為指定位寬的二進制數(shù)字來表達。因此有可能在進制表達時,浮現(xiàn)實際的二進制數(shù)字和我們編程所寫的二進制數(shù)字不同。或者其他非標準的表達辦法。下面我們解釋幾種頻繁的狀況:位寬大于實際數(shù)字二進制的寬度位寬大于實際

5、二進制的寬度時,有四種可能:1.二進制數(shù)字最高位為1,高位部分用0補全2.二進制數(shù)字最高位為0,高位部分用0補全3.二進制數(shù)字最高位為x,高位部分用x補全4.二進制數(shù)字最高位為z,高位部分用z補全例如:6b101 /事實上是 0001016b001 /事實上是 0000016bx11 /事實上是 xxxx116bz11 /事實上是 zzzz111234位寬小于實際二進制的寬度當位寬小于實際二進制寬度時,普通狀況下是將超過的位數(shù)舍去,只保留給定位寬內的數(shù),例如:4b101011 /事實上是 10111位寬省略不寫普通狀況下,位寬省略不寫,默認為是32位寬的數(shù),或者按照操作系統(tǒng)和編程軟件的設定來定

6、義。例如:b10111 /位寬為32的二進制數(shù) 代表數(shù)字231數(shù)制位寬都省略不寫這種狀況下,默認為數(shù)字是32位寬的十進制數(shù)。例如23 /位寬為32的十進制數(shù) 代表數(shù)字231下劃線表達法當需要表達的數(shù)字位數(shù)較多時,為了書寫和觀看便利,經(jīng)常用法下劃線符號來輔助表達。采納下劃線將相鄰若干個數(shù)字分隔開,使其表達更清楚。但是注重下劃線只能浮現(xiàn)在數(shù)字中,不能浮現(xiàn)在位寬和進制中,并且數(shù)字的第一位不能是下劃線。例如:16b0100_1011_1101_0110 /正確16b_1110_1101_0101_0001 /錯誤122.1.2 負數(shù)負數(shù)在verilog中的表達是很容易的,挺直在數(shù)字的前面添加符號就表示

7、負數(shù)。但是在實際的二進制編碼中,負數(shù)是通過其正數(shù)的補碼的形式舉行實現(xiàn)的。-8d23 /就是-23,但是在二進制代碼中 是用8b11101001來表示1此時對于一個8位的二進制數(shù),其第一位為符號位,后7位才為有效的數(shù)字位。由此可見,一個二進制,當首位為1時,有可能表示的是一個正數(shù),也有可能表示的是一個負數(shù),那么在實際硬件電路中,如何區(qū)別這兩種狀況呢?普通來說,對于硬件中的信號,硬件處理時是默認為正整數(shù)的,因此當我們輸入一個負值,事實上產(chǎn)生的是我們輸入的值的正數(shù)部分的補碼所表示的正當(這里有點繞,距離來說,我輸入-8d23,得到的是23的補碼8b11101001,這個補碼被硬件默認是正數(shù),即8d2

8、33)。那么我們在舉行二進制的數(shù)據(jù)的變換時,就應當回來其硬件中的表達,然后在此基礎上通過自己的程序來實現(xiàn)當為負數(shù)時的轉化。例如:我之前寫過的粗插補算法if(x_rough15=0) /當插補數(shù)據(jù)為正數(shù)時,將粗插補數(shù)據(jù)舉行四分,并將余數(shù)添加到第一個精插補結果中beginlx1:0=x_rough1:0;x4=(x_rough2);x3=(x_rough2);x2=(x_rough2);x1=(x_rough2)+lx);endelse /當插補數(shù)據(jù)為負數(shù)時,將插補數(shù)據(jù)求補碼,舉行四分等操作后,再將結果求補碼得到負數(shù)(對肯定值舉行操作)beginx_complement15:0=(x_rough1

9、5:0-8b0000000000000001);lx1:0=x_complement1:0;x4=(x_complement2)+8b0000000000000001);x3=(x_complement2)+8b0000000000000001);x2=(x_complement2)+8b0000000000000001);x1=(x_complement2)+lx)+8b0000000000000001);12345678910111213141516這里就是按照最高位是1和0來打算舉行什么樣的數(shù)據(jù)處理??偠灾?,我們要明了,數(shù)據(jù)在硬件中的儲存是默認為正整數(shù)的二進制儲存方式,但是如何取理解這

10、個數(shù),卻是用法這個數(shù)據(jù)的人自己規(guī)定的。這種思想不僅在處理負數(shù)時是這樣的,在遇到小數(shù)、字符等都是這么一個思想。0和1的世界是死的,但是解讀他們的規(guī)章卻是活的。2.1.3 x和z我們都知道0和1代表的含義,但是對于verilog語言來說,還有x和z兩種自立于0和1之外的狀態(tài)。這兩種狀態(tài)分離是未知態(tài)和高阻態(tài)。未知態(tài)x是指,無法確定此時信號的狀態(tài)是1還是0,但是能確定信號是有狀態(tài)的,不是1就是0,且這個狀態(tài)是能夠影響到與其相連的后續(xù)電路的,當我們用電表測量時,其值可能是1,可能是0,取決于被測當初硬件電路的當前狀態(tài)。而高阻態(tài)z是指,當前的信號狀態(tài)既不是1,也不是0,而是沒有狀態(tài),或者可以認為是斷開,即

11、此時信號的狀態(tài)已經(jīng)無法再影響到后續(xù)的電路。而在實際電路中,某一時刻時惟獨1、0、高阻態(tài)三種狀態(tài)。盡管x和z表示的狀態(tài)不是傳統(tǒng)的1和0,但是x和z也能參加到二進制的規(guī)律運算中來。在規(guī)律運算中,x和z滿足如下的邏輯:0 & x = 0 ;1 & x = x ;0 | x = x ;1 | x = 1 ;0 & z = 0 ;1 & z = x ;0 | z = x ;1 | z = 1 ;1234567892.2 實數(shù)型和字符型實數(shù)型和字符型放在一起,由于這兩種數(shù)據(jù)的表達有相像的地方。那就是實數(shù)型或者字符型的數(shù)據(jù)可以在verilog語言中浮現(xiàn),但是卻不能通過硬件表達出來。而是經(jīng)常浮現(xiàn)在指令、顯示等非硬件參加的操作中。這與上面的整數(shù)的表達方式和意義是不同的。2.2.1 實數(shù)實數(shù)可以用十進制來表示,也可以用科學計數(shù)法來表示,例如:12 /表示1223e-3 /表示0.002323e4 /表示230000123雖然我們可以在verilog中寫出這些數(shù)據(jù),但是并不是全部我們寫出來的數(shù)據(jù)都能在硬件中表達。在實際的過程中,全部的科學計數(shù)的表達例如23e-3或者23e4,在硬件中都是0,而硬件中也不能挺直表達小數(shù)。也就是挺直在verilog中寫出來的小數(shù),會被硬件識別為0。但是小數(shù)或者指數(shù)的表達,可以通過用法者

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論