<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > MCS-51單片機串行口IP核的實(shí)現

MCS-51單片機串行口IP核的實(shí)現

——
作者: 時(shí)間:2008-01-17 來(lái)源: 收藏

  1 引言

  隨著(zhù)集成電路的深亞微米制造技術(shù)和eda技術(shù)的迅猛發(fā)展,芯片的密度和復雜度不斷提高,復用以前的設計模塊用于asic芯片和在一塊芯片上實(shí)現嵌入式系統的功能形成所謂的片上可編程系統( system on programmable chip,sopc) 已成為一種發(fā)展的新趨勢。ip core(知識產(chǎn)權核) 設計的重用性以及sopc 技術(shù)的出現,以其設計的靈活性大大縮短了產(chǎn)品的設計周期,減少了設計成本,降低了設計風(fēng)險,加快了產(chǎn)品的上市速度。本文中介紹的控制器是一種功能和通信協(xié)議與系列單片機的相兼容,性能有大幅提高的數據通信部件,其往往于低速低成本的微機與下位機的通訊中,并允許在串行鏈路上進(jìn)行全雙工的通信。通過(guò)重用技術(shù),可廣泛應用在各種soc、嵌入式微處理芯片的設計以及工業(yè)應用中。

  2 系統簡(jiǎn)介

  本課題采用altera公司的max+plusⅱ10.0設計平臺,以超高速集成電路硬件描述語(yǔ)言vhdl為系統邏輯描述的唯一表達方式,采用自頂向下的設計原則,對mcs-51單片機的串行接口進(jìn)行反相設計。同時(shí)選用altera公司的acex系列器件來(lái)實(shí)現最終的ip核。由于篇幅的關(guān)系,筆者不打算對開(kāi)發(fā)平臺、開(kāi)發(fā)工具以及最終實(shí)現硬件電路的fpga芯片進(jìn)行介紹,而是著(zhù)重介紹整體的設計思想。根據對mcs-51單片機的串行接口塊功能的剖析[1]和模塊化的設計思想,在設計時(shí)進(jìn)行模塊劃分,可劃分為4個(gè)子模塊,它們分別是:(1)串口時(shí)鐘發(fā)生器模塊;(2)數據檢測器模塊;(3)發(fā)送器模塊;(4)接收器模塊。由于同步電路較容易使用寄存器的異步復位/置位端,可以使整個(gè)電路有一個(gè)確定的初始狀態(tài);使用同步電路易于消除電路的毛刺,使設計更可靠;同步電路可以很好地利用先進(jìn)的設計工具,如靜態(tài)時(shí)序分析工具等,為設計者提供最大便利條件,便于電路錯誤分析,加快設計進(jìn)度。所以我們采用嚴格的同步設計電路來(lái)設計ip核,即本設計中只有一個(gè)clk上升沿,從而保證了每一個(gè)觸發(fā)器同步動(dòng)作,消除了時(shí)鐘不同步帶來(lái)的誤動(dòng)作。

  3 系統現實(shí)

  設計一個(gè)軟核,首先要確定本核與外部的信息交換通路,即本模塊與外部電路的接口,友好的接口模型可以大大提高ip核的使用范圍。圖1是串行口ip核的接口模型圖,圖中左邊的引腳是輸入引腳,右邊是輸出引腳,圖中引腳的寬度均有標明(未寫(xiě)出寬度表明寬度為“1”)。由于本設計不支持i/o口的復用,所以為串行口工作于模式0下增加了rxd_o和rxdwr兩個(gè)輸出引腳,前者用于輸出,后者為輸出有效控制位(rxdwr為高電平時(shí),指示輸出)。串行口控制寄存器scon在設計中也被分成兩部分,一部分接收來(lái)自控制器的輸入(一共6位, sm0、sm1、sm2、ren、tb8和ri),一部分作為輸出送往控制器(一共3位,rb8以及分別指示發(fā)送和接收完畢的兩位,控制器會(huì )根據這兩位來(lái)對中斷標志置位)。至于發(fā)送中斷標志位ti,由于其不會(huì )影響串行口的工作過(guò)程所以在此并未列出,它將在控制器中得到體現。

  

