前言
現(xiàn)場可編程門陣列(FPGA)是近幾年來出現(xiàn)并被廣泛應用的大規(guī)模集成電路器件,,它的特點是直接面向用戶,,具有極大的靈活性和通用性使用方便,,硬件測試和實現(xiàn)快捷,開發(fā)效率高,,成本低,,上市時間短,技術維護簡單,,工作可靠性好等,。
硬件描述語言(VHDL)是用來描述硬件電路的功能,信號連接關系及時序關系的高級硬件編程語言,,設計者可根據(jù)VHDL語言法則,,對系統(tǒng)的邏輯進行行為描述,然后通過綜合工具進行電路結構的綜合,、編譯,、優(yōu)化,用仿真工具進行邏輯功能仿真和系統(tǒng)時序仿真,,可在短時間內設計出高效,、穩(wěn)定、符合設計要求的大規(guī)?;虺笠?guī)模的集成電路,。
該處理器采用了TOP—DOWN的層次網(wǎng)絡模塊化設計方法,用VHDL描述了嵌入式PLC的CPU的主要邏輯功能,,考慮到嵌入式CPU結構的復雜性和設計的可擴展性,,在頂層設計中采用了原理圖的方法,通過VHDL對每個單元模塊進行了仿真和綜合,,然后將綜合生成的各個模塊連接起來,,組成了一個整體
1 系統(tǒng)設計
1.1 系統(tǒng)的功能
該PLC主要是用來與DSP共同實現(xiàn)數(shù)控機床中的部分操作,它主要執(zhí)行一些輔助的邏輯控制,。它的主要任務如下:
(1)接收從DSP發(fā)送過來的指令字,,并將其進行譯碼轉換成相應的命令信號,從而執(zhí)行相應的操作,;(2)接收操作面板上的按鍵信號,,并響應相應的操作;(3)給DSP發(fā)送應答信號以及狀態(tài)信息,;(4)將處理的結果輸出到面板上以驅動相應的繼電器,。
1.2 系統(tǒng)的組成部分
該系統(tǒng)的核心組成部分是由控制器,、運算器以及I/0端口構成,如圖1所示,。
控制器:控制器是由程序計數(shù)器,、指令寄存器、指令譯碼器,、時序產生器和操作控制器等組成,,它是發(fā)布命令的“決策機構”。運算器:運算器由算術邏輯單元,、暫存器以及數(shù)據(jù)緩沖器等組成,,它是數(shù)據(jù)的加工處理部件。
I/0端口該PLC的I/O點數(shù)為l0點輸入和8點輸出,。每個端口由輸入寄存器以及相應的端口控制部分組成,。
2 系統(tǒng)的FPGA實現(xiàn)
2.1 控制器
控制器的形式主要有組合邏輯控制器和微程序控制器兩種,與組合邏輯控制器相比較,,微程序控制器具有規(guī)整性,、靈活性、可維護性等一系列優(yōu)點 ,,在計算機的設計中使用比較普遍,,本控制器的設計采用的也是微程序控制器。微程序控制的基本思想,,就是仿照通常的解題程序的方法,,把操作控制信號編成所謂的“微指令”,存放到一個只讀存儲器里,。當機器運行時,,一條又一條地讀出這些微指令,從而產生全機所需要的各種操作控制信號,,使相應部件執(zhí)行所規(guī)定的操作 ,。
微程序控制器主要由控制存儲器(CM),微地址產生邏輯,,微地址寄存器(uAR),,微指令寄存器(ulR)等組成。
(1)機器指令與微程序,。該處理器選取了PLC指令系統(tǒng)中的十條基本指令如表1所示,,指令采用十位二進制編碼格式。
第9~6位是四位指令的操作碼字段,;第5位是標志位,用來判斷該指令有無操作數(shù)(1一有操作數(shù),,0一無操作數(shù)),;第4~0位是操作數(shù)字段,。
表中每條機器指令對應一段微程序,一段微程序包含若干條微指令,,微程序的設計就具體地可落實到微指令的設計 ,,微指令中的控制字段作為控制命令控制計算機的操作,控制字段給出的微命令應包含計算機操作的所有微命令,,對微命令給出和表示的方法與所采用的編碼方式有關,,常用的微命令表示方法有直接表示法、編碼表示法,、和混合表示法,,該設計采用的是將直接表示法和編碼表示法混合使用的混合表示法。
該系統(tǒng)中的每條微指令為32位,,其中低5位為下地址字段,,直接送給微地址寄存器,第5~7位為測試字段,,送到微地址產生邏輯電路里面以控制微地址的產生,,其余位為用來產生各種微命令的控制字段。
(2)控制存儲器,??刂拼鎯ζ髦写娣诺氖歉髦噶钏鶎奈⒊绦颍梢杂肍PGA中的LPM—ROM模塊來實現(xiàn),,如圖2所示,。Clock為同步時鐘信號,address為5位的地址值,,q為32位的微指令,,當clock上升沿到來時,rom就把address所對應的地址中的值輸出給q,。
(3)微地址產生邏輯,。微地址產生邏輯主要是根據(jù)微指令中的測試位及其他相關的條件來控制微地址的產生,它是根據(jù)一定的邏輯功能用VHDL語言編寫的,,并且經過編譯和綜合后生成的模塊,,如圖3所示。
其中,,clk為同步時鐘信號,,rst為復位信號,q為輸出的5位微地址值,。其控制流程如下:
(1)系統(tǒng)啟動時,,給出一個rst=1的復位信號,q端便輸出“00010”,,為輸入掃描微程序的入口地址,;(2)對應的微指令就從控存中輸出,,然后該微指令中的5位下地址字段直接輸入到din端,3位測試位輸入到m端,;(3)如果m=“000”,,則q端輸出的地址值直接加1,且返回(2)繼續(xù)執(zhí)行,;否則,,執(zhí)行下一步;(4)如果m=“001”,,則看i端輸入的用戶程序指令來判斷是否需要取數(shù)操作,,如果需要,則q端輸出各個取數(shù)微程序的入口地址,;如果不需要,,則q端根據(jù)i的操作碼輸出相應指令的微程序入口地址,且返回(2)繼續(xù)執(zhí)行,;否則,,執(zhí)行下一步;(5)如果m=“010”,,q端直接輸出din的地址值,,且返回(2)繼續(xù)執(zhí)行;否則,,執(zhí)行下一步,;(6)如果m=“011”,則q端根據(jù)i的操作碼輸出相應指令的微程序人口地址,,且返回(2)繼續(xù)執(zhí)行,。
2.2 運算器
運算器是用來對輸入的數(shù)據(jù)進行算術和邏輯運算的部件 ,該ALU具有三輸入和兩輸出,,d1和d2是參與邏輯運算的兩個位數(shù)據(jù),,其中dl來自外部的取數(shù),d2來自輸出暫存器s,,sel是指令的操作碼,。result是運算后的結果,輸出后送給了暫存器S,,q用來啟動定時器,,如圖4所示。
2 3 RAM 圖4 運算器原理圖
RAM用來存儲用戶程序,,它可以用FPGA中的LPM—RAM—DQ模塊來實現(xiàn),。其中,wren是讀寫控制端,當wren=0時為讀允許,,這時在同步時鐘clock的上升到來時沿將address所對應的地址中的內容給輸出端q,;當wren=1時為寫允許,這時在同步時鐘clock的上升沿到來時將data端的數(shù)據(jù)寫入到address所指明的地址中,,如圖5所示。
3 仿真與分析
為了測試指令的運行情況,,本文在最后給出了一段基于Quartus II的程序仿真,。
仿真時給出了10位輸入數(shù)據(jù)indata=”1 1 10000101”,10.0~10.4分別對應著該數(shù)據(jù)的第0位~第4位,,同樣QO.o和Qo.1分別對應著輸出端子的第,。位和第1位。
仿真結果的圖6中:T1,,T2,,T3,T4為4個時鐘節(jié)拍信號,,out0和out1分別對應著輸出端子Qo.o和Qo.1,,因為IO.o和IO.2為1,IO.3和IO.4都為o,,因此程序運行的最后結果應該是QO.o和Q0.1都為1,,并且從圖6可以看出,仿真結果與此相同,,程序運行正確,,說明所設計的微處理器及其指令正確可靠。
4 結束語
本文所設計的PLC微處理器具有很強的可修改性和可移植性,,并且優(yōu)化升級也很方便,,可以根據(jù)特定的需要方便地增刪指令和I/O端口的數(shù)量,這比傳統(tǒng)的PLC具有更大的靈活性,。另外,,由于FPGA具有很高的密度,能夠集成很大的系統(tǒng) ,,因而極大地提高了系統(tǒng)的可靠性,。