大神教你如何做好邏輯設(shè)計(jì)
11)狀態(tài)機(jī)要寫成3段式的(這是最標(biāo)準(zhǔn)的寫法),即
本文引用地址:http://m.butianyuan.cn/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; //賦默認(rèn)值
case(current_state)
s1:
a <= 1'b0; //由于上面賦了默認(rèn)值,這里就不用再對(duì)b、c賦值了(b、c在該狀態(tài)為0,不會(huì)產(chǎn)生鎖存器,下同)
s2:
b <= 1'b1;
s3:
c <= 1'b1;
default:
...
...
3.ALTERA參考設(shè)計(jì)準(zhǔn)則
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.
其它方面的規(guī)范一時(shí)沒(méi)有想到,想到了再寫,也歡迎大家補(bǔ)充。
時(shí)序是設(shè)計(jì)出來(lái)的
我的boss有在華為及峻龍工作的背景,自然就給我們講了一些華為及altera做邏輯的一些東西,而我們的項(xiàng)目規(guī)范,也基本上是按華為的那一套去做。在工作這幾個(gè)月中,給我感觸最深的是華為的那句話:時(shí)序是設(shè)計(jì)出來(lái)的,不是仿出來(lái)的,更不是湊出來(lái)的。
在我們公司,每一個(gè)項(xiàng)目都有很嚴(yán)格的評(píng)審,只有評(píng)審?fù)ㄟ^(guò)了,才能做下一步的工作。以做邏輯為例,并不是一上來(lái)就開始寫代碼,而是要先寫總體設(shè)計(jì)方案和邏輯詳細(xì)設(shè)計(jì)方案,要等這些方案評(píng)審?fù)ㄟ^(guò),認(rèn)為可行了,才能進(jìn)行編碼,一般來(lái)說(shuō)這部分工作所占的時(shí)間要遠(yuǎn)大于編碼的時(shí)間。
總體方案主要是涉及模塊劃分,一級(jí)模塊和二級(jí)模塊的接口信號(hào)和時(shí)序(我們要求把接口信號(hào)的時(shí)序波形描述出來(lái))以及將來(lái)如何測(cè)試設(shè)計(jì)。在這一級(jí)方案中,要保證在今后的設(shè)計(jì)中時(shí)序要收斂到一級(jí)模塊(最后是在二級(jí)模塊中)。什么意思呢?我們?cè)谧鲈敿?xì)設(shè)計(jì)的時(shí)候,對(duì)于一些信號(hào)的時(shí)序肯定會(huì)做一些調(diào)整的,但是這種時(shí)序的調(diào)整最多只能波及到本一級(jí)模塊,而不能影響到整個(gè)設(shè)計(jì)。記得以前在學(xué)校做設(shè)計(jì)的時(shí)候,由于不懂得設(shè)計(jì)時(shí)序,經(jīng)常因?yàn)橛幸惶幮盘?hào)的時(shí)序不滿足,結(jié)果不得不將其它模塊信號(hào)的時(shí)序也改一下,搞得人很郁悶。
在邏輯詳細(xì)設(shè)計(jì)方案這一級(jí)的時(shí)候,我們已經(jīng)將各級(jí)模塊的接口時(shí)序都設(shè)計(jì)出來(lái)了,各級(jí)模塊內(nèi)部是怎么實(shí)現(xiàn)的也基本上確定下來(lái)了。
由于做到這一點(diǎn),在編碼的時(shí)候自然就很快了,最重要的是這樣做后可以讓設(shè)計(jì)會(huì)一直處于可控的狀態(tài),不會(huì)因?yàn)槟骋惶幍腻e(cuò)誤引起整個(gè)設(shè)計(jì)從頭進(jìn)行。
如何提高電路工作頻率
對(duì)于設(shè)計(jì)者來(lái)說(shuō),我們當(dāng)然希望我們?cè)O(shè)計(jì)的電路的工作頻率(在這里如無(wú)特別說(shuō)明,工作頻率指FPGA片內(nèi)的工作頻率)盡量高。我們也經(jīng)常聽說(shuō)用資源換速度,用流水的方式可以提高工作頻率,這確實(shí)是一個(gè)很重要的方法,今天我想進(jìn)一步去分析該如何提高電路的工作頻率。
我們先來(lái)分析下是什么影響了電路的工作頻率。
我們電路的工作頻率主要與寄存器到寄存器之間的信號(hào)傳播時(shí)延及clock skew有關(guān)。在FPGA內(nèi)部如果時(shí)鐘走長(zhǎng)線的話,clock skew很小,基本上可以忽略, 在這里為了簡(jiǎn)單起見,我們只考慮信號(hào)的傳播時(shí)延的因素。
信號(hào)的傳播時(shí)延包括寄存器的開關(guān)時(shí)延、走線時(shí)延、經(jīng)過(guò)組合邏輯的時(shí)延(這樣劃分或許不是很準(zhǔn)確,不過(guò)對(duì)分析問(wèn)題來(lái)說(shuō)應(yīng)該是沒(méi)有可以的),要提高電路的工作頻率,我們就要在這三個(gè)時(shí)延中做文章,使其盡可能的小。
DIY機(jī)械鍵盤相關(guān)社區(qū):機(jī)械鍵盤DIY
塵埃粒子計(jì)數(shù)器相關(guān)文章:塵埃粒子計(jì)數(shù)器原理
評(píng)論