串行口輸入輸出引腳圖

  圖1 串行口輸入輸出引腳圖

  串行口有四種工作方式,方式0的波特率固定的(為1/12倍的輸入時(shí)鐘頻率);方式1和方式3的波特率是定時(shí)器/計數器1的溢出率的1/16或1/32倍;而方式2的波特率則是輸入時(shí)鐘頻率的1/32或1/64倍。由此可見(jiàn),首先必須要解決的問(wèn)題就是設計分頻器。由于在方式0下,串行口是作半雙工的同步移位寄存器使用,其發(fā)送和接收的波特率是一樣的,因此對于方式0,串行口內部的分頻信號只需要一路即可。但是對于其他方式,串行口均是工作在全雙工的狀態(tài)下,因此,每種方式下均需要兩路分頻信號,一個(gè)用于發(fā)送,一個(gè)用于接收。

  對于方式0和方式2,其分頻的對象是輸入時(shí)鐘,實(shí)現這種分頻器的主要vhdl代碼的如下:(信號s_count_enable的頻率為輸入時(shí)鐘頻率的1/12,其高電平維持時(shí)間與一個(gè)輸入時(shí)鐘的周期相等。)

  s_count_enable<=`1`when s_pre_count=conv_unsigned(11,4) else `0`;

  p_divide_clk: process (clk, reset)

  begin

  if reset = `1` then

  s_pre_count <= conv_unsigned(0,4);

  else

