2011年8月12日 星期五

Verilog - 好的coding style

Verilog人人都可以寫,但是要記得一件很重要的事情,verilog必須要有好的coding style,程式碼才能讓一些邏輯分析以及合成的EDA Tool(Design compiler etc.)合出自己如自己所預期的電路,否則常常會合出一些行為跟自己所預期不一樣的電路。

首先最重要的觀念就是,要將負責組合電路的block跟負責時序電路的block分開寫。
在組合電路中使用blocking的敘述,而在時序電路則使用non-blocking的敘述。

舉個例子:
通常數位電路的設計,主要就是在設計一個FSM(finite-state-machine),讓電路根據現在處於什麼state以及input為何來做控制以及轉state的功能。

儲存state的部分屬於時序電路的範疇,因為其有記憶的特性,因此我們把它用non-blocking的方式來描述:

reg state;
reg n_state; //next_state

always@(posedge clk)begin
state<=n_state;
end

這就會在clock來到上升緣(resing edge)的時候,將n_state的值傳給state。

但是state改變之後,他仍然必須根據一些input來決定下個state為何,這部分屬於邏輯判斷的部分,因此用組合電路來實現(blocking敘述):

input control; //input signal
always @ (state) begin
if (control)
n_state=S0 ; //S0:state 0
else
n_state=S1 ; //S1:state 1
end

如此一來,我們就將負責時序電路(flip-flop)以及組合電路的行為分成兩個不同部分來撰寫,這種寫法是一個比較好的coding style,在合成電路的時候比較不會出錯。

沒有留言:

張貼留言

勒式交易策略

權證的交易策略有一種操作方法叫做勒式交易策略(其實這種交易策略跟選擇權是一樣的),今天來介紹一下這種操作的方法。 首先這種交易策略,適合在你 預期你的連結標的會在未來有個大趨勢 (無論是大跌或是大漲),例如總統大選,或是希臘債務 到期日等等。此時你可以買進不同履約價但是到期日一...