基于EDA技術(shù)的單片機IP核設(shè)計
圖 3 8051_tmrctr和8051_siu的符號文件圖
3.3串行接口模塊
MC5―51單片機的串行接口既可以作通用異步接收和發(fā)送器(UART)用,又可以作同步移位寄存器用。圖3中的右圖就是本模塊設(shè)計完成后形成的符號文件。由于本設(shè)計不支持I/O口的復(fù)用,所以為串行口工作于模式0下增加了RXD_O和RXDWR兩個輸出引腳,前者用于輸出,后者為輸出有效控制位。串行口控制寄存器SCON在設(shè)計中也被分成兩部分,一部分接收來自控制器的輸入(一共6位,SM0、SM1、SM2、REN、TB8和RI),一部分作為輸出送往控制器(一共3位,RB8以及分別指示發(fā)送和接收完畢的兩位,控制器會根據(jù)這兩位來對中斷標(biāo)志置位)。至于發(fā)送中斷標(biāo)志位TI,由于其不會影響串行口的工作過程所以在此并未列出,它將在控制器中得到體現(xiàn)。
串行口有四種工作方式,方式0和方式2是對時鐘頻率分頻的結(jié)果;方式1和方式3的波特率是對定時器/計數(shù)器1的溢出率進(jìn)行分頻。由此可見,首先必須要解決的問題就是設(shè)計分頻器。由于在方式0下,串行口是作半雙工的同步移位寄存器使用,其發(fā)送和接收的波特率是一樣的,因此對于方式0,串行口內(nèi)部的分頻信號只需要一路即可。但是對于其他方式,串行口均是工作在全雙工的狀態(tài)下,因此,每種方式下均需要兩路分頻信號。分頻器的設(shè)計在上已經(jīng)述及,在此不加贅述。對于方式1和方式3,其分頻的對象都是定時器/計數(shù)器1的溢出率,且分頻的系數(shù)是一樣的。由于串行口只有一個,它不可能同時工作在方式1和3,因此方式1和方式3可以共用分頻信號。要對定時器/計數(shù)器1的溢出率進(jìn)行分頻,首先必須測出其頻率,為此需要一個上升沿的檢測器來監(jiān)測外部輸入的定時器/計數(shù)器1的溢出信號(圖3中的右圖中的TF_I引腳),這樣的檢測器同樣可以用雙穩(wěn)態(tài)觸發(fā)器來實現(xiàn)。檢測器在監(jiān)測到TF_I引腳的上升沿時就使其輸出信號保持一個時鐘周期的高電平,再來另外設(shè)計計數(shù)器對此高電平進(jìn)行計數(shù),以達(dá)到對其分頻的效果。
除了作為同步移位寄存器的方式0外,其他的三種方式在接收外部輸入的時候均需要對外部的輸入信號采樣監(jiān)測以確定信號的值。因此一個位檢測器是必需的。同時,串行口工作在方式1、方式2和方式3時,每一個接收的數(shù)據(jù)幀都有一個起始位,這個起始位被固定為0,也就是說在輸入端RXD_I監(jiān)測到1到0的負(fù)跳變就會啟動接收過程(注:負(fù)跳變檢測器對外部輸入引腳的采樣頻率為波特率的16倍)。位檢測器的設(shè)計原理是把一個接收位的時間分為16等分(以內(nèi)部計數(shù)器的16個狀態(tài)來表示),在計數(shù)器的7、8、9狀態(tài)時,位檢測器對外部輸入端的值進(jìn)行采樣。采用3取2的表決方法來抑制噪聲。如果位檢測器檢測到接收的第一位不是0,那么就說明它不是一幀數(shù)據(jù)的起始位,應(yīng)該擯棄,接收電路復(fù)位。
至于接收和發(fā)送,這里采用有限狀態(tài)機的方式來實現(xiàn)。由于要工作在全雙工模式下,所以接收和發(fā)送要采用兩個有限狀態(tài)機,有限狀態(tài)機的每一個狀態(tài)用來發(fā)送/接收移位數(shù)據(jù),發(fā)送和接收的具體實現(xiàn)方式是移位【3】。移位的時鐘來自上面所述的分頻器,也就是根據(jù)各自的波特率進(jìn)行。限于篇幅,在此不再詳述。
3.4控制器模塊
控制器的設(shè)計是MCS-51單片機IP核設(shè)計中最復(fù)雜的部分,也是設(shè)計中最重要的組成模塊??刂破鞯膶⒎譃閮蓚€模塊來實現(xiàn)。一個模塊(在此命名為control_mem)主要用于與存儲器(包括內(nèi)部RAM,特殊功能寄存器SFR,外部RAM以及程序存儲器)的控制。另一個模塊(在此命名為control_fsm)主要用來實現(xiàn)指令系統(tǒng)。control_mem以時序電路的方式來實現(xiàn),它的作用是根據(jù)狀態(tài)機傳來的各種控制指令來對相應(yīng)的存儲器進(jìn)行操作。本狀態(tài)機的主控時序進(jìn)程是control_mem模塊中的一個以時序邏輯電路現(xiàn)實的進(jìn)程。它的啟動由control_mem模塊的相應(yīng)輸出信號來實現(xiàn),啟動后每經(jīng)過已過狀態(tài),其輸出的信號就會部分改變,這些改變就會指示control_mem下一步的動作,如此周而復(fù)始。下面簡要介紹一下二者的實現(xiàn)原理。
control_mem模塊的主要任務(wù)是根據(jù)狀態(tài)機的相應(yīng)指令,實現(xiàn)對存儲器的相應(yīng)操作。其總共要完成7個任務(wù)(7個任務(wù)分別以7個進(jìn)程來實現(xiàn),除前3個以時序邏輯電路的方式來實現(xiàn)外,后面的4個進(jìn)程全部是以組合邏輯電路的方式來實現(xiàn)的。),分別是:
1.監(jiān)測各個中斷源的變化。使指示中斷源有變化的相應(yīng)信號位置位。監(jiān)測外部引腳的變化的方法,一個簡單的雙穩(wěn)態(tài)觸發(fā)器就可以實現(xiàn)。
2.根據(jù)狀態(tài)機的指令寫一些用戶沒有直接地址的芯片內(nèi)部輔助寄存器。它主要的作用是作為狀態(tài)機的主控進(jìn)程,同時它也會根據(jù)狀態(tài)機的狀態(tài)置位相應(yīng)的內(nèi)部輔助寄存器(例如:指示高、低優(yōu)先級的中斷是否正在運行的寄存器等)。同時,取指令也是在本進(jìn)程中實現(xiàn)的。
3.寫內(nèi)部RAM和SFR,包括寫“字節(jié)”和寫“位”。它由時序邏輯電路來實現(xiàn),寫“位”和寫“字節(jié)”的控制信號由狀態(tài)機給出,每次寫操作均由時鐘上升沿觸發(fā)。
4.根據(jù)檢測中斷源的變化的結(jié)果,在必要時向狀態(tài)機發(fā)送中斷請求類別指示信號。它是一個純組合邏輯電路,進(jìn)程1中一旦監(jiān)測到中斷源有變化,它的輸出信號(與狀態(tài)機相連接)就會改變,從而指示狀態(tài)機進(jìn)入中斷。
評論