SOPC(SystemOnProgrammableChip) 是用可編程邏輯技術(shù)把整個(gè)系統(tǒng)放到一片硅片上的一種特殊嵌入式系統(tǒng)一方面,它片上系統(tǒng)(SOC)完成整個(gè)系統(tǒng)的邏輯功能;另一方面,它是可編程系統(tǒng),具有靈活的設(shè)計(jì)方式,可裁剪,擴(kuò)充,升級(jí),并具備軟硬件在系統(tǒng)可編程功能J.S)PC 是PID 和ASIC 技術(shù)融合的結(jié)果,可以認(rèn)為SOPC代表了半導(dǎo)體產(chǎn)業(yè)未來的發(fā)展方向。本文采用EDA 軟件QuartuslI 中的SOPCBuilder 構(gòu)建了一個(gè)SOPC 系統(tǒng)。并以構(gòu)建的系統(tǒng)為平臺(tái)進(jìn)行電子鐘的軟件設(shè)計(jì):最后在Altera公司FPGA 多媒體開發(fā)平臺(tái)DE2 上進(jìn)行實(shí)現(xiàn)該方案不同于基于處理器或控制器及SOC 的嵌入式系統(tǒng),基于SOPC 的嵌入式系統(tǒng)具有可配置的特點(diǎn),不會(huì)包括任何專用外設(shè),而是可根據(jù)需要靈活地在一片F(xiàn)PGA 中構(gòu)造外設(shè)接口。
電子鐘是一種用數(shù)字電子技術(shù)實(shí)現(xiàn)時(shí)、分、秒自然計(jì)時(shí)的裝置,與機(jī)械式時(shí)鐘相比具有更高的準(zhǔn)確性和直觀性,而且使用壽命較長,與機(jī)械鐘相比具有更高的準(zhǔn)確性和直觀性,具有更長的使用壽命,已得到廣泛的使用。數(shù)字鐘的設(shè)計(jì)方法有許多種,例如可用中小規(guī)模集成電路組成電子鐘,也可以利用專用的電子鐘芯片配以顯示電路及其所需要的外圍電路組成電子鐘,還可以利用單片機(jī)來實(shí)現(xiàn)電子鐘等等。這些方法都各有其特點(diǎn),其中利用單片機(jī)實(shí)現(xiàn)的電子鐘具有編程靈活,以便于功能的擴(kuò)展。
電子鐘設(shè)計(jì)原理
數(shù)字鐘的示意如下圖所示。它由石英晶體振蕩器、分頻器、計(jì)數(shù)器、譯碼器顯示器和校時(shí)電路組成。振蕩器產(chǎn)生穩(wěn)定的高頻脈沖信號(hào),作為數(shù)字鐘的時(shí)間基準(zhǔn),然后經(jīng)過分頻器輸出標(biāo)準(zhǔn)秒脈沖。秒計(jì)數(shù)器滿60后向分計(jì)數(shù)器進(jìn)位,分計(jì)數(shù)器滿60后向小時(shí)計(jì)數(shù)器進(jìn)位,小時(shí)計(jì)數(shù)器按照“24翻1”規(guī)律計(jì)數(shù)。計(jì)數(shù)器的輸出分別經(jīng)譯碼器送顯示器顯示。計(jì)時(shí)出現(xiàn)誤差時(shí),可以用校時(shí)電路校時(shí)、校分。
電子鐘功能
1) 具有正確的時(shí)、分、秒計(jì)時(shí)功能。
2) 計(jì)時(shí)結(jié)果要用數(shù)碼管分別顯示進(jìn)、分、秒的十位和個(gè)位。
3) 有校時(shí)功能。當(dāng)S鍵按下時(shí),分計(jì)數(shù)器以秒脈沖的速度遞增,并按60min循環(huán),即
計(jì)數(shù)到期59min后再回到00。當(dāng)工A鍵按下時(shí),時(shí)計(jì)數(shù)器以秒脈沖的速度遞增,并按24h循環(huán),即計(jì)數(shù)到23h后再回00。
4) 利用揚(yáng)聲器整點(diǎn)報(bào)時(shí)。當(dāng)計(jì)時(shí)到達(dá)59分59秒時(shí)開始報(bào)時(shí),在59分50秒、52秒、54秒、56秒、58秒時(shí)鳴叫,鳴叫聲頻為500hz;到達(dá)59分60秒時(shí)為最后一聲整點(diǎn)報(bào)時(shí),頻率為1khz。
控定時(shí)器的基本組成
數(shù)字鐘鐘控定時(shí)器由:計(jì)數(shù)器、D觸發(fā)器、數(shù)據(jù)選擇器、數(shù)據(jù)分配器、譯碼器、報(bào)時(shí)器、鬧時(shí)器組、分頻器和一個(gè)或非門這九大模塊構(gòu)成。計(jì)數(shù)器主要分為24進(jìn)制計(jì)數(shù)器和60進(jìn)制計(jì)數(shù)器,24進(jìn)制計(jì)數(shù)器對(duì)數(shù)字鐘的小時(shí)位計(jì)行計(jì)數(shù),60進(jìn)制對(duì)數(shù)字鐘的分和秒進(jìn)行計(jì)數(shù)。D觸發(fā)器主要是用在對(duì)數(shù)字進(jìn)行校準(zhǔn)時(shí)的按鍵消抖作用,以免在校時(shí)的時(shí)候產(chǎn)生抖動(dòng)信號(hào)。數(shù)據(jù)分配器的作用是在動(dòng)態(tài)譯碼時(shí)選擇輸出數(shù)據(jù)。譯碼器對(duì)輸出信號(hào)進(jìn)行譯碼在數(shù)碼管上顯示出來,讓大家數(shù)字鐘的表示直觀。報(bào)時(shí)電路是使時(shí)鐘在整點(diǎn)有報(bào)時(shí)功能而設(shè)計(jì)的。鬧時(shí)器是對(duì)時(shí)鐘進(jìn)行比較產(chǎn)生鬧時(shí)電信號(hào)的電路。
D觸發(fā)器的設(shè)計(jì)
在本設(shè)計(jì)中運(yùn)用到了3個(gè)D觸發(fā)器,它主要是用在對(duì)數(shù)字進(jìn)行校準(zhǔn)時(shí)的按鍵消抖作用,以免在校時(shí)的時(shí)候產(chǎn)生抖動(dòng)信號(hào)。
在電路中用到了D觸發(fā)器74LS74,74LS74的管腳圖如圖3-1。
觸發(fā)器,它是由門電路構(gòu)成的邏輯電路,它的輸出具有兩個(gè)穩(wěn)定的物理狀態(tài)(高電平和低電平),所以它能記憶一位二進(jìn)制代碼。觸發(fā)器是存放在二進(jìn)制信息的最基本的單元。按其功能可為基本RS觸發(fā)器觸、JK觸發(fā)器、D觸發(fā)器和T觸發(fā)器。
這幾種觸發(fā)器都有集成電路產(chǎn)品。其中應(yīng)用最廣泛的當(dāng)數(shù)JK觸發(fā)器和D觸發(fā)器。不過,深刻理解RS觸發(fā)器對(duì)全面掌握觸發(fā)器的工作方式或動(dòng)作特點(diǎn)是至關(guān)重要的。事實(shí)上,JK觸發(fā)器和D觸發(fā)器是RS觸發(fā)器的改進(jìn)型,其中JK觸發(fā)器保留了兩個(gè)數(shù)據(jù)輸入端,而D觸發(fā)器只保留了一個(gè)數(shù)據(jù)輸入端。D觸發(fā)器有邊沿D觸發(fā)器和高電平D觸發(fā)器。74LS74為一個(gè)電平D觸發(fā)器。
數(shù)據(jù)選擇器的設(shè)計(jì)
在多路數(shù)據(jù)傳送過程中,能夠根據(jù)需要將其中任意一路選出來的電路,叫做數(shù)據(jù)選擇器,也稱多路選擇器或多路開關(guān)。數(shù)據(jù)選擇器(MUX)的邏輯功能是在地址選擇信號(hào)的控制下,從多路數(shù)據(jù)中選擇一路數(shù)據(jù)作為輸出信號(hào)。
通過QuartusII軟件進(jìn)行編譯后,仿真結(jié)果如圖3-2所示,
打包后成元器件如圖3-3所示;
計(jì)數(shù)器的設(shè)計(jì)
計(jì)數(shù)器是一種計(jì)算輸入脈沖的時(shí)序邏輯網(wǎng)絡(luò),被計(jì)數(shù)的輸入信號(hào)就是時(shí)序網(wǎng)絡(luò)的時(shí)鐘脈沖,它不僅可以計(jì)數(shù)而且還可以用來完成其他特定的邏輯功能,如測(cè)量、定時(shí)控制、數(shù)字運(yùn)算等等。
數(shù)字鐘的計(jì)數(shù)電路是用兩個(gè)六十進(jìn)制計(jì)數(shù)電路和“24進(jìn)制”計(jì)數(shù)電路實(shí)現(xiàn)的。數(shù)字鐘的計(jì)數(shù)電路的設(shè)計(jì)可以用反饋清零法。當(dāng)計(jì)數(shù)器正常計(jì)數(shù)時(shí),反饋門不起作用,只有當(dāng)進(jìn)位脈沖到來時(shí),反饋信號(hào)將計(jì)數(shù)電路清零,實(shí)現(xiàn)相應(yīng)模的循環(huán)計(jì)數(shù)。以六十進(jìn)制為例,當(dāng)計(jì)數(shù)器從00,01,02,……,59計(jì)數(shù)時(shí),反饋門不起作用,只有當(dāng)?shù)?0個(gè)秒脈沖到來時(shí),反饋信號(hào)隨即將計(jì)數(shù)電路清零,實(shí)現(xiàn)模為60的循環(huán)計(jì)數(shù)。
下面是用Verilog HDL語言編寫的24進(jìn)制、60進(jìn)制計(jì)數(shù)器的程序代碼: 1)24進(jìn)制計(jì)數(shù)器程序代碼;
module count24(ten,one,clk); output[3:0] ten,one; input clk;
reg[3:0] ten,one; always @(posedge clk) begin
if(ten[3:0]==2&&one[3:0]==3) begin
ten[3:0]《=0; one[3:0]《=0; end
else if(one[3:0]==9) begin
one[3:0]《=0;
ten[3:0]《=ten[3:0]+1; end else
one[3:0]《=one[3:0]+1; end
endmodule
通過QuartusII軟件進(jìn)行編譯后,仿真結(jié)果如圖3-4所示,
打包后成元器件如圖3-5所示;
60進(jìn)制計(jì)數(shù)器程序代碼;
module count60(cout,ten,one,clk); output[3:0] ten,one; output cout; input clk;
reg[3:0] ten,one; always @(posedge clk) begin
if(one[3:0]==9) begin
one[3:0]《=0; if(ten[3:0]==5) ten[3:0]《=0; else
ten[3:0]《=ten[3:0]+1; end else
one[3:0]《=one[3:0]+1; end
assign cout=(ten[3:0]==0&&one[3:0]==0)?1:0; endmodule
通過QuartusII軟件進(jìn)行編譯后,仿真結(jié)果如圖3-6所示;
打包后成元器件如圖3-7所示
數(shù)據(jù)分配器
能夠?qū)?個(gè)輸入數(shù)據(jù),根據(jù)需要傳送到m個(gè)輸出端的任何一個(gè)輸出端的電路,叫做數(shù)據(jù)分配器,又稱為多路分配器,其邏輯功能正好與數(shù)據(jù)選擇器相反。電路結(jié)構(gòu):由與門組成的陣列。分類:1路-4路數(shù)據(jù)分配器(如74LS139)、1路-8路數(shù)據(jù)分配器(74LS138)等。由于譯碼器和數(shù)據(jù)分配器的功能非常接近,所以譯碼器一個(gè)很重要的應(yīng)用就是構(gòu)成數(shù)據(jù)分配器。 也正因?yàn)槿绱耍袌?chǎng)上沒有集成數(shù)據(jù)分配器產(chǎn)品,只有集成譯碼器產(chǎn)品。
通過QuartusII軟件進(jìn)行編譯后,仿真結(jié)果如圖3-8所示;
譯碼器
譯碼器是一個(gè)多輸入、多輸出的組合邏輯電路。它的工作是把給定的代碼進(jìn)行“翻譯”,變成相應(yīng)的狀態(tài),使輸出通道中相應(yīng)的一路有信號(hào)輸出。譯碼器在數(shù)字系統(tǒng)中有廣泛的用途,不僅用于代碼的轉(zhuǎn)換、終端的數(shù)字顯示,還用于數(shù)字分配,存儲(chǔ)器尋址和組合控制信號(hào)等。譯碼器可以分為通用譯碼器和顯示譯碼器兩大類。在電路中用的譯碼器是共陰極譯碼器74LS48,用74LS48把輸入的8421BCD碼ABCD譯成七段輸出a-g,再由七段數(shù)碼管顯示相應(yīng)的數(shù)。
通過QuartusII軟件進(jìn)行編譯后,仿真結(jié)果如圖3-11所示;
分頻器
分頻器的作用是將由石英晶體產(chǎn)生的高頻信號(hào)分頻成基時(shí)鐘脈沖信號(hào)和擴(kuò)展部分所需的頻率。在此電路中,分頻器的功能主要有兩個(gè):一是產(chǎn)生標(biāo)準(zhǔn)脈沖信號(hào);二是功能擴(kuò)展電路所需的信號(hào),如仿電臺(tái)用的1KHz的高頻信號(hào)和500Hz的低頻信號(hào)等。可以組成二分頻電路和四分頻電路和十六分頻器。
打包后成元器件如圖3-12所示;
鬧時(shí)器
數(shù)字鐘在指定的時(shí)刻發(fā)出信號(hào),或驅(qū)動(dòng)音響電路“鬧時(shí)”;或?qū)δ逞b置的電源進(jìn)行接通或斷開“控制”。不管是鬧時(shí)還是控制,都要求時(shí)間準(zhǔn)確,即信號(hào)的開始時(shí)刻與持續(xù)時(shí)間必須滿足規(guī)定的要求。在這里將舉例來說明它的工作原理。要求上午7時(shí)59分發(fā)出鬧時(shí)信號(hào),持續(xù)1分鐘。設(shè)計(jì)如下:
在電路圖中用到了4輸入二與非門74LS20,集電極開路的2輸入四與非門74LS03,因OC門的輸出端可以進(jìn)行“線與”,使用時(shí)在它們的輸出端與電源+5V端之間應(yīng)接一電阻RL。RL的值由下式?jīng)Q定:
鬧時(shí)器程序代碼;
module nsdl(out,m1,m2,h1,h2,tenh,oneh,tenm,onem,clk1k,cin);
output out;
input[3:0] m1,m2,h1,h2,tenh,tenm,oneh,onem; input cin, clk1k;
reg out;
always @(m1 or m2 or h1 or h2 or tenh or tenm or oneh or onem or cin) begin
if(cin) out《=0; else if(cin==0) begin
if(tenh==h1&&oneh==h2&&tenm==m1&&onem==m2) out《=clk1k; else out《=0; end end
endmodule
打包后成元器件如圖3-13所示;
報(bào)時(shí)器
(一)功能要求
報(bào)時(shí)的功能要求是:每當(dāng)數(shù)字鐘計(jì)時(shí)快要到正點(diǎn)時(shí),通常按照4低音1高音的順序發(fā)出間斷聲響,以最后一聲高音結(jié)束的時(shí)刻為正點(diǎn)時(shí)刻。
? ? ? (二)該電路的工作原理
電路圖的工作原理舉例來說明;例如設(shè)4聲低音(約500Hz)分別 在59分51秒、53秒、55秒及57秒,最后一聲高音(約1000Hz)發(fā)生在59秒,它們的持續(xù)時(shí)間為1秒。只有當(dāng)分十進(jìn)位的Q2M2Q0M2=11,分個(gè)位的Q3M1Q0M1=11,秒十位的Q2S2Q0S2=11及秒個(gè)位的Q0S1=1時(shí),音響電路才能工作。
(三)對(duì)該電路中使用的元件的介紹
因?yàn)樵谠撾娐分兴玫脑饕?4LS00、74LS04及74LS20這些元件在前面的
電路中已經(jīng)介紹。這里就不再介紹它了
報(bào)時(shí)器程序代碼;
module baoshi(tenm,onem,tens,ones,q500,q1k,a,b); input a,b;
input [3:0]tenm,onem,tens,ones; output q500,q1k; reg q500,q1k;
always @(tenm or onem or tens or ones) begin
if ({tenm,onem}==8‘h59&&{tens,ones}==8’h50||{tenm,onem}==8‘h59&&{tens,ones}==8’h52|| {tenm,onem}==8‘h59&&{tens,ones}==8’h54||{tenm,onem}==8‘h59&&{tens,ones}==8’h56|| {tenm,onem}==8‘h59&&{tens,ones}==8’h58) q500《=a; else q500《=0; end
always @(tenm or onem or tens or ones) begin
if ((tenm[3:0]==0000&&onem[3:0]==0000)&&(tens[3:0]==0000&&ones[3:0]==0000)) q1k《=b; else q1k《=0; end
endmodule
打包后成元器件如圖3-14所示;
數(shù)字鐘原理圖
將各模塊組合一起構(gòu)成如圖3-15所示:
軟件調(diào)試的過程據(jù)功能的增加分為幾步:
首先,根據(jù)原來的100進(jìn)制顯示程序的基礎(chǔ)上編寫成時(shí)分秒六位顯示的主程序。該程序?qū)r(shí)分秒分成個(gè)位和十位分別計(jì)算,所以將60進(jìn)制和24進(jìn)制變成10進(jìn)制、6進(jìn)制和2進(jìn)制。又因?yàn)槿绻麜r(shí)十位為2的話,不能大于3,所以在分十位向時(shí)個(gè)位進(jìn)位時(shí)得判斷時(shí)十位是否為2,在組員的幫助下經(jīng)過不斷試驗(yàn)和修改終于完成。過程比較順利。
該電子鐘使用一個(gè)鍵來調(diào)時(shí),利用長按來選擇所要調(diào)的位,用短暫按下來對(duì)位進(jìn)行加1,前提是時(shí)鐘暫停,這個(gè)功能也是通過長按來實(shí)現(xiàn)的。選位是從秒個(gè)位到時(shí)十位依次選取,但到時(shí)十位以后就回不到秒個(gè)位了,就是不會(huì)循環(huán)。所以就得對(duì)選的位進(jìn)行檢查,如果到了時(shí)十位再按取位鍵就重新賦給秒個(gè)位地址。這樣就可以循環(huán)選位了。但在后來的測(cè)試中又有了新的問題,如果該位到了9,對(duì)一個(gè)位進(jìn)行加1調(diào)整就會(huì)顯示亂碼。時(shí)分秒的十位都會(huì)調(diào)到9!
對(duì)于這個(gè)問題費(fèi)看一些周折。起先構(gòu)思再加一個(gè)減一的鍵,但不但沒有解決這個(gè)亂碼問題而且減到了0一下很可能也會(huì)出現(xiàn)亂碼。所以就轉(zhuǎn)而尋求程序解決。調(diào)時(shí)的時(shí)候讓它也像正常運(yùn)行的時(shí)候進(jìn)位?沒見過這樣的。繼而決定在進(jìn)行加1調(diào)時(shí)的時(shí)候檢測(cè)該位是否到10或6或3。所以就產(chǎn)生了所謂的調(diào)時(shí)比較子程序,就是在調(diào)時(shí)的時(shí)候?qū)⒃撐桓?0或6或3比較。最后,調(diào)試的時(shí)候卻總是出現(xiàn)這樣的情況:所調(diào)的位超過了9或5或2就變成亂碼。比原來進(jìn)步的地方就是時(shí)分秒的十位不用超過9就變成亂碼。這說明雖然還沒成功,但還是有前展的。就繼續(xù)調(diào)試。
評(píng)論