|
可綜合的語(yǔ)法子集3 本文節(jié)選自特權(quán)同學(xué)的圖書《FPGA設(shè)計(jì)實(shí)戰(zhàn)演練(邏輯篇)》 配套例程下載鏈接:http://pan.baidu.com/s/1pJ5bCtt (1) 多語(yǔ)句定義:begin…end。(特權(quán)同學(xué),版權(quán)所有) 通俗的說,它就是C語(yǔ)言里的“{ }”,用于單個(gè)語(yǔ)法的多個(gè)語(yǔ)句定義。其使用示例如下: // 含有命名的begin語(yǔ)句 begin : <塊名> // 可選申明部分 // 具體邏輯 end // 基本的begin語(yǔ)句 begin // 可選申明部分 // 具體邏輯 end (2) 比較判斷:if…else, case…default…endcase。(特權(quán)同學(xué),版權(quán)所有) 判斷語(yǔ)法if…else及case語(yǔ)句是最常用的功能語(yǔ)法,其基本的使用示例如下: // if判斷語(yǔ)句 if(<判斷條件>) begin // 具體邏輯 end // if…else判斷語(yǔ)句 if(<判斷條件>) begin // 具體邏輯1 end else begin // 具體邏輯2 end // if…else if…else判斷語(yǔ)句 if(<判斷條件1>) begin // 具體邏輯1 end else if(<判斷條件2>) begin // 具體邏輯2 end else begin // 具體邏輯3 end // case語(yǔ)句 case(<判斷變量>) <取值1>: <具體邏輯1> <取值2>: <具體邏輯2> <取值3>: <具體邏輯3> default: <具體邏輯4> endcase (3) 循環(huán)語(yǔ)句:for。(特權(quán)同學(xué),版權(quán)所有) 用的也比較少,但也會(huì)在一些特定的設(shè)計(jì)中使用它。其示例如下: // for語(yǔ)句 for(<變量名> = <初值>; <判斷表達(dá)式>; <變量名> = <新值>) begin // 具體邏輯 end (4) 任務(wù)定義:task…endtask。(特權(quán)同學(xué),版權(quán)所有) Task更像是C語(yǔ)言中的子函數(shù),task中可以有input、output和inout端口作為出入口參數(shù),它可以用于實(shí)現(xiàn)一個(gè)時(shí)序控制。task沒有返回值,因此不可以用在表達(dá)式中。其基本用法如下: task // 可選申明部分,如本地變量申明 begin // 具體邏輯 end endtask (5) 連續(xù)賦值:assign,問號(hào)表達(dá)式(?:)。(特權(quán)同學(xué),版權(quán)所有) Assign用于直接互聯(lián)不同的信號(hào)或直接給wire變量賦值。其基本用法如下: assign “?:”表達(dá)式就是簡(jiǎn)單的if…else語(yǔ)句,但更多的用在組合邏輯中。其基本用法如下: (判斷條件) ? (判斷條件為真時(shí)的邏輯處理) : (判斷條件為假時(shí)的邏輯處理) (6) always模塊:(敏感表可以為電平、沿信號(hào)posedge/negedge;通常和@連用)。(特權(quán)同學(xué),版權(quán)所有) always有多種用法,在組合邏輯中,其用法如下: always@(*) begin // 具體邏輯 end always后若有沿信號(hào)(上升沿posedge,下降沿negedge)申明,則多為時(shí)序邏輯,其基本用法如下: // 單個(gè)沿觸發(fā)的時(shí)序邏輯 always@(<沿變化>) begin //具體邏輯 End // 多個(gè)沿觸發(fā)的時(shí)序邏輯 always@(<沿變化1> or <沿變化2>) begin //具體邏輯 End (7) 運(yùn)算操作符:各種邏輯操作符、移位操作符、算術(shù)操作符大多是可綜合的。(特權(quán)同學(xué),版權(quán)所有) Verilog中絕大多數(shù)運(yùn)算操作符都是可綜合的,其列表如下: + // 加 - // 減 ! // 邏輯非 ~ // 取反 & // 與 ~& // 與非 | // 或 ~| // 或非 ^ // 異或 ^~ // 同或 ~^ // 同或 * // 乘,是否可綜合看綜合工具 / // 除,是否可綜合看綜合工具 % // 取模 << // 邏輯左移 >> // 邏輯右移 < // 小于 <= // 小等于 > // 大于 >= // 大等于 == // 邏輯相等 != // 邏輯不等于 && // 邏輯與 || // 邏輯或 (8) 賦值符號(hào):= 和 <=。(特權(quán)同學(xué),版權(quán)所有) 阻塞和非阻塞賦值,在具體設(shè)計(jì)中是很有講究的,我們會(huì)在具體實(shí)例中掌握他們的不同用法。(特權(quán)同學(xué),版權(quán)所有) 可綜合的語(yǔ)法是verilog可用語(yǔ)法里很小的一個(gè)子集,硬件設(shè)計(jì)的精髓就是力求用最簡(jiǎn)單的語(yǔ)句描述最復(fù)雜的硬件,這也正是硬件描述語(yǔ)言的本質(zhì)。對(duì)于做RTL級(jí)設(shè)計(jì)來說,掌握好上面這些基本語(yǔ)法是很重要。(特權(quán)同學(xué),版權(quán)所有) |