基于FPGA的SOC外部組件控制器IP的設(shè)計(jì)
控制電路(Control Circuit)是lcd_fct 的核心。它控制數(shù)據(jù)輸入寄存器(Data_in Register)、數(shù)據(jù)輸出寄存器(Data_out Register)、狀態(tài)寄存器(State Register)、控制寄存器(Control Register)和時(shí)間常數(shù)寄存器(Time Constant Register)。控制電路根據(jù)指令標(biāo)志和時(shí)序來(lái)操作不同的寄存器,實(shí)現(xiàn)lcd_fct 的管理和運(yùn)行。
數(shù)據(jù)輸入寄存器接受來(lái)自MP 的數(shù)據(jù)并根據(jù)需要送數(shù)據(jù)到數(shù)據(jù)輸出寄存器。數(shù)據(jù)輸出寄存器把數(shù)據(jù)通過(guò)數(shù)據(jù)線lcd_db 送到LCD 模塊的數(shù)據(jù)總線上。這個(gè)數(shù)據(jù)既可能是要顯示的數(shù)據(jù),也可能是指令。
控制寄存器產(chǎn)生操作LCD 的控制信號(hào),如LCD 中選信號(hào)(lcd_e)、LCD 內(nèi)部寄存器選擇信號(hào)(lcd_rs)和LCD 讀寫(xiě)信號(hào)(lcd_r_w)。
狀態(tài)寄存器在LCD 處于工作下,會(huì)產(chǎn)生LCD 繁忙信號(hào)(lcd_busy)。這意味著,LCD 此時(shí)不會(huì)接受其它指令。與其它信號(hào)不同,lcd_busy 是發(fā)送給MP 的。
實(shí)際上lcd_fct 的運(yùn)行操作主要是對(duì)各種控制、狀態(tài)和數(shù)據(jù)信號(hào)進(jìn)行管理。
4 FPGA 設(shè)計(jì)和仿真
在 lcd_fct 的FPGA 設(shè)計(jì)中,主要采用的VHDL 語(yǔ)言的程序設(shè)計(jì)[7]、MAX Plus-II 仿真以及SOC 和LCD 的實(shí)際連接調(diào)試。lcd_fct 的HVDL 設(shè)計(jì)框架如下:
Library
Entity lcd_fct is
Port( );
End lcd_fct;
Architecture struct of lcd_fct is
Signal
Constant
Begin
Res: process;
Clk :clk_div;
LCD: process;
Begin
If init then
Initialization;
Elsif clr then
Clear LCD;
Elsif addr then
Write address to LCD RAM;
Elsif data then
Write data to LCD RAM;
End if;
End process;
Us: ustimer;
Ms: mstimer;
End struct;
LCD 控制器IP 模塊lcd_fct 的仿真結(jié)果如圖3 所示。在圖中左側(cè)的信號(hào)就是lcd_fct 的輸入/
輸出信號(hào)。
圖 3 lcd_fct 的功能仿真
當(dāng)把write_e 設(shè)置成高電平時(shí),指令寫(xiě)入lcd_fct。對(duì)于讀寫(xiě)控制信號(hào)lcd_r_w 來(lái)說(shuō),低電平為寫(xiě)操作,高電平為讀操作。由于該仿真都是lcd_fct 對(duì)LCD 進(jìn)行寫(xiě)操作,lcd_r_w 始終為低電平。圖中通過(guò)addrin 的變化來(lái)代表不同的指令。
在addrin 等于7FFF 時(shí),lcd_db 被賦值01。這意味著LCD 被清屏。當(dāng)addrin 等于7FFE,且data_in 送入31 時(shí),lcd_db 被賦值31,LCD 就會(huì)顯示“1”。 Addrin 被設(shè)置成7FFD,且data_in 等于8 時(shí),被顯示的字符將出現(xiàn)在顯示屏的第8 個(gè)字符的位置,實(shí)現(xiàn)了定位顯示功能。
當(dāng)addrin 被賦值7FFC 時(shí),LCD 被初始化。初始化包括功能設(shè)置、關(guān)閉顯示、打開(kāi)顯示、清屏、顯示移位和工作方式設(shè)置等操作。
由此可見(jiàn),只要在SOC 的MP 中加入適當(dāng)?shù)闹噶?,可以?duì)addrin 進(jìn)行控制,SOC 就可以完成對(duì)LCD 的管理。由于本設(shè)計(jì)中SOC 的MP 是可重配置MP,添加或修改指令是不存在問(wèn)題的。仿真表明,lcd_fct 的設(shè)計(jì)達(dá)到了設(shè)計(jì)目標(biāo),操作結(jié)果是令人滿意的。一般的LCD 程序控制完成一項(xiàng)操作(如初始化)需要執(zhí)行多條軟件指令。用FPGA 設(shè)計(jì)的lcd_fct 只要一條指令就能完成相應(yīng)的操作,而且是硬件運(yùn)行,效率提高了許多倍。
5 結(jié)論
組件控制器的設(shè)計(jì)是SOC 設(shè)計(jì)的重要組成部分。采用FPGA 是完成組件控制器設(shè)計(jì)的有效手段。通過(guò)LCD 控制器的設(shè)計(jì)和仿真,說(shuō)明基于FPGA 的組件控制器可以用一條指令完成原來(lái)許多條指令才能完成的操作,可以大大提高系統(tǒng)的運(yùn)行效率。因此,這是一項(xiàng)有意義的工作。
本文作者創(chuàng)新點(diǎn)在于把FPGA 設(shè)計(jì)和SOC 的組件控制器聯(lián)系起來(lái),并通過(guò)一個(gè)具體例子介紹了如何設(shè)計(jì)單指令驅(qū)動(dòng)的組件控制器。
評(píng)論