《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 業界動態 > 基于PLD的嵌入式系統外存模塊設計

基于PLD的嵌入式系統外存模塊設計

2008-08-28
作者:高明星 于大洋 楊 健 彭

??? 摘 要: 以MCS-96 系列單片機" title="系列單片機">系列單片機為例,介紹了一種采用可編程邏輯器件(PLD)的存儲器模塊的設計方案,該模塊包含了Flash閃存和RAM。提出了一種方便的存儲器擴展方法,該方法有效地解決了嵌入式系統尤其是數據采集、存儲等系統中存在的存儲空間不足問題。該方案具有通用性強、讀寫控制簡單等特點,具有很強的實用性。
??? 關鍵詞: PLD? 存儲器? RAM? 單片機 閃存

?

??? 在嵌入式系統中,由于設計成本和體積等因素的限制,往往會使CPU(包括DSP、單片機等)存在地址空間不足的問題。很多文獻(如參考文獻[1])都有相關的存儲器擴展方法的介紹,目前已有的方法通常是借助于CPU的I/O接口產生片選或者高位地址信號,利用這些信號將內存分頁,但當頁間跳轉時將給程序設計帶來不便。對于沒有內部存儲器并且采用統一編址的CPU,如80C196KC20[1],這種頁間切換將造成CPU無法繼續執行當前程序而產生錯誤(見圖1)。在CPU執行頁面切換操作后,本應該繼續執行頁面1的指令,可是卻錯誤地執行了頁面2中的相應指令,這種結果不是所需要的。因此尋找一個有效的存儲器擴展方法是實際應用中亟待解決的問題。

?


1 存儲器擴展方法解決方案
?? ?在對MCS-96系列單片機的使用中發現,64K字節的存儲空間用來存放程序能滿足絕大多數的使用需求(通常用戶的應用程序不到10K字節),但如果使用其進行數據存儲控制,則會帶來存儲空間上的嚴重不足。通過對實際應用的統計分析發現,在很多情況下,數據的存取僅限于順序的連續操作。利用這個特點,可以對數據存儲空間進行簡化設計,具體的說就是通過對同一個地址連續讀或者連續寫來進行批量數據的存取,從而節省地址空間。在16位CPU中,可以將任何一段64K字(2的16次方)的存儲空間映射到兩個地址(一個作為讀取的位置,一個作為寫入的位置),采用這樣的映射方法可以將內存最大擴展到2G字(2的31次方),但這樣的設計同時也帶來了諸多邏輯控制上的困難。隨著可編程邏輯器件(PLD)包括FPGA、EPLD[4]、CPLD等的迅速發展,數字邏輯電路的設計得到了大大簡化,從而使這種存儲器擴展想法可以得到實現。
2 存儲器擴展方法的具體實現
?? ?下面以筆者設計的系統為例來詳細說明這種存儲器擴展方法的實現。該系統是一個多功能數據采集設備,能夠以最高40k次/s的速率進行12 位A/D轉換,并且可以將采集到的數據保存至Flash ROM中,以防止掉電丟失。技術參數要求如下:①最多可以保存32K字節的采樣數據;②可以同時存儲4段系統工作配置程序,每段4K字節,共計16K字節;③由于Flash ROM自身的特點,在寫入數據后的編程階段不能進行讀寫操作,因此為了保證系統采樣和單片機運行的正常進行,需要額外增加32K字節的RAM作為數據緩存;④系統程序、中斷服務程序等共占用56K字節(Flash ROM和RAM各保留28K字節),總計需要存儲空間136K字節。這個需求已經超過96系列單片機的64K字節尋址范圍,為此設計了一個存儲器模塊,其結構如圖2所示。

?


