大神教你如何做好邏輯設計
11)狀態(tài)機要寫(xiě)成3段式的(這是最標準的寫(xiě)法),即
本文引用地址:http://dyxdggzs.com/article/246996.htm...
always @(posedge clk or negedge rst_n)
...
current_state <= next_state;
...
always @ (current_state ...)
...
case(current_state)
...
s1:
if ...
next_state = s2;
...
...
always @(posedge clk or negedge rst_n)
...
else
a <= 1'b0;
c <= 1'b0;
c <= 1'b0; //賦默認值
case(current_state)
s1:
a <= 1'b0; //由于上面賦了默認值,這里就不用再對b、c賦值了(b、c在該狀態(tài)為0,不會(huì )產(chǎn)生鎖存器,下同)
s2:
b <= 1'b1;
s3:
c <= 1'b1;
default:
...
...
3.ALTERA參考設計準則
1) Ensure Clock, Preset, and Clear configurations are free of glitches.
2) Never use Clocks consisting of more than one level of combinatorial logic.
3) Carefully calculate setup times and hold times for multi-Clock systems.
4) Synchronize signals between flipflops in multi-Clock systems whenthe setup and hold time requirements cannot be met.
5) Ensure that Preset and Clear signals do not contain race conditions.
6) Ensure that no other internal race conditions exist.
7) Register all glitch-sensitive outputs.
Synchronize all asynchronous inputs.
9) Never rely on delay chains for pin-to-pin or internal delays.
10)Do not rely on Power-On Reset. Use a master Reset pin to clear all flipflops.
11)Remove any stuck states from state machines or synchronous logic.
其它方面的規范一時(shí)沒(méi)有想到,想到了再寫(xiě),也歡迎大家補充。
時(shí)序是設計出來(lái)的
我的boss有在華為及峻龍工作的背景,自然就給我們講了一些華為及altera做邏輯的一些東西,而我們的項目規范,也基本上是按華為的那一套去做。在工作這幾個(gè)月中,給我感觸最深的是華為的那句話(huà):時(shí)序是設計出來(lái)的,不是仿出來(lái)的,更不是湊出來(lái)的。
在我們公司,每一個(gè)項目都有很?chē)栏竦脑u審,只有評審通過(guò)了,才能做下一步的工作。以做邏輯為例,并不是一上來(lái)就開(kāi)始寫(xiě)代碼,而是要先寫(xiě)總體設計方案和邏輯詳細設計方案,要等這些方案評審通過(guò),認為可行了,才能進(jìn)行編碼,一般來(lái)說(shuō)這部分工作所占的時(shí)間要遠大于編碼的時(shí)間。
總體方案主要是涉及模塊劃分,一級模塊和二級模塊的接口信號和時(shí)序(我們要求把接口信號的時(shí)序波形描述出來(lái))以及將來(lái)如何測試設計。在這一級方案中,要保證在今后的設計中時(shí)序要收斂到一級模塊(最后是在二級模塊中)。什么意思呢?我們在做詳細設計的時(shí)候,對于一些信號的時(shí)序肯定會(huì )做一些調整的,但是這種時(shí)序的調整最多只能波及到本一級模塊,而不能影響到整個(gè)設計。記得以前在學(xué)校做設計的時(shí)候,由于不懂得設計時(shí)序,經(jīng)常因為有一處信號的時(shí)序不滿(mǎn)足,結果不得不將其它模塊信號的時(shí)序也改一下,搞得人很郁悶。
在邏輯詳細設計方案這一級的時(shí)候,我們已經(jīng)將各級模塊的接口時(shí)序都設計出來(lái)了,各級模塊內部是怎么實(shí)現的也基本上確定下來(lái)了。
由于做到這一點(diǎn),在編碼的時(shí)候自然就很快了,最重要的是這樣做后可以讓設計會(huì )一直處于可控的狀態(tài),不會(huì )因為某一處的錯誤引起整個(gè)設計從頭進(jìn)行。
如何提高電路工作頻率
對于設計者來(lái)說(shuō),我們當然希望我們設計的電路的工作頻率(在這里如無(wú)特別說(shuō)明,工作頻率指FPGA片內的工作頻率)盡量高。我們也經(jīng)常聽(tīng)說(shuō)用資源換速度,用流水的方式可以提高工作頻率,這確實(shí)是一個(gè)很重要的方法,今天我想進(jìn)一步去分析該如何提高電路的工作頻率。
我們先來(lái)分析下是什么影響了電路的工作頻率。
我們電路的工作頻率主要與寄存器到寄存器之間的信號傳播時(shí)延及clock skew有關(guān)。在FPGA內部如果時(shí)鐘走長(cháng)線(xiàn)的話(huà),clock skew很小,基本上可以忽略, 在這里為了簡(jiǎn)單起見(jiàn),我們只考慮信號的傳播時(shí)延的因素。
信號的傳播時(shí)延包括寄存器的開(kāi)關(guān)時(shí)延、走線(xiàn)時(shí)延、經(jīng)過(guò)組合邏輯的時(shí)延(這樣劃分或許不是很準確,不過(guò)對分析問(wèn)題來(lái)說(shuō)應該是沒(méi)有可以的),要提高電路的工作頻率,我們就要在這三個(gè)時(shí)延中做文章,使其盡可能的小。
DIY機械鍵盤(pán)相關(guān)社區:機械鍵盤(pán)DIY
塵埃粒子計數器相關(guān)文章:塵埃粒子計數器原理
評論