技術(shù)頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國(guó)傳動(dòng)網(wǎng) > 技術(shù)頻道 > 技術(shù)百科 > 基于PLD的嵌入式系統(tǒng)外存模塊設(shè)計(jì)

基于PLD的嵌入式系統(tǒng)外存模塊設(shè)計(jì)

時(shí)間:2008-09-27 15:14:00來(lái)源:dujing

導(dǎo)語(yǔ):?文章以MCS-96系列單片機(jī)為例,介紹了一種采用可編程邏輯器件(PLD)的存儲(chǔ)器模塊的設(shè)計(jì)方案,該模塊包含了Flash閃存和RAM。
摘要:文章以MCS-96系列單片機(jī)為例,介紹了一種采用可編程邏輯器件(PLD)的存儲(chǔ)器模塊的設(shè)計(jì)方案,該模塊包含了Flash閃存和RAM。提出了一種方便的存儲(chǔ)器擴(kuò)展方法,該方法有效地解決了嵌入式系統(tǒng)尤其是數(shù)據(jù)采集、存儲(chǔ)等系統(tǒng)中存在的存儲(chǔ)空間不足問(wèn)題。該方案具有通用性強(qiáng)、讀寫(xiě)控制簡(jiǎn)單等特點(diǎn),具有很強(qiáng)的實(shí)用性。 在嵌入式系統(tǒng)中,由于設(shè)計(jì)成本和體積等因素的限制,往往會(huì)使CPU(包括DSP、單片機(jī)等)存在地址空間不足的問(wèn)題。很多文獻(xiàn)都有相關(guān)的存儲(chǔ)器擴(kuò)展方法的介紹, 目前已有的方法通常是借助于CPU的I/0接口產(chǎn)生片選或者高位地址信號(hào),利用這些信號(hào)將內(nèi)存分頁(yè),但當(dāng)頁(yè)間跳轉(zhuǎn)時(shí)將給程序設(shè)計(jì)帶來(lái)不便。對(duì)于沒(méi)有內(nèi)部存儲(chǔ)器并且采用統(tǒng)一編址的CPU,如80C196KC20[1],這種頁(yè)間切換將造成CPU無(wú)法繼續(xù)執(zhí)行當(dāng)前程序而產(chǎn)生錯(cuò)誤(見(jiàn)圖1)。在CPU執(zhí)行頁(yè)面切換操作后,本應(yīng)該繼續(xù)執(zhí)行頁(yè)面1的指令,可是卻錯(cuò)誤地執(zhí)行了頁(yè)面2中的相應(yīng)指令,這種結(jié)果不是所需要的。因此尋找一個(gè)有效的存儲(chǔ)器擴(kuò)展方法是實(shí)際應(yīng)用中亟待解決的問(wèn)題。
[img=315,202]http://www.e-works.net.cn/ewk2004/fileupload/images/127423032386093750.gif[/img]
1 存儲(chǔ)器擴(kuò)展方法解決方案 在對(duì)MCS-96系列單片機(jī)的使用中發(fā)現(xiàn),64K字節(jié)的存儲(chǔ)空間用來(lái)存放程序能滿足絕大多數(shù)的使用需求(通常用戶的應(yīng)用程序不到10K字節(jié)),但如果使用其進(jìn)行數(shù)據(jù)存儲(chǔ)控制,則會(huì)帶來(lái)存儲(chǔ)空間上的嚴(yán)重不足。通過(guò)對(duì)實(shí)際應(yīng)用的統(tǒng)計(jì)分析發(fā)現(xiàn),在很多情況下,數(shù)據(jù)的存取僅限于順序的連續(xù)操作。利用這個(gè)特點(diǎn),可以對(duì)數(shù)據(jù)存儲(chǔ)空間進(jìn)行簡(jiǎn)化設(shè)計(jì),具體的說(shuō)就是通過(guò)對(duì)同一個(gè)地址連續(xù)讀或者連續(xù)寫(xiě)來(lái)進(jìn)行批量數(shù)據(jù)的存取,從而節(jié)省地址空間。在16位CPU中,可以將任何一段64K字(2的16次方)的存儲(chǔ)空間映射到兩個(gè)地址(一個(gè)作為讀取的位置,一個(gè)作為寫(xiě)入的位置),采用這樣的映射方法可以將內(nèi)存最大擴(kuò)展到2G字(2的31次方),但這樣的設(shè)計(jì)同時(shí)也帶來(lái)了諸多邏輯控制上的困難。隨著可編程邏輯器件(PLD)包括FPGA、EPLDE4[4]、CPLD等的迅速發(fā)展,數(shù)字邏輯電路的設(shè)計(jì)得到了大大簡(jiǎn)化,從而使這種存儲(chǔ)器擴(kuò)展想法可以得到實(shí)現(xiàn)。 2 存儲(chǔ)器擴(kuò)展方法的具體實(shí)現(xiàn) 下面以筆者設(shè)計(jì)的系統(tǒng)為例來(lái)詳細(xì)說(shuō)明這種存儲(chǔ)器擴(kuò)展方法的實(shí)現(xiàn)。該系統(tǒng)是一個(gè)多功能數(shù)據(jù)采集設(shè)備,能夠以最高40k次/s的速率進(jìn)行12位A/D轉(zhuǎn)換,并且可以將采集到的數(shù)據(jù)保存至Flash ROM中,以防止掉電丟失。技術(shù)參數(shù)要求如下:①最多可以保存32K字節(jié)的采樣數(shù)據(jù);②可以同時(shí)存儲(chǔ)4段系統(tǒng)工作配置程序,每段4K字節(jié),共計(jì)16K字節(jié);③由于Flash ROM自身的特點(diǎn),在寫(xiě)人數(shù)據(jù)后的編程階段不能進(jìn)行讀寫(xiě)操作,因此為了保證系統(tǒng)采樣和單片機(jī)運(yùn)行的正常進(jìn)行,需要額外增加32K字節(jié)的RAM作為數(shù)據(jù)緩存;④系統(tǒng)程序、中斷服務(wù)程序等共占用56K字節(jié)(Flash ROM和RAM各保留28K字節(jié)),總計(jì)需要存儲(chǔ)空間136K字節(jié)。這個(gè)需求已經(jīng)超過(guò)96系列單片機(jī)的64K字節(jié)尋址范圍,為此設(shè)計(jì)了一個(gè)存儲(chǔ)器模塊,其結(jié)構(gòu)如圖2所示。 [img=580,205]http://www.e-works.net.cn/ewk2004/fileupload/images/127423032543750000.gif[/img] Flash ROM采用ATMEL公司的AT29C1024,容量為128K字節(jié),數(shù)據(jù)線寬度為16位;RAM存儲(chǔ)器由兩片CY7C199組成,數(shù)據(jù)線寬度為16位,容量為64K字節(jié)。80C196單片機(jī)的ALE為地址鎖存信號(hào),/WE為寫(xiě)有效信號(hào),/RD為讀有效信號(hào),READY為準(zhǔn)備就緒信號(hào)。MCS-96系列單片機(jī)支持8位和16位兩種工作模式,為了提高系統(tǒng)的性能,選擇16位工作模式。96系列單片機(jī)地址是按照字節(jié)的方式來(lái)計(jì)算的,因此在16位工作模式下的A0=0沒(méi)有實(shí)際意義。在通常的讀寫(xiě)情況下,取經(jīng)過(guò)鎖存后的AD1~AD15地址作為A1~A15而A16=0。 下面以讀Flash ROM為例介紹地址擴(kuò)展方法。對(duì)于可以直接尋址的地址,EPLD作為鎖存器,將AD0~AD15分時(shí)的地址數(shù)據(jù)總線分開(kāi),生成獨(dú)立的地址和數(shù)據(jù)總線。在這里定義了兩個(gè)特殊的地址:Flash ROM數(shù)據(jù)塊的讀地址Address_F_R和讀位置指針地址Address_F_RP。首先向Ad-dress_F_RP寫(xiě)入一個(gè)16位的二進(jìn)制數(shù),該數(shù)代表了將要讀取的數(shù)據(jù)塊的首地址,16位表示范圍是0~65535,因此可以指定的首地址范圍是64K字即128K字節(jié);然后連續(xù)地從Address_F_R進(jìn)行讀取操作,每讀一次,位置指針會(huì)自動(dòng)加1而不需要重新設(shè)置。如果需要讀取新的位置,只需要向Address_F_RP地址寫(xiě)入新的位置數(shù)據(jù)即可。該功能在EPLD器件內(nèi)部的實(shí)現(xiàn)方法見(jiàn)圖3。計(jì)數(shù)器可同步設(shè)置初值、同步計(jì)數(shù),在AHDL語(yǔ)言中聲明為1pm_counter[5]。其中,CNT_EN為計(jì)數(shù)使能控制,當(dāng)CNT_EN為高電平時(shí),每當(dāng)CLOCK上升沿到來(lái)時(shí)計(jì)數(shù)器便會(huì)自動(dòng)加一,從而實(shí)現(xiàn)了地址自動(dòng)增加的功能;CLOCK為同步時(shí)鐘輸入端,上升沿有效;SLOAD為計(jì)數(shù)器同步設(shè)置初值信號(hào),當(dāng)該信號(hào)為高電平時(shí),在CLOCK上升沿的作用下,計(jì)數(shù)器的輸出Q[15..0]=D[15..0],從而實(shí)現(xiàn)初始化讀取位置的功能。計(jì)數(shù)器用AHDL語(yǔ)言描述如下: counter : lPm_counter with(1pm_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];
[img=549,329]http://www.e-works.net.cn/ewk2004/fileupload/images/127423032799531250.gif[/img]
clock信號(hào)要保證在寫(xiě)Address_F_RP地址修改讀取位置時(shí),或讀Address_F_R地址取數(shù)據(jù)時(shí)都能產(chǎn)生上升沿信號(hào)??偩€a0-a15和D0~D15分別是由AD0-AD15分離出來(lái)的地址和數(shù)據(jù)總線。多路選擇器則根據(jù)地址譯碼產(chǎn)生的S0-S3選擇輸出地址,輸出地址直接連接到RAM和Flash ROM的地址線上。如果訪問(wèn)除Address_F_RP和Address_F_RP以外的地址,則地址輸出總線A115..1)=a[15..1]、A16=0,即單片機(jī)直接訪問(wèn)存儲(chǔ)器;如果讀取Address_F_R,則片選/CS2有效并且A[16..1)Q(15..0]作為輸出地址。這樣就可以自動(dòng)地在不同存儲(chǔ)區(qū)域進(jìn)行切換,從而大大地增加了內(nèi)存的擴(kuò)充能力,并且簡(jiǎn)化了程序設(shè)計(jì)。運(yùn)用同樣的方法還可以定義FlashROM中的數(shù)據(jù)塊寫(xiě)入地址Address_F_W和寫(xiě)位置指針地址Address_F_WP,RAM中也有類似的方法定義Address_R_(RAM數(shù)據(jù)塊讀地址)、Address_R_RP(RAM數(shù)據(jù)塊的讀位置指針地址)、Address_R_W(RAM數(shù)據(jù)塊寫(xiě)地址)和Address_R_WP(RAM數(shù)據(jù)塊的寫(xiě)位置指針地址)。這樣可以方便地對(duì)內(nèi)存的擴(kuò)展部分進(jìn)行讀寫(xiě)。下面以MCS-96的匯編語(yǔ)言為例來(lái)說(shuō)明程序中是如何操作的。比如需要從IOPORT0口連續(xù)采集數(shù)據(jù),然后存放到RAM中指定的數(shù)據(jù)塊等待處理,則可以寫(xiě)出如下程序: LD 40H,地址值;地址值為即將寫(xiě)入的目的地址,16位按字編址。 ST 40H,Address_R_WP;設(shè)置寫(xiě)位置指針 REPEAT: LDB 40H,IOPORT0 LDB 41H,IOPORTO;40H和41H為內(nèi)部寄存器,因?yàn)榘醋执鎯?chǔ)所以連續(xù)讀兩次 ST 40H,Address_R_W ;寫(xiě)入指定位置條件判斷退出循環(huán) JMP REPEAT
[img=385,336]http://www.e-works.net.cn/ewk2004/fileupload/images/127423032990312500.gif[/img]
從上面這個(gè)簡(jiǎn)單的例子可以看出,這種存儲(chǔ)器組織方法大大簡(jiǎn)化了編程的的復(fù)雜性,并且可以采用對(duì)位置指針賦初值的方法來(lái)實(shí)現(xiàn)對(duì)擴(kuò)展存儲(chǔ)器中任何一個(gè)位置的讀寫(xiě)操作。 3 地址分配 有了上面的存儲(chǔ)器擴(kuò)展方法,再結(jié)合系統(tǒng)的技術(shù)參數(shù)和單片機(jī)的特點(diǎn),就可以做出一套合理的內(nèi)存地址分配方案。下面給出單片機(jī)的地址劃分情況: 0000H~01FFH 系統(tǒng)寄存器區(qū),保留0200H~1EFFH用戶區(qū),直接映射到Flash ROM中的 0200H~1EFFH 可以用來(lái)存放數(shù)據(jù)、程序等,該區(qū)域可以由單片機(jī)直接進(jìn)行尋址。 1FOOH~1FFFH 用戶區(qū),實(shí)際使用中把Address—1lR、Address_F_WP等地址以及一些特殊設(shè)備如A/D轉(zhuǎn)換器、LCD顯示屏等的訪問(wèn)地址設(shè)置在這個(gè)區(qū)域。 2000H~207FH 該區(qū)域是中斷向量區(qū)、芯片配置字節(jié)區(qū)、保留字區(qū)等,直接映射到Flash ROM中的2000H-207FH。 2080H~8FFFH 用戶區(qū),單片機(jī)啟動(dòng)也是從 2080H 處開(kāi)始執(zhí)行程序的,因此把這個(gè)地址范圍直接映射到 Flash ROM 的2080H~8FFFH,該區(qū)域設(shè)置系統(tǒng)的引導(dǎo)、初始化等程序。 9000H~FFFFH 用戶區(qū),將這一段映射到 RAM 的9000H~FFFFH,作為系統(tǒng)程序的運(yùn)行區(qū)域。
[img=549,248]http://www.e-works.net.cn/ewk2004/fileupload/images/127423033369843750.gif[/img]
上面的分配方案可以通過(guò)對(duì)地址總線進(jìn)行譯碼生成相應(yīng)的片選信號(hào)/CSl和/CS2來(lái)實(shí)現(xiàn)。這樣分配后,F(xiàn)lash ROM 和 RAM 的使用情況如圖4所示。 圖4中白色區(qū)域是單片機(jī)通過(guò)總線直接尋址的區(qū)域,可以由單片機(jī)直接進(jìn)行訪問(wèn)?;疑珔^(qū)域?yàn)閮?nèi)存的擴(kuò)展區(qū)域,不能被單片機(jī)直接訪問(wèn),但可以通過(guò)前面介紹的方法由EPLD生成地址進(jìn)行讀寫(xiě)操作。下面簡(jiǎn)要介紹一下各個(gè)區(qū)域在實(shí)際中的用途:Flash ROM中的0000H~1FFH和1F00H~1FFFH因?yàn)槿萘亢苄?,沒(méi)有被利用。系統(tǒng)啟動(dòng)后從Flash ROM的2080H處開(kāi)始執(zhí)行程序,將2000H~8FFFH的內(nèi)容復(fù)制到RAM中的9000H~FFFFH,然后跳轉(zhuǎn)到RAM中執(zhí)行系統(tǒng)程序。由于Hash ROM的速度慢,需要在讀寫(xiě)過(guò)程中插入一定量的等待周期,因此將程序復(fù)制到RAM中執(zhí)行可以提高系統(tǒng)的性能;同時(shí)系統(tǒng)在對(duì)Flash ROM進(jìn)行寫(xiě)入操作后,編程階段的10ms內(nèi)不能對(duì)其進(jìn)行讀取,因此RAM在這個(gè)時(shí)候也提供了程序運(yùn)行的位置。這樣分配后,程序的長(zhǎng)度被限制在28K字節(jié),實(shí)際中這個(gè)數(shù)量完全可以滿足系統(tǒng)的需求。Hash ROM中的9000~FFFFH共28K字節(jié),用來(lái)保存4段系統(tǒng)運(yùn)行配置程序,每段長(zhǎng)度可達(dá)7K字節(jié);10000H-1FFFFH共64K字節(jié),用來(lái)作為采集數(shù)據(jù)的保存區(qū)域。RAM中的0000H~8FFFH共36K字節(jié),用來(lái)作為數(shù)據(jù)的緩存區(qū)域。從上面的分析可以看出,最終設(shè)計(jì)的各項(xiàng)指標(biāo)都已經(jīng)超過(guò)實(shí)際的需求,能很好地解決實(shí)際應(yīng)用問(wèn)題。 4 合理利用日EADY信號(hào) 最后介紹一下單片機(jī)就緒信號(hào)READY在這個(gè)系統(tǒng)中的關(guān)鍵作用。從前面的設(shè)計(jì)中可以看出系統(tǒng)存在著高速RAM和慢速Hash ROM存儲(chǔ)器,開(kāi)始時(shí),Hash ROM選用了AT29C1024-70JCt31,它是該型號(hào)中速度最快的,有效數(shù)據(jù)建立時(shí)間僅為70ns。單片機(jī)不插入等待周期的讀寫(xiě)時(shí)序,如圖5所示。 從ALE下降沿地址有效到/RD上升沿的時(shí)間是80ns,Hash的響應(yīng)時(shí)間為70ns,再加上EPLD的延時(shí)就造成了單片機(jī)從Hash ROM讀取數(shù)據(jù)的不穩(wěn)定,表現(xiàn)在無(wú)法對(duì)Flash ROM進(jìn)行在線寫(xiě)入、經(jīng)常發(fā)生錯(cuò)誤的執(zhí)行結(jié)果、死機(jī)等。為此必須加入等待周期,延長(zhǎng)讀、寫(xiě)時(shí)間才能滿足Hash ROM的要求。在這里只需插入一個(gè)等待周期(100ns)便可以滿足要求,因此設(shè)置芯片配置字節(jié)CCR.5=0,CCR.4;0[1]。這樣,當(dāng)READY信號(hào)為低電平時(shí)便自動(dòng)插入且僅插入一個(gè)等待周期。一個(gè)簡(jiǎn)單的做法就是把Flash ROM的片選信號(hào)/CS2連接到READY,這樣,當(dāng)選中Flash ROM芯片時(shí)READY信號(hào)就跟隨/CS2同時(shí)變?yōu)榈碗娖?。按照這樣的設(shè)想可在EPLD內(nèi)部重新設(shè)置READY信號(hào),描述如下: 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) 可是實(shí)際故障依舊,通過(guò)測(cè)試得到的時(shí)序信號(hào)如圖6所示。
[img=513,326]http://www.e-works.net.cn/ewk2004/fileupload/images/127423033617031250.gif[/img]
READY信號(hào)的產(chǎn)生落后ALE下降沿5ns,造成READY信號(hào)產(chǎn)生無(wú)效,解決這個(gè)問(wèn)題的唯一方法是提前生成READY信號(hào)。實(shí)際中有效地址是在ALE下降沿鎖存后產(chǎn)生的,這也是READY信號(hào)產(chǎn)生表達(dá)式中最后一項(xiàng)的來(lái)源,但是考慮到地址的產(chǎn)生應(yīng)該發(fā)生在ALE下降沿之前,以保證鎖存到正確的地址。因此大膽設(shè)想讓READY信號(hào)的產(chǎn)生不再受ALE的控制,只要總線上產(chǎn)生地址就可以作出判斷,從而提前生成READY信號(hào)。但這樣的做法破壞了同步時(shí)序,而且異步生成READY信號(hào)容易產(chǎn)生冒險(xiǎn)現(xiàn)象。通過(guò)分析,可以發(fā)現(xiàn)異步生成 READY信號(hào)并不會(huì)帶來(lái)任何不穩(wěn)定因素,因此修改READY信號(hào)如下: 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) 即去掉了對(duì)地址有效信號(hào)ALE的判斷。修改后系統(tǒng)工作穩(wěn)定、正常。修改后對(duì)Hash ROM的讀寫(xiě)時(shí)序如圖7所示,而對(duì)RAM讀寫(xiě)的時(shí)序依舊是圖6,目的達(dá)到。考慮到插入一個(gè)等待周期后大大增加了讀寫(xiě)時(shí)間,因此將AT29C1024-70JC換成廉價(jià)的AT29C1024-12JC(有效數(shù)據(jù)建立時(shí)間為120ns)[3],系統(tǒng)依然能夠穩(wěn)定工作。通過(guò)使用,證明這種存儲(chǔ)器設(shè)計(jì)方案是可行的。
[img=462,278]http://www.e-works.net.cn/ewk2004/fileupload/images/127423033869531250.gif[/img]
前面詳細(xì)地介紹了一種實(shí)用的存儲(chǔ)器擴(kuò)展方法,該方法是基于PLD器件實(shí)現(xiàn)的,有效地解決了嵌入式系統(tǒng),尤其是數(shù)據(jù)采集、存儲(chǔ)系統(tǒng)中內(nèi)存擴(kuò)展的問(wèn)題。該方法能夠簡(jiǎn)化程序設(shè)計(jì),并且不需要隨CPU型號(hào)的變化而修改設(shè)計(jì),具有很好的可移植性。同時(shí)還給出了一種較為復(fù)雜的單片機(jī)外部存儲(chǔ)器的組織方案,包括了Flash ROM和RAM構(gòu)成的存儲(chǔ)系統(tǒng)。最后提出了將READY信號(hào)由同步產(chǎn)生改為異步產(chǎn)生的方式,解決了CPU在高速RAM與低速Flash ROM之間切換產(chǎn)生的問(wèn)題,最終設(shè)計(jì)成了一套較為完善的CPU外部存儲(chǔ)器系統(tǒng)。