{{分頁(yè)}}

  if clk`event and clk=`1` then

  if s_pre_count = conv_unsigned(11,4) then

  s_pre_count <= conv_unsigned(0,4);

  else

  s_pre_count <= s_pre_count + conv_unsigned(1,1);

  end if;

  end if;

  end if;

  end process p_divide_clk;

  對于方式1和方式3,其分頻的對象都是定時(shí)器/計數器1的溢出率,且分頻的系數是一樣的。由于串行口只有一個(gè),它不可能調試工作在方式1和3,因此方式1和方式3可以共用分頻信號。要對定時(shí)器/計數器1的溢出率進(jìn)行分頻,首先必須測出其頻率,為此需要一個(gè)上升沿的檢測器來(lái)監測外部輸入的定時(shí)器/計數器1的溢出信號(圖1中的tf_i引腳),這樣的檢測器可以雙穩態(tài)觸發(fā)器來(lái)實(shí)現,限于篇幅,雙穩態(tài)觸發(fā)器的vhdl實(shí)現請參考文獻[2],這里就不加詳述。檢測器在監測到tf_i引腳的上升沿時(shí)就使其輸出信號保持一個(gè)時(shí)鐘周期的高電平,再另外設計計數器對此高電平進(jìn)行計數,以達到對其分頻的效果。

  除了作為同步移位寄存器的方式0外,其他作uart(通用異步接收和發(fā)送器)用的三種方式在接收外部輸入的時(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í)現方式是移位。移位的時(shí)鐘來(lái)自上面所述的分頻器的,也就是根據各自的波特率進(jìn)行。雖然此部分很繁瑣,但是實(shí)現并不困難,請讀者參閱文獻[3]、[4]和[5]。

  4 模塊功能仿真

  圖2是串行口工作在方式0下發(fā)送數據的仿真圖。輸入信號trans_i是發(fā)送的啟動(dòng)信號(高電平有效)。它的出現使內部用于發(fā)送的狀態(tài)機啟動(dòng),同時(shí)使內部計數器復位,以便使每位的發(fā)送過(guò)程與計數器同步。計數器滿(mǎn)刻度偏轉一次,狀態(tài)機的狀態(tài)就會(huì )增加1。如圖所示,在狀態(tài)0向狀態(tài)1轉換時(shí),將要發(fā)送的8位數據的最低為輸出到rxd_o,這一數據的電平一直維持到狀態(tài)1向狀態(tài)2轉換,這時(shí)開(kāi)始輸出第二位數據。依此類(lèi)推,在狀態(tài)8的末尾,8位數據完全輸出完畢后,指示是否有數據輸出的信號rxdwr_o變?yōu)榈碗娖?,表示數據已?jīng)發(fā)送完畢。同時(shí),發(fā)送完成的指示信號(scon_o[0…2]中的相應位)也會(huì )置位。

{{分頁(yè)}}

  

工作于方式0的串行口發(fā)送數據的仿真圖

  圖2 工作于方式0的串行口發(fā)送數據的仿真圖

  圖3是工作于方式0的串行口接收數據的仿真圖。接收狀態(tài)機的啟動(dòng)依靠的是輸入信號 ren、ri。當ren=1且ri=0時(shí),就會(huì )啟動(dòng)一次接收過(guò)程。如圖中所示,接收過(guò)程始于狀態(tài)0的末尾scon_i的ren=1的時(shí)候(圖中左邊的豎線(xiàn)處),而在下一個(gè)狀態(tài)(狀態(tài)1)的末尾就會(huì )將外部輸入引腳的值移入內部的移位寄存器,依此類(lèi)推,直到狀態(tài)8的末尾將第8位數據移入,同時(shí)使接收緩沖寄存器和sbuf_o的值都為剛才移位所得到數值,以送往控制器處理。同時(shí),接收完成的指示信號(scon_o[0…2]中的相應位)也會(huì )置位。

  

工作于方式0的串行口接收數據的仿真圖

  圖3 工作于方式0的串行口接收數據的仿真圖

  圖4是工作于方式1的串行口的接收和發(fā)送數據同時(shí)進(jìn)行的仿真圖。方式1中發(fā)送和接收數據的時(shí)鐘源自tf_i。其發(fā)送的啟動(dòng)信號仍然是trans_i;接收的啟動(dòng)信號是檢測到外部輸入信號rxd_i有負跳沿出現。如圖中所示,在接收狀態(tài)機的狀態(tài)0的末尾,負跳沿被檢測到,狀態(tài)機馬上啟動(dòng),轉入下一個(gè)狀態(tài)1。在狀態(tài)1中,三次掃描檢測rxd_i引腳的值,如果有兩次或者三次值是“0”,則說(shuō)明收到的起始位的值是“0”,狀態(tài)機轉入下一狀態(tài)準備接收數據位,依此類(lèi)推直到狀態(tài)9的末尾將8位數據位最后一位收到并移如移位寄存器。再在下一個(gè)狀態(tài)(狀態(tài)10)接受停止位,如果停止位有效(停止位送至rb8,圖中的scon_o(2)),則將接收到的數據送到接受緩沖區,并輸出。至于發(fā)送,首先要發(fā)送的是起始位“0”,最后還要發(fā)送一位停止位“1”,上圖中很清楚的表示了這一過(guò)程。

  

工作于方式1的串行口發(fā)送

  圖4 工作于方式1的串行口發(fā)送、接收數據的仿真圖

  圖5是工作于方式2的串行口的接收和發(fā)送數據同時(shí)進(jìn)行的仿真圖。方式2和方式1的接收和發(fā)送的工程是一樣的。不同的在接收時(shí),它用來(lái)送入rb8的值不是停止位而是可編程控制位,同時(shí)也是根據對這一位的判斷來(lái)決定接收是否有 效。(圖中接收的可編程控制位是“1”)在發(fā)送時(shí),它在停止位之前還發(fā)送一位可編程控制位tb8(圖中scon_i的最低位)。

  

工作于方式2的串行口發(fā)送

  圖5 工作于方式2的串行口發(fā)送、接收數據的仿真圖

{{分頁(yè)}}

  至于方式3下串口的工作情況,除波特率不同外,其他與方式2完全一樣,圖6是工作于方式3的串行口的接收和發(fā)送數據同時(shí)進(jìn)行的仿真圖。

  

工作于方式3的串行口發(fā)送

  圖6 工作于方式3的串行口發(fā)送、接收數據的仿真圖

  5 結束語(yǔ)

  本文設計的兼容單片機的串行口采用完全同步的設計,系統在統一的時(shí)鐘下工作。時(shí)鐘周期只與所選用的fpga/cpld芯片的延時(shí)有關(guān),而與設計無(wú)關(guān),因此,串行口的波特率可根據時(shí)鐘周期任意調整。另外,此串行口ip 核已經(jīng)結合其它ip核做成了一個(gè)soc系統,并成功地通過(guò)了fpga的測試。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>