【正文】
連續(xù)輸入數(shù)據(jù)處理 Greatest Common Divisor 最大公約數(shù) Combined adder and subtractor 組合加法器 作者:何小威 齊樹波 胡冰 王淼 時(shí)間: 連續(xù)輸入數(shù)據(jù)處理 ?題目 ?設(shè)計(jì)思想 ?FSM狀態(tài)圖 ?程序及測試代碼 ?仿真結(jié)果 ?綜合分析 ?設(shè)計(jì)感悟 試設(shè)計(jì)一個(gè)模塊 ( 寫出 V e r i l og 描述,模擬并綜合 ) ,完成如下功能: 模塊的數(shù)據(jù)以串行方式輸入,以輸入控制信號(hào) S t a r t= 1 表示輸入數(shù)據(jù)有效,并以 8 ’ b0 表示一組輸入數(shù)據(jù)的結(jié)束。 模塊根據(jù)輸入數(shù)據(jù)的數(shù)目(連續(xù)串行輸入的輸入數(shù)據(jù)數(shù)目不超過 20 個(gè))決定其具體操作類型,即: ? ? 若輸入數(shù)據(jù)為 4 個(gè),依次為 x x x x4,則 y4 = x1*x2 + x1*x3 +x1*x4 +x2*x3 + x2*x4 + x3*x4, 否則 y4為高阻態(tài); ? ? 若輸入數(shù)據(jù)為 3 個(gè),依次為 x x x3,則 y3 = x1*x2 + x1*x3 +x2*x3, 否則 y3為高阻態(tài); ? ? 若輸入數(shù)據(jù)少于 3 個(gè)或多于 4 個(gè),則將每一個(gè)輸入數(shù)據(jù) xi分為高 4 位 xih和低 4 位 xil并相乘, y = Σi = 1i = n( xih*xil) 否則 y 為高阻態(tài)。 輸出 D one 表示一次數(shù)據(jù)處理結(jié)束,其有效電平為高,維持一個(gè)時(shí)鐘周期。 S t a rt S e ri a l _ i n y 4 y 3 y D o n e 對題目的幾點(diǎn)說明 ? 1,當(dāng) Start信號(hào)變?yōu)榈偷臅r(shí)候,表示輸入數(shù) 據(jù)無效,系統(tǒng)回到初始狀態(tài)。 ? 2,當(dāng) Rst信號(hào)變?yōu)榈偷臅r(shí)候,系統(tǒng)復(fù)位。 ? 3,數(shù)據(jù)輸入的過程中,系統(tǒng)可以在任意時(shí)刻復(fù)位。 ?4,輸入數(shù)據(jù)人為地不超過 20個(gè)。 基本設(shè)計(jì)思想概述 ?時(shí)序題目,有結(jié)果的輸出延時(shí)問題。 ?根據(jù)具體的性能要求來決定是在數(shù)據(jù)輸入結(jié)束后立刻流出結(jié)果,還是允許延時(shí)若干時(shí)鐘周期后再流出結(jié)果,在我們小組的設(shè)計(jì)中,采取盡快流出結(jié)果的設(shè)計(jì)方式。 ?數(shù)據(jù)一邊輸入一邊處理,充分利用乘法器和加法器,通過狀態(tài)圖控制結(jié)果輸出選擇。 ?將邏輯表達(dá)式改寫 ?Y4=x1*(x2+x3+x4)+x2*(x3+x4)+x3*x4 ?Y3=x1*(x2+x3)+x2*x3 ?考慮使用兩個(gè)數(shù)據(jù)通路同時(shí)對輸入數(shù)據(jù)進(jìn)行處理,最后由數(shù)據(jù)選擇器選擇輸出結(jié)果 ?如下圖 各站的描述 S e r i a l _i n c l k c l k c l k c l k Z 0 Z 11 Z 6 Z 2 Z 5 X i h 4 X i l 4 Z 3 Z 4 se l se l FSM圖示描述 程序描述部分 ?FSM控制部分 ?數(shù)據(jù)通路部分 ?結(jié)果輸出部分 ? 9個(gè)狀態(tài)采用 4位格雷碼定義 ? 以下是 FSM控制流程 ? always@(present_state or Serial_in) ? begin ? case(present_state) ? State0: //initial process ? begin ? Sel=339。b000。 ? if(!Serial_in) ? Next_state=State0。 ? else ? Next_state=State1。 // state jump ? end ? State1: ? begin ? if(!Serial_in) ? Next_state=StateY。 ? else ? Next_state=State2。 ? end ? State2: begin ? if(!Serial_in) ? Next_state=S