標(biāo)簽:

點(diǎn)贊

分享到:

上一篇:基于CC-Link的海況實(shí)時(shí)分布式...

下一篇:微能WIN-V63矢量控制變頻器在...

中國(guó)傳動(dòng)網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來(lái)源:中國(guó)傳動(dòng)網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國(guó)傳動(dòng)網(wǎng)(www.treenowplaneincome.com)獨(dú)家所有。如需轉(zhuǎn)載請(qǐng)與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個(gè)人轉(zhuǎn)載使用時(shí)須注明來(lái)源“中國(guó)傳動(dòng)網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明其他來(lái)源的稿件,均來(lái)自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請(qǐng)保留稿件來(lái)源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。

網(wǎng)站簡(jiǎn)介|會(huì)員服務(wù)|聯(lián)系方式|幫助信息|版權(quán)信息|網(wǎng)站地圖|友情鏈接|法律支持|意見(jiàn)反饋|sitemap

中國(guó)傳動(dòng)網(wǎng)-工業(yè)自動(dòng)化與智能制造的全媒體“互聯(lián)網(wǎng)+”創(chuàng)新服務(wù)平臺(tái)

網(wǎng)站客服服務(wù)咨詢采購(gòu)咨詢媒體合作

Chuandong.com Copyright ?2005 - 2024 ,All Rights Reserved 版權(quán)所有 粵ICP備 14004826號(hào) | 營(yíng)業(yè)執(zhí)照證書(shū) | 不良信息舉報(bào)中心 | 粵公網(wǎng)安備 44030402000946號(hào)