??? Flash ROM采用ATMEL公司的AT29C1024,容量為128K字節,數據線寬度為16位;RAM存儲器由兩片CY7C199組成,數據線寬度為16位,容量為64K字節。80C196單片機的ALE為地址鎖存" title="鎖存">鎖存信號,/WE為寫有效信號,/RD為讀有效信號,READY為準備就緒信號。MCS-96系列單片機支持8位和16位兩種工作模式,為了提高系統的性能,選擇16位工作模式。96系列單片機地址是按照字節的方式來計算的,因此在16位工作模式下的A0=0沒有實際意義。在通常的讀寫情況下,取經過鎖存后的AD1~AD15地址作為A1~A15而A16=0。
?? ?下面以讀Flash ROM為例介紹地址擴展方法。對于可以直接尋址的地址,EPLD作為鎖存器,將AD0~AD15分時的地址數據總線分開,生成獨立的地址和數據總線。在這里定義了兩個特殊的地址:Flash ROM數據塊" title="數據塊">數據塊的讀地址Address_F_R和讀位置指針地址Address_F_RP。首先向Address_F_RP寫入一個16位的二進制數,該數代表了將要讀取的數據塊的首地址,16位表示范圍是0~65535,因此可以指定的首地址范圍是64K字即128K字節;然后連續地從Address_F_R進行讀取操作,每讀一次,位置指針會自動加1而不需要重新設置。如果需要讀取新的位置,只需要向Address_F_RP地址寫入新的位置數據即可。該功能在EPLD器件內部的實現方法見圖3。計數器可同步設置初值、同步計數,在AHDL語言中聲明為lpm_counter[5]。其中,CNT_EN為計數使能控制,當CNT_EN為高電平時,每當CLOCK上升沿" title="上升沿">上升沿到來時計數器便會自動加一,從而實現了地址自動增加的功能;CLOCK為同步時鐘輸入端,上升沿有效;SLOAD為計數器同步設置初值信號,當該信號為高電平時,在CLOCK上升沿的作用下,計數器的輸出Q[15..0]=D[15..0],從而實現初始化讀取位置的功能。計數器用AHDL語言描述如下:
??? counter?:?lpm_counter with (lpm_width=16);
??? counter.clock=/rd&(/we#(a[15..0]!=Address_F_RP);
??? counter.sload=(a[15..0]= =Address_F_RP);
??? counter.cnt_en=(a[15..0]= =Address_F_R);
??? counter.data[15..0]=D[15..0];

?


??? clock信號要保證在寫Address_F_RP地址修改讀取位置時,或讀Address_F_R地址取數據時都能產生上升沿信號。總線a0~a15和D0~D15分別是由AD0~AD15分離出來的地址和數據總線。多路選擇器則根據地址譯碼產生的S0~S3選擇輸出地址,輸出地址直接連接到RAM和Flash ROM的地址線上。如果訪問除Address_F_R和Address_F_RP以外的地址,則地址輸出總線A[15..1]=a[15..1]、A16=0,即單片機直接訪問存儲器;如果讀取Address_F_R,則片選 /CS2有效并且A[16..1]=Q[15..0]作為輸出地址。這樣就可以自動地在不同存儲區域進行切換,從而大大地增加了內存的擴充能力,并且簡化了程序設計。運用同樣的方法還可以定義Flash ROM中的數據塊寫入地址Address_F_W和寫位置指針地址Address_F_WP,RAM中也有類似的方法定義Address_R_R(RAM數據塊讀地址)、Address_R_RP(RAM數據塊的讀位置指針地址)、Address_R_W(RAM數據塊寫地址)和Address_R_WP(RAM數據塊的寫位置指針地址)。這樣可以方便地對內存的擴展部分進行讀寫。下面以MCS-96的匯編語言為例來說明程序中是如何操作的。比如需要從IOPORT0口連續采集數據,然后存放到RAM中指定的數據塊等待處理,則可以寫出如下程序:
??? LD?40H,地址值? ??;地址值為即將寫入的目的地址,16位按字編址。
??? ST?40H,Address_R_WP? ?;設置寫位置指針
??? REPEAT:
??? LDB?40H,IOPORT0
??? LDB?41H,IOPORT0??? ?;40H和41H為內部寄存器,因為按字存儲所以連續讀兩次
??? ST?40H,Address_R_W? ;寫入指定位置條件判斷退出循環
??? JMP?REPEAT
??? 從上面這個簡單的例子可以看出,這種存儲器組織方法大大簡化了編程的復雜性,并且可以采用對位置指針賦初值的方法來實現對擴展存儲器中任何一個位置的讀寫操作。
3 地址分配
?? ?有了上面的" title="面的">面的存儲器擴展方法,再結合系統的技術參數和單片機的特點,就可以做出一套合理的內存地址分配方案。下面給出單片機的地址劃分情況:
??? 0000H~01FFH 系統寄存器區,保留
??? 0200H~1EFFH 用戶區,直接映射到Flash ROM中的0200H~1EFFH,可以用來存放數據、程序等,該區域可以由單片機直接進行尋址。
??? 1F00H~1FFFH 用戶區,實際使用中把Address_R_R、Address_F_WP等地址以及一些特殊設備如A/D轉換器、LCD顯示屏等的訪問地址設置在這個區域。
??? 2000H~207FH 該區域是中斷向量區、 芯片配置字節區、保留字區等,直接映射到Flash ROM中的2000H~207FH。
??? 2080H~8FFFH 用戶區,單片機啟動也是從2080H處開始執行程序的,因此把這個地址范圍直接映射到Flash ROM的2080H~8FFFH,該區域設置系統的引導、初始化等程序。
??? 9000H~FFFFH 用戶區,將這一段映射到RAM的9000H~FFFFH,作為系統程序的運行區域。
??? 上面的分配方案可以通過對地址總線進行譯碼生成相應的片選信號 /CS1和 /CS2來實現。這樣分配后,Flash ROM和RAM的使用情況如圖4所示。

?


??? 圖4中白色區域是單片機通過總線直接尋址的區域,可以由單片機直接進行訪問。灰色區域為內存的擴展區域,不能被單片機直接訪問,但可以通過前面介紹的方法由EPLD生成地址進行讀寫操作。下面簡要介紹一下各個區域在實際中的用途:Flash ROM中的0000H~1FFH和1F00H~1FFFH因為容量很小,沒有被利用。系統啟動后從Flash ROM的2080H處開始執行程序,將2000H~8FFFH的內容復制到RAM中的9000H~FFFFH,然后跳轉到RAM中執行系統程序。由于Flash ROM的速度慢,需要在讀寫過程中插入一定量的等待周期,因此將程序復制到RAM中執行可以提高系統的性能;同時系統在對Flash ROM進行寫入操作后,編程階段的10ms內不能對其進行讀取,因此RAM在這個時候也提供了程序運行的位置。這樣分配后,程序的長度被限制在28K字節,實際中這個數量完全可以滿足系統的需求。Flash ROM中的9000~FFFFH共28K字節,用來保存4段系統運行配置程序,每段長度可達7K字節;10000H~1FFFFH共64K字節,用來作為采集數據的保存區域。RAM中的0000H~8FFFH共36K字節,用來作為數據的緩存區域。從上面的分析可以看出,最終設計的各項指標都已經超過實際的需求,能很好地解決實際應用問題。
4 合理利用READY信號
??? 最后介紹一下單片機就緒信號READY在這個系統中的關鍵作用。從前面的設計中可以看出系統存在著高速RAM和慢速Flash ROM存儲器,開始時,Flash ROM選用了AT29C1024-70JC[3],它是該型號中速度最快的,有效數據建立時間僅為70ns。單片機不插入等待周期的讀寫時序,如圖5所示。

?


??? 從ALE下降沿地址有效到/RD上升沿的時間是80ns,Flash的響應時間為70ns,再加上EPLD的延時就造成了單片機從Flash ROM讀取數據的不穩定,表現在無法對Flash ROM進行在線寫入、經常發生錯誤的執行結果、死機等。為此必須加入等待周期,延長讀、寫時間才能滿足Flash ROM的要求。在這里只需插入一個等待周期(100ns)便可以滿足要求,因此設置芯片配置字節CCR.5=0,CCR.4=0[1]。這樣,當READY信號為低電平時便自動插入且僅插入一個等待周期。一個簡單的做法就是把Flash ROM的片選信號 /CS2連接到READY,這樣,當選中Flash ROM芯片時READY信號就跟隨 /CS2同時變為低電平。按照這樣的設想可在EPLD內部重新設置READY信號,描述如下:
??? ready=!(((a[15..0]>=H'0200')&(a[15..0]<=H'1EFF'))
??? #((a[15..0]>=H'2000')&(a[15..0]<=H'8FFF'))#(a[15..0]= =Address_F_R)
??? #(a[15..0]= =Address_F_W)&!ALE)
??? 可是實際故障依舊,通過測試得到的時序信號如圖6所示。

?

??? READY信號的產生落后ALE下降沿5ns,造成READY信號產生無效,解決這個問題的唯一方法是提前生成READY信號。實際中有效地址是在ALE下降沿鎖存后產生的,這也是READY信號產生表達式中最后一項的來源,但是考慮到地址的產生應該發生在ALE下降沿之前,以保證鎖存到正確的地址。因此大膽設想讓READY信號的產生不再受ALE的控制,只要總線上產生地址就可以作出判斷,從而提前生成READY信號。但這樣的做法破壞了同步時序,而且異步生成READY信號容易產生冒險現象。通過分析,可以發現異步生成READY信號并不會帶來任何不穩定因素,因此修改READY信號如下:
??? ready=!(((a[15..0]>=H'0200')&(a[15..0]<=H'1EFF'))
???????? ??#((a[15..0]>=H'2000')&(a[15..0]<=H'8FFF'))???#(a[15..0]= =Address_F_R)
???????? ??#(a[15..0]= =Address_F_W)
??? 即去掉了對地址有效信號ALE的判斷。修改后系統工作穩定、正常。修改后對Flash ROM的讀寫時序如圖7所示,而對RAM讀寫的時序依舊是圖6,目的達到。考慮到插入一個等待周期后大大增加了讀寫時間,因此將AT29C1024-70JC換成廉價的AT29C1024-12JC(有效數據建立時間為120ns)[3],系統依然能夠穩定工作。通過使用,證明這種存儲器設計方案是可行的。

?


??? 前面詳細地介紹了一種實用的存儲器擴展方法,該方法是基于PLD器件實現的,有效地解決了嵌入式系統,尤其是數據采集、存儲系統中內存擴展的問題。該方法能夠簡化程序設計,并且不需要隨CPU型號的變化而修改設計,具有很好的可移植性。同時還給出了一種較為復雜的單片機外部存儲器的組織方案,包括了Flash ROM和RAM構成的存儲系統。最后提出了將READY信號由同步產生改為異步產生的方式,解決了CPU在高速RAM與低速Flash ROM之間切換產生的問題,最終設計成了一套較為完善的CPU外部存儲器系統。
參考文獻
1 徐愛卿.Intel 16位單片機(修訂版).北京:北京航空航天大學出版社, 2002(第二版)
2 80C196KB User’s Guide.http://www.intel.com
3 Atmel AT29C1024 Datasheet.http://www.atmel.com
4 FLEX 10K EPLD Datasheet.http://www.altera.com

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲少妇中出一区| 在线亚洲自拍| 亚洲一级特黄| 亚洲精品在线免费| 亚洲福利视频一区| 永久久久久久| 伊人影院久久| 黄色成人在线观看| 狠狠v欧美v日韩v亚洲ⅴ| 国产午夜久久久久| 国产色产综合产在线视频| 国产模特精品视频久久久久| 国产精品mm| 欧美色综合天天久久综合精品| 欧美精品在线免费播放| 欧美片第1页综合| 欧美日韩国产成人在线免费 | 国产精品国产自产拍高清av王其| 欧美老女人xx| 欧美三级网址| 国产精品成人在线观看| 国产精品福利影院| 国产麻豆综合| 极品尤物久久久av免费看| 亚洲成色777777女色窝| 亚洲国产欧洲综合997久久| 亚洲激情视频在线观看| 亚洲精品国久久99热| 日韩视频一区二区三区在线播放| 一区二区三区不卡视频在线观看 | 国产毛片一区二区| 国产一级久久| 亚洲国产精品久久久久秋霞蜜臀| 亚洲精品久久在线| 亚洲一区二区三区高清不卡| 欧美亚洲色图校园春色| 亚洲第一区在线观看| 亚洲精品影院| 亚洲一区二区免费看| 香蕉成人伊视频在线观看| 久久精品视频99| 欧美成人一二三| 欧美日韩中文在线| 国产色产综合产在线视频| 在线成人av.com| 一区二区三区四区五区在线| 亚洲欧美资源在线| 亚洲日本黄色| 亚洲欧美日韩国产综合精品二区| 久久精品理论片| 欧美国产在线视频| 国产精品久久久亚洲一区 | 国内精品一区二区三区| 亚洲国产欧美日韩| 中文无字幕一区二区三区| 欧美一区二区三区在线| 亚洲精品视频在线播放| 亚洲女同同性videoxma| 久久免费观看视频| 欧美日韩国产在线| 国产亚洲一级高清| 日韩一区二区精品在线观看| 欧美亚洲一区二区在线| 日韩午夜免费视频| 欧美在线不卡| 欧美精品麻豆| 国产偷国产偷亚洲高清97cao| 亚洲国产日本| 性欧美xxxx大乳国产app| 亚洲看片免费| 久久久www| 国产精品国产三级欧美二区| 在线不卡a资源高清| 亚洲嫩草精品久久| 一区二区三区黄色| 老司机久久99久久精品播放免费 | 亚洲在线中文字幕| 女人色偷偷aa久久天堂| 国产精品一区二区a| 亚洲人成久久| 久久精品视频网| 性欧美video另类hd性玩具| 欧美激情1区2区| 狠狠色噜噜狠狠狠狠色吗综合| 国产精品99久久不卡二区| 亚洲精品少妇网址| 久久久综合精品| 国产女主播视频一区二区| 日韩天天综合| 最新国产の精品合集bt伙计| 欧美一区二区在线免费观看| 欧美视频在线免费看| 亚洲日本理论电影| 久久精品91久久久久久再现| 性高湖久久久久久久久| 欧美日韩三级| 亚洲精品一区二区在线| 亚洲精品美女在线观看播放| 久久一区激情| 韩国精品在线观看| 欧美一区二区女人| 午夜在线视频观看日韩17c| 欧美色大人视频| 亚洲日本成人在线观看| 91久久精品国产| 鲁鲁狠狠狠7777一区二区| 国产一区二区三区视频在线观看 | 久久精品日产第一区二区| 国产片一区二区| 亚洲欧美日韩国产成人精品影院| 中文精品一区二区三区| 欧美区一区二区三区| 亚洲伦理自拍| 一区二区高清视频在线观看| 欧美人牲a欧美精品| 亚洲精品日日夜夜| 99国产精品视频免费观看一公开 | 99精品视频免费观看视频| 一区二区免费在线观看| 欧美日本国产| 一本高清dvd不卡在线观看| 一区二区三区|亚洲午夜| 欧美日韩一区二区免费视频| aⅴ色国产欧美| 亚洲影院一区| 国产精品一区在线观看| 亚洲免费影视| 久久精品官网| 韩日欧美一区二区三区| 亚洲国产精品久久人人爱蜜臀| 免费欧美视频| 亚洲美女淫视频| 亚洲午夜一区二区三区| 欧美性猛交xxxx乱大交蜜桃| 亚洲色图制服丝袜| 亚洲欧美在线网| 国产日韩在线不卡| 久久精品亚洲一区二区三区浴池| 蜜臀av国产精品久久久久| 91久久精品美女高潮| 中文在线不卡| 国产精品一卡二卡| 久久精品视频99| 欧美美女操人视频| 亚洲一区视频| 久久影院亚洲| 亚洲乱码精品一二三四区日韩在线| 亚洲影院免费观看| 国产亚洲在线观看| 亚洲日韩欧美视频| 欧美无乱码久久久免费午夜一区| 亚洲摸下面视频| 免费在线视频一区| 9色精品在线| 久久精品电影| 亚洲精品老司机| 欧美一区二区三区的| 激情欧美日韩一区| 一区二区日韩免费看| 国产欧美69| 亚洲人成网站在线播| 国产精品久久久99| 亚洲高清在线视频| 欧美午夜不卡在线观看免费 | 欧美日韩国产成人精品| 午夜精品一区二区三区在线播放 | 日韩视频在线免费| 国产精品入口尤物| 亚洲国产一成人久久精品| 欧美性猛交视频| 久久精品一区四区| 欧美日精品一区视频| 久久aⅴ国产紧身牛仔裤| 欧美日本国产视频| 久久动漫亚洲| 欧美四级在线| 91久久精品国产91久久性色| 国产精品男女猛烈高潮激情 | 久久精品91| 99精品国产99久久久久久福利| 久久国产天堂福利天堂| 最新亚洲电影| 久久精品免费电影| 99一区二区| 老司机aⅴ在线精品导航| 亚洲天堂成人| 欧美高清自拍一区| 久久国产欧美精品| 国产精品高清网站| 亚洲美女区一区| 狠狠色综合网| 亚洲欧美中文字幕| 亚洲人线精品午夜| 久久综合久色欧美综合狠狠| 夜夜狂射影院欧美极品| 欧美国产三级| 久久国产一区二区三区| 国产精品日日做人人爱| 一本久久综合| 亚洲福利免费|