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