數位電子術科數位教材

Download Report

Transcript 數位電子術科數位教材

新數位電子術科秘笈
(使用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石英振
盪器
USB轉JTAG
燒錄頭
注意: 腳座缺口的方向務
必裝置正確,否則將無
法燒錄電路程式碼
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圖繪製
-- 應於30分鐘內用透明方格紙完成元件面的元件佈置圖與焊接面的裸銅線配線圖
 子電路板裝配
-- 應於30分鐘內完成子電路板的製作
 母電路板實作與母子電路板連接
-- 應於60分鐘內完成母電路板實作,並與子電路板完成連接
 CPLD內部電路設計
-- 依照命題委員所公佈的CPLD內部電路方塊圖來設計電路,不必新增任何電路模
組來進行訊號處理
 應檢時間掌控
-- 應該在3小時內完成母電路板Layout圖繪製、母子電路板實作以及CPLD內部電路
設計,再加上一些故障排除及測試時間,建議考生應於4小時內完成第一題四位數
多工顯示器的實作與測試
母電路板Layout圖繪製建議方式(1/5)
(1)方格紙的特性
先將 方格紙從中 間對折 ,
方格紙
第1面
觀察幼圖可知,方格紙共有4
個面相,第1面、第2面、第3
面與第4面,其中第4面為第3
方格紙
第3面,
而背面為
第4面
面的背面。
快速 元件佈置與 佈線的秘
訣,在於佈線時,不論元件
面或銅箔面的圖形繪製,皆
以元件面的方向進行。
方格紙
第2面
母電路板Layout圖繪製建議方式(2/5)
 利用母板銅鉑面繪製母板實體圖並標示子板元件面腳位圖
母電路板Layout圖繪製建議方式(3/5)
 四位數多工顯示器使用到的金手指
接腳共有11支,建議的規劃方式如
下:
(1)金手指規劃線必須繪製於方格紙四
個面相中的第3面,且一律以元件面
方向繪製。
(2)先將分別作為電源與接地的金手指
P1及P22拉至兩側長條銅箔。
(3)將P2、P3、P4和P6規劃在子板右側,
並與子板間預留數格的接線空間。
(4)將P8、P10、P12、P14與P16 規劃在
子板兩排CPLD I/O接腳的中間,並
與兩排CPLD I/O保持數格距離。
母電路板Layout圖繪製建議方式(4/5)
 金手指與CPLD I/O快速連接,建議的
連接方式如下:
(1)金手指與CPLD I/O的連接線應繪製於
方格紙第3面,且一律以元件面方向
繪製。
(2)直接將金手指往上拉至CPLD之I/O腳
位,建議由最下方的CPLD I/O開始依
序往上與金手指連接。
母電路板Layout圖繪製建議方式(5/5)
 電源、接地處理與電子元件佈置佈線,
建議的連接方式如下:
(1)連 接 母 板 與 子 板 的 接 地 端 : 將 子 板
CPLD I/O雙排腳位左下角的GND端直
接往左拉至母板接地端之長條銅箔,
便可使母板與子板之接地端等電位(此
條連線應繪製於方格紙第3面)。
(2)電源與電子元件佈置佈線: C10、C11、
R10和U10的元件佈置與佈線結果,如
右圖所示,元件外觀圖(包含跳線)必須
繪製於方格式的第一面,而元件與元
件間的連線應繪製於第3面,所有圖形
繪製皆以元件面的方向進行。
母電路板Layout完成圖
四位數多工顯示器之子電路板功能與CPLD腳位對應圖
金手指編號/對應之訊號名稱及意義
(參閱試題第9頁『(四)檢定電子電路圖』)
P2 / CK1計數時脈訊號源
P3 / CLR不同步清除輸入端
P4 / CK2掃描時脈訊號源
P6 / A計數輸出端(LSB)
P8 / B計數輸出端
P10 / C計數輸出端
P12 / D計數輸出端(MSB)
P14七段顯示器選擇訊號輸出端(LSB)
P16七段顯示器選擇訊號輸出端(MSB)
與金手指連接之CPLD I/O腳位編號
四位數多工顯示器電路程式碼
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)
begin
if (clr==1'b1)
dig0<=4'b0000;
else
if (dig0>=9)
dig0<=4'b0000;
else
dig0<=dig0+1;
end
always @(negedge dig0[3] or posedge clr)
begin
if (clr==1'b1)
dig1<=4'b0000;
else
if (dig1>=9)
dig1<=4'b0000;
else
dig1<=dig1+1;
end
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)
begin
if (clr==1'b1)
dig3<=4'b0000;
else
if (dig3>=9)
dig3<=4'b0000;
else
dig3<=dig3+1;
end
always @(cnt or dig0 or dig1 or dig2 or dig3)
begin
case (cnt[3:2])
2'b00 : dcba = dig3;
2'b01 : dcba = dig2;
2'b10 : dcba = dig1;
default : dcba = dig0;
endcase
end
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)
begin
if (clr==1'b1)
dig1<=4'b0000;
else
if (dig1>=9)
dig1<=4'b0000;
else
dig1<=dig1+1;
end
運用檢定電子電路圖有助程式之理解及記憶
運用繪圖法搭配小程式可以進行元件模組化的電路設計
試 題 二(鍵盤掃瞄裝置)
一、 檢定時間:六小時
二、 試題說明
鍵盤掃描裝置試題動作要求
(一) 電源開關(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端。
**將P22母板電源輸入端直接拉至左方長條
洞箔。
母電路板Layout圖繪製建議方式
步驟(2):金手指與CPLD I/O快速連接
母電路板Layout圖繪製建議方式
步驟(3):電源、接地處理與電子元件佈置
佈線
母電路板Layout完成圖
步驟(3):母板元件面與焊接面
鍵盤掃描裝置之子電路板功能與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
鍵盤掃描裝置電路程式碼
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)
begin
if (keyin==1'b0)
Lb2<=Lb2+1;
end
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)
begin
if (p21==1'b1)
bcdo <= enco;
end
always @(Lb2)
begin
case(Lb2)
2'b00 : h = 4'b0111;
2'b01 : h = 4'b1011;
2'b10 : h = 4'b1101;
default : h = 4'b1110;
endcase
end
always @(posedge scan)
begin
sq<= keyin;
sqd<=sq;
p20<=pulse;
end
assign pulse = sq & (~sqd);
assign p6 = pulse;
assign p1 = ~(p13 |p14);
endmodule
鍵盤掃描裝重要時序脈波
運用檢定電子電路圖有助程式之理解及記憶
運用繪圖法搭配小程式可以進行元件模組化的電路設計
試 題 三(數位電子鐘)
一、 檢定時間:六小時
二、 試題說明
數位電子鐘之試題動作要求
(一) 開關設定說明
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頁『(四)檢定電子電路圖』)
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)
與金手指連接之CPLD I/O腳位編號
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
assign
assign
assign
assign
assign
assign
assign
a1 = p19;
b1 = p21 & p22;
a2 = p7;
b2 = p5 & p22;
a3 = p22;
b3 = 1'b0;
a4 = p7;
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
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;
end else
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;
always@(p20 or a1 or b1c or a2 or b2c or a3 or b3 or a4 or b4)
output [1:0] hra;
begin
output [3:0] hrb;
if (p20==1'b0) begin
reg [1:0] hra;
y1=a1;y2=a2;y3=a3;y4=a4;
reg [3:0] hrb;
end else begin
reg b1c,b2c,y1,y1c,y2,y3,y4;
y1=b1c;y2=b2c;y3=b3;y4=b4;
wire fs,a1,b1,a2,b2,a3,b3,a4,b4;
end
reg [15:0] cnt;
End
assign a1 = p19;
assign b1 = p21 & p22;
assign p8 = y2;
assign a2 = p7;
assign p4 = y3;
assign b2 = p5 & p22;
assign p6 = y4;
assign a3 = p22;
assign b3 = 1'b0;
always @(negedge y1 or posedge clr)
assign a4 = p7;
begin
assign b4 = 1'b1;
if (clr==1'b1) begin
hra<=2'b00; hrb<=4'b0000;
assign fs=cnt[15];
end else
always@(negedge xtal)
if ((hra==2) && (hrb==3)) begin
begin
hra<=2'b00;hrb<=4'b0000;
cnt<=cnt+1;
end else if (hrb>=9) begin
End
hra<=hra+1;hrb<=4'b0000;
end else
always@(negedge fs)
hrb<=hrb+1;
begin
end
b1c<=b1;b2c<=b2;
endmodule
end