1 PROTEUS軟件簡介
PROTEUS 是來自英國公司的工具軟件,在全球廣泛使用。和其它工具相比,這款軟件的最大特點就在於(yu) 它能夠模擬單片機。可以直接在基於(yu) 原理圖的虛擬原型EDA上編程,並實現軟件源碼級的實時調試。還能看到運行後輸入輸出的效果。但是現在大家都隻注意到PROTEUS對單片機的仿真和如何與(yu) Keil進行關(guan) 聯調試,其實 PROTEUS還能夠進行PLD的電路仿真。
PLD(可編程邏輯器件)是一種數字集成電路的半成品,在其芯片上按一定排列方式集成了大量的門和觸發器等基本邏輯元件,使用者可利用某種開發工具對其進行加工,即按設計要求將這些片內(nei) 的元件連接起來,使之完成某個(ge) 邏輯電路或係統的功能,成為(wei) 一個(ge) 可在實際電子係統中使用的專(zhuan) 用集成電路。
一般的PLD設計軟件隻能進行PLD芯片的時序邏輯仿真,而PROTEUS能進行PLD的電路仿真,可以模擬設計的PLD芯片在電路中實際運行的情況。
我們(men) 通過使用GAL16V8設計一個(ge) 在單片機係統裏常用的三八譯器,然後在PROTEUS中通過觀察GAL16V8中三八譯碼器的輸入與(yu) 輸出的對應關(guan) 係來完成PLD的電路仿真。
2. PLD的設計
首先用Protel 99SE完成PLD的設計。
完成後的PLD原理圖如下所示:
圖1 畫好的PLD原理圖
這是一個(ge) 3-8譯碼器的PLD文件。輸入信號為(wei) 目標元件的2、3、4三個(ge) 腳,輸出信號為(wei) 目標元件的12-19腳,6-8腳為(wei) 使能控製端。
Protel 99SE的PLD原理圖的設計與(yu) 普通原理圖相同,但有幾點是需要注意:
- 生成PLD元理圖後,在原理圖中自動加入了兩個PLD的元件庫(PLD_Devices.lib、PLD_Symbols.lib),PLD的電路圖繪製必需使用這兩個庫中的元件。
- 繪製PLD原理圖時,必須放置輸入/輸出端口(輸入:ipads、輸出:OPAD、輸入/輸出:IOPAD)元件,這些元件所指定的引腳代表著目標器件的引腳。
- 在輸入/輸出端口元件放置好後,必須對其進行編號,還要指定該端口元件所對應連接的目標器件的引腳號。
完成PLD原理圖後,選擇[PLD]/[Compile]進行編譯,生成各種格式的文件:
圖2 編譯生成的各種文件
打開生成的.jed文件,點擊右鍵,在彈出的窗口中選擇[Export…]項,選擇.jed文件的輸出目標地址。
至此就完成了PLD文件的設計。
3 Proteus對PLD的仿真
啟動Proteus,繪製好電路圖。
圖3 Proteus仿真電路圖
電路中LED顯示采用低電平時LED點亮的顯示方式。電路中I1-I3為(wei) GAL16V8輸入端口,端口為(wei) 高電平時為(wei) 1,低電平時為(wei) 0, IO0-IO7為(wei) 輸出端口,輸出端口為(wei) :LED燈亮時端口輸出低電平0,熄滅時為(wei) 高電平1。
為(wei) 了使PLD元件能仿真,還必須在電路中將編譯的.jed文件加入PLD元件中:將鼠標移到U1(16V8)中,右擊,選擇元件,然後左擊,調出“元件的屬性”對話框,在屬性對話框中,在窗口中的“JEDEC Fuse Map File:”中加入.jed文件:
圖4 16V8元件屬性
由前麵PLD的設計可得3-8譯碼器的真值表:
輸入信號 輸出信號
I3 I2 I1 IO7 IO6 IO5 IO4 IO3 IO2 IO1 IO0
0 0 0 1 1 1 1 1 1 1 0
0 0 1 1 1 1 1 1 1 0 1
0 1 0 1 1 1 1 1 0 1 1
0 1 1 1 1 1 1 0 1 1 1
1 0 0 1 1 1 0 1 1 1
1 0 1 1 1 0 1 1 1 1 1
1 1 0 1 0 1 1 1 1 1 1
1 1 1 0 1 1 1 1 1 1 1
表1 3-8譯碼器真值表
為(wei) 了觀察16V8的輸入與(yu) 輸出的對應關(guan) 係,我們(men) 在AT89C52的程序(程序見附錄)中將與(yu) I3、I2、I1相連的P2_2、P2_1、P2_0三個(ge) 端口按真值表中的順序依次改變,觀察LED燈是否由IO0至IO7依附點亮。
將單片機的程序加入AT89C52後,在Proteus中點擊Play鍵觀看電路仿真結果:當輸入端的I1、I2、I3值按程序設定按真值表中的000— 111依附改變時,輸出端對應LED燈按真值表中的對應關(guan) 係由IO0至IO7依次點亮,如下圖。說明PLD器件16V8設計的三八譯碼器譯碼正確。
圖5 譯碼電路對應輸入/輸出截圖
4. 結語
單片機與(yu) PLD的結合是當前嵌入式設計經常采用一的種方式。 但如果要進行硬件電路測試和係統調試則比較麻煩, 因為(wei) 要進行這兩(liang) 個(ge) 過程必須在電路板製作完成、元器件焊接完畢之後進行。而電路板的製作、元器件的安裝、焊接是費時費力的, 如果采用作為(wei) 單片機係統的仿真工具PROTEUS 進行單片機和PLD的仿真, 則不用製作具體(ti) 的電路板也能夠完成以上工作。在使用PROTEUS 運行係統虛擬開發成功之後再進行實際製作, 可以直觀得觀察電路的運行情況,提前發現設計的錯誤,可以極大的提高開發效率、降低開發成本、提高開發速度。
程序附錄:
#include<reg51.h>
#include<stdio.h>
sbit P2_0=P2^0;
sbit P2_1=P2^1;
sbit P2_2=P2^2;
void delaytime(int count);
void main(void)
{
while(1)
{
P2_2=0;
P2_1=0;
P2_0=0;
delaytime(500);
P2_2=0;
P2_1=0;
P2_0=1;
delaytime(500);
P2_2=0;
P2_1=1;
P2_0=0;
delaytime(500);
P2_2=0;
P2_1=1;
P2_0=1;
delaytime(500);
P2_2=1;
P2_1=0;
P2_0=0;
delaytime(500);
P2_2=1;
P2_1=0;
P2_0=1;
delaytime(500);
P2_2=1;
P2_1=1;
P2_0=0;
delaytime(500);
P2_2=1;
P2_1=1;
P2_0=1;
delaytime(500);
}
}
void delaytime(int count)
{
int j,k;
while(count-- !=0)
{
for(j=0;j<10;j++)
for(k=0;k<72;k++)
;
}
}