狀態機是用來控制整個執行元件,用來「喊節拍」,告訴什麼時候做什麼事情。
cnt可以看作是狀態機,flag也可以看成是狀態機。狀態機可以不只有乙個。
寫法:寫成兩部分,一部分是時序邏輯d觸發器,另一部分是組合邏輯。如下圖:
要知道,實際中,接收端b和傳送端a的時鐘可能是不一樣的,兩個地方的clk_40k也是有不同的。 所以每乙個週期都會有些誤差。
所以,我們設定:讓串列埠一幀只能發8位,要保證一幀之內累計的誤差不會太大;串列埠傳送速度不快。通過這兩種方法保證不出錯。
同步器而bit_in 和接收端的 clk_40k是沒有什麼時序關係的,是會有誤差存在的,邊沿可能是不對齊的,非同步的,(這裡老師說了兩個名詞,叫不滿足setup 和 hold 時間,說太快了沒怎麼聽清楚,反正就這個意思)所以要使用乙個幾個d觸發器連線在一起組成的同步器,如下圖:
(依然是十分清晰hhh)
最左邊輸入的訊號就是bit_in,一般經過兩個d觸發器後得到的輸出(我又用藍色筆標出來了,打勾的地方)就和時鐘同步的比較好了。就可以讓第乙個d出來的訊號叫delay_1,第二個叫delay_2,delay_2就比較好用了。
我在自己做的時候就已經分析過了,接收端取樣應該在中點處,防止誤碼,但是……在下確實沒想到,這世界上還有各種各樣的其他方式可以產生誤碼 -_-
老師舉的例子:
每個位元週期之中中可能會有毛刺存在,如果毛刺恰好在中點,那麼也會發生誤碼。所以乙個週期裡應該多取樣幾次,取奇數次值,然後少數服從多數。
比如,設三個取樣值sample_0 , sample_1 , sample_2 , 在不同位置採三次。
其實跟在下先前分析的差不了太多,主要就是加上了上面注意的幾點,一些時序要變動了一下,基本思想還是一樣的。而且,不像我之前做的那樣用了乙個 cnt 從0一直計數到399,老師用了兩個計數器clk_cnt 和 bit_cnt ,其中 clk_cnt 是用來
這次老師沒有示範寫**,我頭有點禿……
狀態機範例:
這是別人產生接受開始訊號判斷起始位下降沿的**:
老師說要乙個小時完活……可是在下果然不負眾望的寫了乙個半小時,編譯糾錯又半個小時……
主要是取樣的三個值怎麼判斷上卡住了,我暫時想不出什麼聰明的方法,就用一些異或、與、或邏輯 這樣判斷了一下……反正出結果了(叉腰)。
上圖!
這次雖然沒有在除錯上花很長時間,但是還是要注意乙個地方,simulate的時候,一定要把 enable optimizer 的對勾√給點掉!不然可乙個訊號都出不來。
昨天晚上寫完上面這些累得不行,幾乎十二點了。躺了一會突然,突突然!想到了更好的判斷取樣的方法!我個傻子嘛!
是這樣:
一共有三個取樣值嘛,第一步,判斷任意兩個是不是相等,如果相等就肯定是這個值!如果不相等,就一定是第三個的值!(好像也沒有第二步,就這麼著吧)
這麼這麼簡單的邏輯,我寫了那麼一堆,還用了邏輯與、邏輯或還有異或……好!改完了開心!
然後跟隊友交流了一下,發現自己傳送端的程式寫的不夠高階啊,剛開始我是這樣寫的:
……原來的被我刪掉了……反正就是根據bit_cnt的值,手動給bit_out賦值,雖然很清晰明了,但是不太高階啊……
然後我看了隊友的是用移位器做的,十分高階!
下面是我改了之後的,自己感覺不是很簡潔,有點……亂,先這樣,想想再怎麼改
亂的原因其實是因為如果不這麼複雜,就會導致din_temp在第乙個bit_cnt裡面賦值兩次,導致後面整體的出錯。
然後我又改了改,根據第一次做的crc的思路,讓din_temp跟著send_start 接受賦值:這次應該可以了吧。
好,就這樣!
為什麼單獨把這個列出來呢?
因為在下認為,學習過程中,得到反饋真是太重要了!!!尤其是大學啊,老師的鼓勵比啥都重要!!!
老師也鼓勵在下了!!!(至少我認為是這樣的)
雖然是先指出一點錯誤,hhh,果然人不能偷懶,我覺得題目只說了發一次就可以,所以就沒把計數器清零……hhh,馬上改。
然後,我又問還有嗎(其實就是想被誇一誇,夸夸整潔也行啊),老師說「別的地方都很好」 !!!
我圓滿了。不枉在下花了這麼長時間。^ _ ^
javascrip 第二次課
1.首先 注意正確語句的合法性 多練習 要具有創新 舉一反三 2.背景顏色的變換 1 最主要的 頁面顏色顯示 頁面顯示資訊 document.bgcolor 顏色 解析 document文字顯示資訊 bgcolor 背景顏色 3.例子 利用button來實現當前頁面對應背景的變換 需求分析 1.頁面...
Jquery第二次課
主要用於查詢子元素。eq 獲取子元素裡面的其中某乙個,根據索引來獲取,索引可以是正值也可以是負值,若是負值,倒數 first 獲取第乙個子元素 last 獲取最後乙個子元素 hasclass 根據元素的類名稱來進行過濾的,引數是class名稱,獲取時 log 來判斷某個元素是否具有class名稱,輸...
第二次上機課
老師 teacherguo 提交作業 1 編寫乙個程式,定義圓的半徑,求圓的面積.2 華氏溫度和攝氏溫度互相轉換,從華氏度變成攝氏度你只要減去32,乘以5再除以9就行了,將攝氏度轉成華氏度,直接乘以9,除以5,再加上32即行。知識點 變數和運算子綜合應用 3 已知a,b均是整型變數,寫出將a,b兩個...