(使用VHDL/Verilog-HDL) 新數位電子術科秘笈 (使用VHDL/Verilog-HDL) 作者: 賈證主、王炳聰 參考資料: 全華圖書 數位電子乙級術科秘笈
VHDL/Verilog-HDL入門(1/15)
VHDL/Verilog-HDL入門(2/15)
VHDL/Verilog-HDL入門(3/15)
VHDL/Verilog-HDL入門(4/15)
VHDL/Verilog-HDL入門(5/15)
VHDL/Verilog-HDL入門(6/15)
VHDL/Verilog-HDL入門(7/15)
VHDL/Verilog-HDL入門(8/15)
VHDL/Verilog-HDL入門(9/15)
VHDL/Verilog-HDL入門(10/15)
VHDL/Verilog-HDL入門(11/15)
VHDL/Verilog-HDL入門(12/15)
VHDL/Verilog-HDL入門(13/15)
VHDL/Verilog-HDL入門(14/15)
VHDL/Verilog-HDL入門(15/15)
子電路板製作之注意事項 連接至電腦印表機埠 使用右側USB轉JTAG接頭燒錄CPLD時,此顆IC需拔除 供EPM3064ALC44-4工作 之3.3V直流電源 注意: 腳座缺口的方向務必裝置正確,否則將無法燒錄電路程式碼 供第二題鍵盤掃描使用之4MHz石英振盪器 子電路板製作之注意事項
Quartus II燒錄器設定 在考場應試時則需注意考場所設定的燒錄介面為USB埠或印表機埠,若尚未設定,考生必須依照下述方式自行設定。 (1) USB-Blaster安裝:目前許多電腦已經沒有印表機埠,於平常練習時,可自備一組USB Blaster燒錄頭,如下圖將USB Blaster燒錄頭之USB埠插入電腦,電腦應該會偵測到USB Blaster,並要求使用者指定安裝驅動程式的位址,此時使用者必須將驅動程式的安裝路徑設定於 C:/quartus/drivers/usb-blaster,便可完成驅動程式安裝。 註:在單獨燒錄子板上之CPLD晶片時,必須在子板電源輸入端接上3.3V之直流電源。若已經完成子母板之裝配連接,並將它插入測試機台之金手指腳座進行晶片燒錄時,子板就不需要接上直流電源,此時電源由測試機台直接提供。
(2) USB PORT燒錄介面設定: 點選「Tools => Programmer」選項,出現右下圖,若尚未選取燒錄介面,圖中會標示No Hardware。用滑鼠點選Hardware setup後,再用滑鼠點選視窗中之USB-Blaster,並點選右下圖右側之Select Hardware 與Close後,就完成USB燒錄介面設定。
(3) PRINT PORT燒錄介面設定: 直接使用印表機介面來進行燒錄,須如上圖點選「Add Hardware」來產生下圖之Add Hardware表單,在Hardware type及Port的欄位分別選擇ByteBlasterMV及LPT1後,再按下OK就完成印表機埠燒錄介面設定。
(4) 燒錄CPLD晶片 檢定所使用的CPLD晶片是屬於非揮發性的CPLD元件,當開啟Quartus II Programmer後,將編譯成功的專案會自動在Programmer視窗中產生一個『*.pof』檔。進行晶片燒錄前,先在下圖中的Mode欄位選取JTAG,並勾選下方的『Program/configure』,接著按下左側之start鍵,便可進行晶片燒錄。
試 題 一(四 位數多工顯示器) 一、檢定時間:六小時 二、 試題說明
四位數多工顯示器試題動作要求 (一) 電源開關(SW1)ON,則AC 110V 電源指示燈(NL1)及DC 電源指示燈(NL2)應亮。 (二) 凡未具有下列之全部功能要求者不予評分。調整VR1 可變電阻,改變CK1 振盪頻率輸出可使顯示計數速度增快或變慢,亦即: 1. 調整VR1 可變電阻器,讓個位數可清楚看出從0~9 順序計數,且七段顯示器能正常顯示。 2. 調整VR1 可變電阻器,讓十位數可清楚看出從0~9 順序計數,且七段顯示器能正常顯示。 3. 調整VR1 可變電阻器,讓百位數可清楚看出從0~9 順序計數,且七段顯示器能正常顯示。 4. 調整VR1 可變電阻器,讓千位數可清楚看出從0~9 順序計數,且七段顯示器能正常顯示。 (三) 調整VR2 可變電阻器,改變CK2 振盪頻率輸出可使多工掃瞄速度改變。 1. 順時針旋轉掃瞄速度變快,逆時針旋轉掃瞄速度變慢。 2. 當VR2 調整至適當值時,使顯示數字穩定不閃爍。 (四) 按下清除鍵(S1)時,則4 位數字均重置為「0000」,放開(S1)鍵後,計數重新由「0000」開始上數。
四位數多工顯示器測試機台電路簡圖
四位數多工顯示器檢定電子電路圖
四位數多工顯示器之方塊圖
四位數多工顯示器應試要點 母電路板Layout圖繪製 子電路板裝配 母電路板實作與母子電路板連接 CPLD內部電路設計 應檢時間掌控 -- 應於30分鐘內用透明方格紙完成元件面的元件佈置圖與焊接面的裸銅線配線圖 子電路板裝配 -- 應於30分鐘內完成子電路板的製作 母電路板實作與母子電路板連接 -- 應於60分鐘內完成母電路板實作,並與子電路板完成連接 CPLD內部電路設計 -- 依照命題委員所公佈的CPLD內部電路方塊圖來設計電路,不必新增任何電路模組來進行訊號處理 應檢時間掌控 -- 應該在3小時內完成母電路板Layout圖繪製、母子電路板實作以及CPLD內部電路設計,再加上一些故障排除及測試時間,建議考生應於4小時內完成第一題四位數多工顯示器的實作與測試
母電路板Layout圖繪製建議方式(1/5) 方格紙 第1面 第2面 第3面,而背面為第4面 (1)方格紙的特性 先將方格紙從中間對折, 觀察幼圖可知,方格紙共有4 個面相,第1面、第2面、第3 面與第4面,其中第4面為第3 面的背面。 快速元件佈置與佈線的秘訣,在於佈線時,不論元件面或銅箔面的圖形繪製,皆以元件面的方向進行。
母電路板Layout圖繪製建議方式(2/5) 利用母板銅鉑面繪製母板實體圖並標示子板元件面腳位圖
母電路板Layout圖繪製建議方式(3/5) 四位數多工顯示器使用到的金手指接腳共有11支,建議的規劃方式如下: 金手指規劃線必須繪製於方格紙四個面相中的第3面,且一律以元件面方向繪製。 先將分別作為電源與接地的金手指P1及P22拉至兩側長條銅箔。 將P2、P3、P4和P6規劃在子板右側,並與子板間預留數格的接線空間。 將P8、P10、P12、P14與P16 規劃在子板兩排CPLD I/O接腳的中間,並與兩排CPLD I/O保持數格距離。
母電路板Layout圖繪製建議方式(4/5) 金手指與CPLD I/O快速連接,建議的連接方式如下: 金手指與CPLD I/O的連接線應繪製於方格紙第3面,且一律以元件面方向繪製。 直接將金手指往上拉至CPLD之I/O腳位,建議由最下方的CPLD I/O開始依序往上與金手指連接。
母電路板Layout圖繪製建議方式(5/5) 電源、接地處理與電子元件佈置佈線,建議的連接方式如下: 連接母板與子板的接地端:將子板CPLD I/O雙排腳位左下角的GND端直接往左拉至母板接地端之長條銅箔,便可使母板與子板之接地端等電位(此條連線應繪製於方格紙第3面)。 電源與電子元件佈置佈線: C10、C11、R10和U10的元件佈置與佈線結果,如右圖所示,元件外觀圖(包含跳線)必須繪製於方格式的第一面,而元件與元件間的連線應繪製於第3面,所有圖形繪製皆以元件面的方向進行。
母電路板Layout完成圖
(參閱試題第9頁『(四)檢定電子電路圖』) 四位數多工顯示器之子電路板功能與CPLD腳位對應圖 金手指編號/對應之訊號名稱及意義 (參閱試題第9頁『(四)檢定電子電路圖』) 與金手指連接之CPLD I/O腳位編號 P2 / CK1計數時脈訊號源 P3 / CLR不同步清除輸入端 P4 / CK2掃描時脈訊號源 P6 / A計數輸出端(LSB) P8 / B計數輸出端 P10 / C計數輸出端 P12 / D計數輸出端(MSB) P14七段顯示器選擇訊號輸出端(LSB) P16七段顯示器選擇訊號輸出端(MSB)
四位數多工顯示器電路程式碼 module mux_scan4(clr,ck1,ck2,dcba,sel); input clr,ck1,ck2; output [3:0] dcba; output [1:0] sel; reg[3:0] dcba; reg[3:0] dig0,dig1,dig2,dig3; reg[3:0] cnt; assign sel = cnt[3:2]; always @(negedge ck2) begin cnt<=cnt+1; end always @(negedge ck1 or posedge clr) if (clr==1'b1) dig0<=4'b0000; else if (dig0>=9) dig0<=4'b0000; else dig0<=dig0+1; always @(negedge dig0[3] or posedge clr) if (clr==1'b1) dig1<=4'b0000; if (dig1>=9) dig1<=4'b0000; dig1<=dig1+1; always @(negedge dig1[3] or posedge clr) begin if (clr==1'b1) dig2<=4'b0000; else if (dig2>=9) dig2<=4'b0000; else dig2<=dig2+1; end always @(negedge dig2[3] or posedge clr) dig3<=4'b0000; if (dig3>=9) dig3<=4'b0000; dig3<=dig3+1; always @(cnt or dig0 or dig1 or dig2 or dig3) case (cnt[3:2]) 2'b00 : dcba = dig3; 2'b01 : dcba = dig2; 2'b10 : dcba = dig1; default : dcba = dig0; endcase endmodule
電路程式碼使用Maxplus編譯之修正方式 ….. wire xx; always @(negedge ck1 or posedge clr) begin if (clr==1'b1) dig0<=4'b0000; else if (dig0>=9) dig0<=4'b0000; else dig0<=dig0+1; end assign xx = dig0[3]; always @(negedge xx or posedge clr) dig1<=4'b0000; if (dig1>=9) dig1<=4'b0000; dig1<=dig1+1;
運用檢定電子電路圖有助程式之理解及記憶
運用繪圖法搭配小程式可以進行元件模組化的電路設計
試 題 二(鍵盤掃瞄裝置) 一、 檢定時間:六小時 二、 試題說明
鍵盤掃描裝置試題動作要求 (一) 電源開關(SW1)ON,AC 電源指示燈(NL1)及DC 電源指示燈(NL2)應亮。 1. 開始/停止鍵(S1)為OFF 時,計數顯示器應顯示「00」。 2. 將函數信號產生器設定頻率1~5Hz,輸出電壓準位為0~12v 之正脈波,輸入於「CLOCK IN」端,作為電路動作所需之時序信號。(注意:不得由測試機台信號直接輸入)。 (二) 凡未具有下列之全部功能要求者不予評分。 1. 可由鍵盤輸入0~9 數目 (1) 每次鍵入之數目都能立即顯示於個位數,若再鍵入新數目時,原先之個位數則左移至十位數。 (2) 輸入過程中,可利用清除鍵(S2)隨時清除,顯示器顯示「00」。 2. 由步驟1.將數值設定為99 後,按鍵盤START/STOP 鍵(S1)為ON,則應開始倒數計數。 (1) 個位數可從顯示器上清楚看出由9~0 順序顯示。 (2) 十位數可從顯示器上清楚看出由9~0 順序顯示。 (三) 步驟(二)-2.倒數計數到顯示為「00」時 1. 倒數計數停止。 2. 計數歸零指示燈NL3 亮。 (四) 倒數計數過程中可隨時控制*(START/STOP)鍵(S1),使計數暫停或繼續倒數計。
鍵盤掃瞄裝置測試機台電路簡圖
鍵盤掃瞄裝置檢定電子電路圖
母電路板Layout圖繪製建議方式 步驟(1):快速金手指腳位規劃 **由於P17是母板接地端,可直接將其拉至子板GND端。
母電路板Layout圖繪製建議方式 步驟(2):金手指與CPLD I/O快速連接
母電路板Layout圖繪製建議方式 步驟(3):電源、接地處理與電子元件佈置佈線
母電路板Layout完成圖 步驟(3):母板元件面與焊接面
金手指編號/功能 (參閱試題第24頁『(四)檢定電子電路圖』) 鍵盤掃描裝置之子電路板功能與CPLD腳位對應圖 金手指編號/功能 (參閱試題第24頁『(四)檢定電子電路圖』) 與金手指連接之CPLD I/O腳位編號 P21/鍵值暫存電路載入致能端(來自P6) P10/鍵盤第三行按鍵偵測端(接提昇電路) P4/鍵盤第二行按鍵偵測端(接提昇電路) P2/鍵盤第一行按鍵偵測端(接提昇電路) P13/個位數歸零偵測端 P14/十位數歸零偵測端 P7/鍵值輸出端(MSB) P3/鍵值輸出端 P5/鍵值輸出端 P9/鍵值輸出端(LSB) P15/鍵盤第四列(3,7)掃描訊號 P19/鍵盤第三列(2,6)掃描訊號 P16/鍵盤第二列(1,5,9)掃描訊號 P18/鍵盤第一列(0,4,8)掃描訊號 P6/鍵值暫存電路與十位數計數器資料載入訊號 P20/個位數計數器資料載入訊號 P1/歸零指示燈控制訊號 xtal PIN_43
鍵盤掃描裝置電路程式碼 always @(v or Lb2) begin case(v) 3'b011 : enco = {2'b00,Lb2}; 3'b101 : enco = {2'b01,Lb2}; 3'b110 : enco = {2'b10,Lb2}; default : enco = {2'b00,Lb2}; endcase End always @(negedge scan) if (p21==1'b1) bcdo <= enco; end always @(Lb2) case(Lb2) 2'b00 : h = 4'b0111; 2'b01 : h = 4'b1011; 2'b10 : h = 4'b1101; default : h = 4'b1110; endcase always @(posedge scan) sq<= keyin; sqd<=sq; p20<=pulse; assign pulse = sq & (~sqd); assign p6 = pulse; assign p1 = ~(p13 |p14); endmodule 鍵盤掃描裝置電路程式碼 module kb_scan(xtal,v,p13,p14,p21,h,bcdo,p6,p20,p1); input xtal; input [0:2] v; input p13,p14,p21; output [0:3] h; output [3:0] bcdo; output p6,p20,p1; reg [15:0] cnt; reg [1:0] Lb2; reg [3:0] enco,bcdo; reg [0:3] h; reg sq,sqd,p20; wire keyin,scan,pulse; assign scan = cnt[15]; always @(posedge xtal) begin cnt<=cnt+1; end assign keyin = ~ (v[0] & v[1] & v[2]); always @(posedge scan) if (keyin==1'b0) Lb2<=Lb2+1;
鍵盤掃描裝重要時序脈波
運用檢定電子電路圖有助程式之理解及記憶
運用繪圖法搭配小程式可以進行元件模組化的電路設計
試 題 三(數位電子鐘) 一、 檢定時間:六小時 二、 試題說明
數位電子鐘之試題動作要求 (一) 開關設定說明 1. 設定S1 開關為ON 模式。 S2 開關OFF 狀態。 S3 開關OFF 狀態。 2. 需源開關(SW1)ON,則AC 110V 電源指示燈、及DC 電源指示燈亮。 (二) 凡未具有下列之全部功能要求者不予評分。 1. 應檢人應自行調整設定函數信號產生器之輸出為1Hz TTL 準位的方波,加至面板上的「1Hz 輸入端」(注意:不得由測試機台信號直接輸入)。 2. 進入時、分之調整模式。 (1) 當按下S2 開關時(S2 ON)可進行「時」之調整,顯示由00 至23。 (2) 當按下S3 開關時(S3 ON)可進行「分」之調整,顯示由00 至59。 (三) 開關設定功能說明 1. 當S1 開關OFF 時為正常計時模式,二組數字中間的「:」會以秒的速率閃爍。 2. 當S1 開關ON 時為停止計時。 (四) 調整函數信號產生器之頻率,可快速檢驗電子鐘「分」與「時」的進位動作,並可正常計數。
數位電子鐘測試機台簡圖
數位電子鐘檢定電子電路圖
數位電子鐘控制訊號說明正常計時
數位電子鐘控制訊號說明調時狀態
母電路板Layout圖繪製建議方式 步驟(1):快速金手指腳位規劃
母電路板Layout圖繪製建議方式 步驟(1):金手指腳位與CPLD IO連接 (不再使用RC濾波)
母電路板Layout完成圖 步驟(1):金手指腳位與CPLD IO連接 (不再使用RC濾波)
鍵盤掃描裝置之子電路板功能與CPLD腳位對應圖 金手指編號 / 功能 (參閱試題第24頁『(四)檢定電子電路圖』) 與金手指連接之CPLD I/O腳位編號 P19/ 模60分計數器進位輸出訊號 P21 / 調時開關 P5 / 調分開關 P22 / 1Hz訊號輸入端 P1 / 接地端 P7 / 模60秒計數器進位輸出訊號 P2 / 5V電源端 P20 / 計時或調時控制開關 P11 / 小時之十位數二進位值(MSB) P12 / 小時之十位數二進位值(LSB) P14 / 小時之個位數二進位值(MSB) P15 / 小時之個位數二進位值 P16 / 小時之個位數二進位值 P17 / 小時之個位數二進位值(LSB) P8 / 模60分計數器計數時脈輸入端 P4 / 秒鐘閃爍控制訊號 P6 / 模60秒計數器清除訊號 二極體(D10)陰極 / 電源開啟重置端(clr)
鍵盤掃描裝置電路程式碼 (看圖說故事) module elec_ck(clr,p20,p21,p19,p5,p7,p22,p6,p8,p4,hra,hrb); input clr,p20,p21,p19,p5,p7,p22; output p6,p8,p4; output [1:0] hra; output [3:0] hrb; reg [1:0] hra; reg [3:0] hrb; reg y1,y2,y3,y4; wire a1,b1,a2,b2,a3,b3,a4,b4; assign a1 = p19; assign b1 = p21 & p22; assign a2 = p7; assign b2 = p5 & p22; assign a3 = p22; assign b3 = 1'b0; assign a4 = p7; assign b4 = 1'b1; always@(p20 or a1 or b1 or a2 or b2 or a3 or b3 or a4 or b4) begin if (p20==1'b0) begin y1=a1;y2=a2;y3=a3;y4=a4; end else begin y1=b1;y2=b2;y3=b3;y4=b4; end assign p8 = y2; assign p4 = y3; assign p6 = y4; always @(negedge y1 or posedge clr) begin if (clr==1'b1) begin hra<=2'b00; hrb<=4'b0000; end else if ((hra==2) && (hrb==3)) begin hra<=2'b0;hrb<=4'b0; end else if (hrb>=9) begin hra<=hra+1;hrb<=4'b0; hrb<=hrb+1; end endmodule
運用檢定電子電路圖有助程式之理解及記憶
非直接使用TTL輸出端時需修正之程式碼 *程式碼下載網址: http://www.chwa.com.tw/newciv/bookinfo.asp?b_no=06177007 網頁最下方有5kb的補充資料 *修正之程式碼說明: 1、先取得一個 4M/2(16)(約15Hz)取樣訊號,可消除影響正常計數之不穩定雜訊。 程式碼如下: assign fs=cnt[15]; always@(negedge xtal) begin cnt<=cnt+1; end
非直接使用TTL輸出端時需修正之程式碼 *程式碼下載網址: http://www.chwa.com.tw/newciv/bookinfo.asp?b_no=06177007 *修正之程式碼說明: 2、針對兩個Gate clock的訊號進行雜訊 消除及準位調整。 always@(negedge fs) begin b1c<=b1;b2c<=b2; end
非直接使用TTL輸出端之完成程式碼 module elec_ck(clr,p20,p21,p19,p5,p7,p22,p6,p8,p4,hra,hrb,xtal); input clr,p20,p21,p19,p5,p7,p22,xtal; output p6,p8,p4; output [1:0] hra; output [3:0] hrb; reg [1:0] hra; reg [3:0] hrb; reg b1c,b2c,y1,y1c,y2,y3,y4; wire fs,a1,b1,a2,b2,a3,b3,a4,b4; reg [15:0] cnt; assign a1 = p19; assign b1 = p21 & p22; assign a2 = p7; assign b2 = p5 & p22; assign a3 = p22; assign b3 = 1'b0; assign a4 = p7; assign b4 = 1'b1; assign fs=cnt[15]; always@(negedge xtal) begin cnt<=cnt+1; End always@(negedge fs) b1c<=b1;b2c<=b2; end always@(p20 or a1 or b1c or a2 or b2c or a3 or b3 or a4 or b4) begin if (p20==1'b0) begin y1=a1;y2=a2;y3=a3;y4=a4; end else begin y1=b1c;y2=b2c;y3=b3;y4=b4; end End assign p8 = y2; assign p4 = y3; assign p6 = y4; always @(negedge y1 or posedge clr) if (clr==1'b1) begin hra<=2'b00; hrb<=4'b0000; end else if ((hra==2) && (hrb==3)) begin hra<=2'b00;hrb<=4'b0000; end else if (hrb>=9) begin hra<=hra+1;hrb<=4'b0000; hrb<=hrb+1; endmodule