顯示具有 邏輯設計 標籤的文章。 顯示所有文章
顯示具有 邏輯設計 標籤的文章。 顯示所有文章

2021年1月31日 星期日

露天購買零件模組一批 (MCP3008 等)

因為樹莓派測試學習以及二哥數位邏輯實驗需要, 向露天賣家 f0266703 購買零組件一批, 趁 1 月份免運券今日到期前下標 : 
  1. SYB-500 組合麵包板 (4塊組合套裝) 萬能板/實驗板 [316409]W8-200115 (21904711261015) $189X1=189
  2. [庫存20200203]MCP3008-I/P[406317] $116X2=232
  3. USB電流電壓測試儀USB電壓電流錶 USB電流電壓測試儀雙表顯示 W1 [119624] $122X1=122
  4. 麵包板線 連接線 麵包板 專用線 麵包板跳線 140條盒裝SUNLEPHANT W177 $45X1=45
  5. LM324 LM324N 直插 DIP-14 四路運算放大器 [334775]W81-200707 $3X7=21
  6. 量多更便宜-相容3/2代 B型 B+ raspberry pi GPIO 40P 排線 DIY [316857]w3 $21X2=42
  7. 匯承HC-12 SI4463無線單片機串口模組 433遠距離1000M替代藍牙 [313440]W8-200115 $151X2=302
  8. TW 74LS85 相容SN74LS85N/HD74LS85P 邏輯-比較器 [339351]W81-200115 $13X2=26
  9. 半導體鐳射管/束 紅色點狀 6MM外徑 紅外線 鐳射頭3V W2 [137472] $5X4=20
  10. SN74LS83N DIP封裝 相容HD74LS83P 計數/除法器 [339326]W81-200115 (21918308711292) $21X2=42
  11. 直插 74LS73 SN74LS73N HD74LS73P DIP-14 邏輯-觸發器 [336355]W81-2001 $9X2=18
  12. 現貨 DIY測試線 鱷魚夾線 包皮的鱷魚夾 雙頭測試線 鱷魚夾線 1條 [89107-032]  $5X6=30
  13. SN74LS93N HD74LS93P 直插 DIP14 計數器4位5二進位器 [339818]W81-200115 $13X6=78
  14. MPU-6050模組 三軸加速度 陀螺儀6DOF模組 GY-521 [361000]W313-20200210 $33X3=99
  15. 直插 74LS75 D 型透明鎖存器 DIP-16 W2-1 [293258]W2-200813 (21901450649135) $28X2=56
  16. GY-68 BMP180 新款 BOSCH溫度 氣壓感測器模組 代替BMP085 W1035 [367082]  $21X4=84
  17. 雙軸按鍵搖杆 PS2遊戲搖杆控制杆感測器 電子積木 [313457]W8-200115 $14X8=112
  18. GY-BMP280-3.3 高精度大氣壓強感測器模組 高度計感測器 W1035 [367448] $17X4=68
  19. BUY360-不銹鋼助焊劑 電池極片 焊接電池 焊接鎳片 液體助焊劑液體松香 [320715] $89X1=89
  20. ATF16V8B-15PC DIP20封裝 可程式設計邏輯器 ATF16V8B-15PC [340215]W81-200 $15X12=180
  21. SN74LS147N 10線-4線和8線-3線優先編碼器 直插 DIP-14 [339247]W81-200115 $21X6=126
  22. GY-68 BMP180 新款 BOSCH溫度模組 氣壓感測器模組 代替BMP085 W8 [217373] $35X2=70
  23. 量多更便宜-國產 74HC595 74HC595N SN74HC595N DIP-16 邏輯-移位寄存器 [31672 $2X10=20
  24. 現貨 直插 74HC595 8位元串列輸入/輸出/並行輸出寄存器DIP-16 1個一拍 [137552-032] $3X5=15
  25. XL6009DC-DC可調升壓模組4.5-32V升5-55V 帶電壓表顯示SUNLEPHANT [9011814] $98X2=196

總價 2390 元, 但第三項在去年 5/1 也有購買, 但賣家說運送途中壓壞故位出貨, 應允下次扣除, 故 2390-122=2268 元. 參考 :



2021-02-17 補充 : 

賣家原本說月底才能交貨, 年初三收到簡訊說已到貨, 因姐姐初四要搭高鐵回台北, 故初三晚上載她回高雄時領貨, 清點後發現第 15 項 7475 無貨未出貨, 故老闆應退 120 + 56=176 元.

2021年1月30日 星期六

市圖還書 3 本 (邏輯設計/CPLD/Verilog)

 本周持續清理借書, 還了三本 :
No.1 有人預約需還 (此書為新文京出版的教科書, 內容扼要精簡且附習題與期末考題, 最小項化簡有含 Quine-McCluskey 與 Patric 化簡法); No.2 與 3 目前用不到, 借來主要是給二哥翻看看硬體設計主要內容是啥而已, 我短期內也不會重操舊業搞 IC 設計, 頂多玩一玩 GAL 罷了. 

2021年1月17日 星期日

數位邏輯實驗零件

二哥學期結束前跟同學借了下學期要上的數位邏輯電路實習課本, 希望我幫他買要用到的零件, 想在寒假時自己跑一遍, 主要是期末專題要做 24 小時制的時鐘, 所需零件清單如下 : 

材料清單 1 : 
  1. 7493*3 
  2. 74163*3
  3. 7447*6
  4. NE555
  5. 七段顯示器 LT502 (共陽極)*6, LT503 (共陰極)
  6. 發光二極體 *1
  7. 電位計 1M*1
  8. 電阻 220*7, 1K*10
  9. 陶瓷電容 0.01u*1, 電解電容 3.3u*1

材料清單 2 : 
  1. 7400, 7401, 7404, 7408, 7432, 74192 (各兩顆)
  2. 全加器 : 7483
  3. 四位元比較器 : 7485
  4. 8 對 1 多工器 : 74151
  5. 3 對 8 解碼器 : 74138
  6. 74147
  7. JK 反器 : 7473
  8. 4 位元 D latch : 7475
  9. 2 位元 D 正反器 : 74LS74
  10. 4 位元移位暫存器 : 74LS153 
  11. 4 位元二進位計數器 : 7493A
  12. 4 位元二進計數器 : 74163
  13. BCD 至 10 進位解碼器 : 7442
  14. BCD 上下數計數器 : 74192
最近要向露天賣家買一批零件, 但若二哥急用那就到禾樺買. 

2020-01-18 補充 :

今天晚上吃過飯後跟二哥去禾樺買零件, 除了 7493, 7483, 74192 等無貨外, 其餘都買到了, 花了大約 600 多, 這如果在露天買應該 400 塊, 實體店面本來就比較貴.

2020年12月28日 星期一

向 AliExpress 購買 TL866II Plus 燒錄器

上周在露天對 TL866II Plus 做了一番市調, 確認可用來燒錄手上的 GAL ATF20V10/16V8 等 SPLD 晶片, 本來打算向露天一個附 6 個 IC 座的賣家下標, 但昨天打算再問詳細點時發現該賣家居然被停權, 真是傻眼 (但也好險沒下標). 參考 : 


看了其他賣家都價格在 2000 元以上, 今天改在 AliExpree 搜尋找到下面這家免運費的, 我選擇了其中附 17 件組的價格為美金 57.99 元, 約合台幣 1640 元左右, 跟那個被停權露天賣家價格差不多, 附件還多近三倍 (但須 20~40 天海運運送才能交貨) : 








訂單編號 Order ID: 8123744956431953, 所附的 17 個配件如下圖 : 


Source : AliExpress


其實我原本要跟另外一家買, 主要是其貨品圖片中有附光碟, 但後來看客戶留言才發現其實盒裝內並未附光碟 (因此被負評), 所以就 bye-bye 了 : 
參考 :



2021-01-15 補充 :

今天收到包裹了, 從下訂到收到或大約近三周, 還蠻快的, 從新加坡樟宜貨運中心發貨 (空運).

2020年12月24日 星期四

國家實驗研究院台灣半導體研究中心研習課程

昨天二哥傳了國研院台灣半導體研究中心的研習課程單給我, 想在下個暑假報名參加 :


二哥自上大學後對半導體晶片設計就有興趣, 大一讀應用物理系時, 四年課程表著重在製程與材料方面; 大二轉入電機系後課程較多元, 可走製程或設計, 不過師資並不多, 如果想走晶片設計, 國研院這個學習課程可以嘗試看看 (南部上課地點在成大). 

如果向隅或時間所限也可以上網透過免費線上課程來學習 : 


不論是上實體課還是線上課都要先加入會員 :


不過申請資格僅限學校教職員/學生, 國研院, 業界 (限工業技術研究院), 其他研究單位 (限中研院/同步輻射中心), 我想加入會員都沒資格耶 : 




上過 IC 設計課程, 二哥打算去考國研院與經濟部工業局舉辦的 IC 布局設計能力檢定 : 


參考書籍 :


其中 "VLSI設計概論/實習(李博明, 唐經洲, 2005) 這本母校圖書館可借. "CMOS: Circuit Design, Layout, and Simulation" 這本 Wiley 在 2019 已出第四版. 

2020-12-26 補充 :

IC 設計是一個拚進度的高壓工作, 當年的磨練還是深深地烙印在我心裡, 驅動著我不斷學習新知識, 感謝當年給我機會的老長官.  

2020年12月15日 星期二

安裝 PLD 開發工具 WinCUPL

今天下載了 Atmel 的 PLD 開發工具 WinCUPL, 此公司於 2016 年被設計製造 PIC 微控器微聞名的 Microchip 併購, 下載網址如下 :


注意, 按 "Download WinCUPL" 似乎不會下載, 要在按鈕上按滑鼠右鍵選 "另存連結為" 才行, 安裝序號 60008009 也要記下來, 安裝完畢啟動程式時要輸入序號 : 




執行下載之 awincupl.exe (約 21MB) 會安裝 WinCUPL 與 WinSim 這兩個程式, 前者用來編輯 PLD 設定檔, 後者用來模擬電路, 安裝過程如下 :





注意這裡 User Name 與 Company Name 必須輸入才能進行下一步 : 








安裝完畢重啟電腦即可. 點選開始程式集中的 WinCUPL 會先彈出註冊視窗, Organization 欄輸入安裝時填寫的 Company Name, 序號欄填入 60008009 即可啟動程式了, 雖然此軟體已經有點舊了 (從聲明可於 XP/NT/Window 7 可知), 但仍能順利於 Win10 中執行 :




建立一個新專案後即可編輯 PLD 設定檔並將其編譯成 JEDEC 檔, 再用燒錄器寫入 PLD 中即可 :




我主要是使用 ATF16V8 與 ATF22V10 這兩款 GAL, 可燒錄此兩款 GAL 的燒錄器參考 :


WinCUPL 使用參考 : 

# Introduction to Atmel ATF16V8C and WinCUPL (lecture notes): PDF (~287KB)
# WinCUPL User's Guide: PDF (~350KB)
# WinCUPL Tuturial and Supporting Docs: ZIP (~134KB)

CUPL 語法參考 :


Youtube 教學頻道 :


下面這篇論壇文章中談到 CUPL 語法比 Verilog/VHDL 容易學習 : 

"Compared to VHDL or Verilog, CUPL is much simpler. Just give each pin a name, provide a logic equation for each output, and you're done!"


其他 : 


好站 : PhD. Linden McClure 的嵌入式教學網站

PhD. Linden McClure 是科羅拉多州立大學 (CU) 電機系兼任教授, 我今天在找尋 GAL16V8 的資料時意外逛到他的教學網站, 哇, 資料超豐富, 大部分是授課教材與給實驗室學生的參考資料, 主要是嵌入式元件相關的, 例如 8051 與 ARM 晶片等, 我要找的是 ATF16V8 的 JEDEC 檔編輯軟體 WinCUPL 以及其燒錄方法資料 (他使用 NEI EMP-100 燒錄器), 轉貼如下 :

# ATF16V8C SPLD Programming Guide for Phyton ChipProg-48: PDF (~343KB)
# Introduction to Atmel ATF16V8C and WinCUPL (lecture notes): PDF (~287KB)
# WinCUPL User's Guide: PDF (~350KB)
# ATF16V8C Datasheet: PDF (~512KB) . Atmel ATF16V8C Link
# WinCUPL Tuturial and Supporting Docs: ZIP (~134KB)

上面這些文件要好好來研讀一下, 我想先安裝 WinCUPL 熟悉一下軟體用法之後再來買 TL866II Plus 燒錄器, 參考 :


2020年12月14日 星期一

可燒 PAL/GAL/PLD 的萬用燒錄器 TL866II Plus

昨晚二哥問我序向邏輯以及 PAL/GAL/PLD 問題 (PLA 只能燒錄一次, GLA 可燒錄很多次, 而 PLD 則是這種可程式化邏輯 IC 之總稱), 我從鉛筆盒找出之前買的 Atmel 22V10 可程式晶片給他看, 想到空有 IC 但沒有燒錄器也是沒用. 

二哥說他下學期應該會學 PLD 專題, 所以我今天就上網查詢可用的燒錄器. 這兩顆 ATF22V10 是去年向高軟的常展科技買的, 但之後因為找不到適合的燒錄器而束之高閣, 參考 :


之前會卡關就是因為網路上介紹的燒錄器軟體 (例如 GALBLAST 與 ATFBLAST 都只能在 DOS/XP 執行, 在 Win10 無法啟動) 都太舊了, 在 Win8/10 都無法執行. 今天在論壇找到中國北京威龍的 Wellon VP-299, 其支援元件清單如下 :


但美金 159 元實在太貴. 這台在露天報價是 3900 元, 便宜很多 (但還是貴) :


後來在 Aliexpress 找到報價 41~51 美元左右中國海口鑫工電子的 TL866II Plus :


這款支援超過 15000 種元件, 包括 8051, Flash, ROM 等等, 也可燒錄 22V10 與 16V8 等 GAL, 支援之元件列表參考 : 


使用手冊 pdf 下載 :


這台在露天也有人賣, 報價最低 1180 元 : 



根據 Aliexpress 網站上資訊, 盒裝內不附光碟, 軟體可從下列網址下載 :


實際下載網盤位址 :


但此軟體經 VirusTotal 掃描有掃到三個可疑點, 但我的 PC-cillin 則未掃到 : 




 
解開安裝時會被 Win10 攔截 : 




若要繼續執行則按 "其他資訊", 再按 "仍要執行" 即可 : 




安裝過程如下 :






安裝完畢開啟程式要選擇 TL866II Plus 模式 : 




按左上角 "Select IC" 框內的按鈕選擇元件, 這裡點選 PLD 與 ATMEL 的ATF22V10C :





按左上角的 "Load" 鈕可選取已編譯好的 jdec 檔, 然後按 "PROG." 鈕即可進行燒錄作業 : 

2020年3月28日 星期六

關於 Mojo v3 FPGA 開發板

FPGA 是邏輯設計的後續課程, 但一直以來卻因為不知道該選用哪家的晶片而躊躇不前, 晶片關係到所使用的軟體設計工具, 我之前下載安裝過 Altera 的開發軟體 Quartus, 但卻卡在剛好被 Intel 併購, 申請 Licence 時出現障礙最終放棄.

今天找到 Oreilly 出版的 "Learning FPGAs", 此書使用 Mojo v3 開發板, 似乎是個軟硬體配套齊全的學習方案, 書中使用的 HDL 是源自 Verilog, 但比 Verilog 更容易學習的 Lucid HDL (事實上開發軟體最後是將其編譯成 Verilog) :

# Learning FPGAs: Digital Design for Beginners with Mojo and Lucid HDL


Source : Oreilly


下面這篇文章詳細介紹了 Mojo 開發板的規格與用法 :

# FPGA教學:通過Mojo研發板介紹FPGA – 第1部分


Source : Aliexpress


此開發板使用的 FPGA 是賽靈思 (Xilinx) 的 SPARTAN 6 XC6SLX9, 這顆晶片具有 9152 個邏輯閘, 市價大約台幣 100 元, 為 144 腳 LQFP 封裝.

相關視頻參考 :

# https://www.youtube.com/watch?v=iMTMBbzrYQ8




Mojo v3 開發板在露天也有人賣 :

# Mojo V3 FPGA Development Board Module Spartan 6 XC6SLX9 for Arduino $1214

不過這價格有點貴, 我在阿里巴巴美國 Aliexpress 網站找到美金 25.38 元的, 加上 4.14 美金運費總共 29.48 美元, 約合台幣 900 元左右, 比露天代購便宜了 300 多塊 :

# Spartan6 Mojo V3 FPGA Development Board kits Module Spartan 6 XC6SLX9 SDRAM for Arduino DIY US$25.38

其他 SPARTAN 6 開發板參考 :

# XILINX SPARTAN 6 XC6SLX9 Microblaze FPGA NANO VER2.0 開發板 $900
# SPARTAN6 XC6SLX9 開發板 256M RAM XILINX FPGA開發板 學習板 $1500


2020-06-10 補充 :

今天在 Aliexpress 找到更便宜的賣家 :

# Spartan6 Mojo V3 FPGA Development Board Kits Module Spartan 6 XC6SLX9 SDRAM for Arduino DIY US$23.8 + US$0.62 Shipping=24.42

折合台幣約 733 元.

此開發板常用的擴充板有兩塊, 即 SD RAM 與 Camera 擴充板, 露天大約 900 元左右 :

# Camera Shield OV2640 攝像頭模塊 搭配 Mojo v3 FPGA 攝像頭模塊 $900
# SDRAM Shield Mojo v3 FPGA Spartan6 XC6SLX 內存 模塊 $900

2019年6月19日 星期三

邏輯設計筆記索引

這些筆記來自今年 05-14 ~ 06-11 參與邏輯設計協同教學編寫的五份簡報資料. 為了這個外務我把邏輯設計的書重讀了一遍, 因為承諾學生要放到網路以便他們用 Google 翻譯閱讀, 況且二哥上大學也用得到, 所以就花了蠻多時間整理了序向電路部分共 4 篇.

# 邏輯設計筆記序向篇 : Latch (電栓) 與 Flip-Flop (正反器)
# 邏輯設計筆記序向篇 : Register (暫存器)
# 邏輯設計筆記序向篇 : Counter (計數器)
# 邏輯設計筆記序向篇 : Finite State Machine (有限狀態機)

由於數位電路設計在物聯網應用中也會用到, 所以打算有空把組合篇也補齊, 這樣比較完整. 邏輯設計是進階到 Verilog/VHDL 設計的基礎知識, 也是我在學校讀的書裡面唯一真正有用到工作上的.

組合篇的大綱如下 :
  1. 數碼系統
  2. 邏輯閘
  3. 布林代數
  4. 卡諾圖化簡
  5. 組合電路設計 (1) 加減法器
  6. 組合電路設計 (2) 同位元偵測器
  7. 組合電路設計 (3) 編碼器與解碼器
  8. 組合電路設計 (4)多工器與解多工器
  9. 組合電路設計 (5) 可程式化邏輯元件 PLD/PLA/PAL
序向篇補充 :
  1. 狀態化簡
  2. ASM (演算法狀態機) 設計
  3. GAL 電路設計

2019年6月17日 星期一

邏輯設計筆記序向篇 : Finite State Machine (有限狀態機)

整理完計數器筆記後, 終於來到序向邏輯電路設計的最重要篇章-有限狀態機 (finite state machine, FSM), 前面介紹的暫存器 (register) 與計數器 (counter) 都是從分析 (analytical) 的角度來看序向電路, 而有限狀態機則是從合成 (synthetic) 角度來看. 其實, 暫存器與計數器都是有限狀態機. 本系列之前的筆記參考 :

# 邏輯設計筆記序向篇 : Latch (電栓) 與 Flip-Flop (正反器)
# 邏輯設計筆記序向篇 : Register (暫存器)
# 邏輯設計筆記序向篇 : Counter (計數器)

以下筆記參考了如下幾本書 :
  1. 數位邏輯設計附實習 第三版 (楊豐瑞, 陳福春, 旗標出版)
  2. 最新數位邏輯電路設計 第三版 (劉紹漢等, 全華全華)
  3. 數位邏輯設計 第三版 (黃慶璋, 全華出版)

1. Moore 與 Mealy 狀態機 :

FSM 的數學基礎是源自形式語言的自動機 (automata) 理論, 廣泛地應用在硬體與軟體設計中, 參考 :

# Wiki : 有限狀態機
# Wiki : Finite State Machine

有限狀態機 FSM 有兩種類型 :
  1. Mealy Machine (密利機) 
  2. Moore Machine (莫爾機) 
主要的差別是 : Moore 機的輸出是由暫存器所儲存之記憶狀態直接輸出或經過組合後輸出, 與輸入不直接相關, 亦即, 輸入的變化不會馬上影響輸出. 而 Mealy 機則是將輸入與暫存器狀態經組合後輸出, 因此輸入的變化馬上會影響輸出, 電路結構如下 :





注意, Moore 機輸出端的組合邏輯電路是可有可無的, 如果正反器狀態就是所要的輸出就不需要此邏輯電路; 反之, 輸出是正反器狀態的組合時就需要, 例如狀態的解碼器.

儲存同樣狀態的有限狀態機可以選擇設計成 Mealy 或 Moore 機, 差別是在輸出的組合電路是否納入要輸入訊號. 但在一個同步系統中, 有時希望輸入的改變可以與時鐘同步, 而不是馬上影響輸出, 這可在 Mealy 機的輸出組合電路後面加上暫存器來達成.

設計有限狀態機時首先須根據設計需求判定這是 Moore 機還是 Mealy 機, 然後按照需求功能繪製狀態變化圖,




具體而言, 就是將狀態圖轉成狀態表, 然後對照正反器激勵表 (excitation table) 填寫正反器之轉態表 (transition table), 再利用卡諾圖 (Karnaugh map) 求出個正反器的輸入方程式 (input equation), 即可繪製最後的電路圖 :




2. 狀態表 (state table) : 

依照設計要求畫出狀態圖後, 必須將其填入狀態表並定義狀態值以利後續設計. Moore 機狀態表範例如下, 包含現態 (current state), 次態 (next state), 以及輸出. 如果有輸入例如 X, 次態需依輸入值排列組合分欄填寫; 否則次態只需一欄即可. 另外, 由於 Moore 機的輸出只與正反器狀態有關, 因此輸出是獨立一欄 :




Mealy 機的狀態表範例如下, 它與 Moore 機最大的不同是, 輸出與輸入有關, 因此輸出與次態寫在一起, 且依照輸入不同分欄填寫 :




狀態表是狀態圖的表格化, 在後續設計流程中, 它將結合正反器激勵表 (excitation) 一起整合為轉態表 (transition).


3. 正反器的激勵表 (excitation table) : 

每一個 latch 與 flip-flop (正反器) 的功能表 (function table) 描述的是輸入所對應的輸出, 而所謂激勵表 (excitation table) 則是反過來, 描述的是要達成輸出狀態的變化所需要的輸入. 以下列出在有限狀態機設計中常用到的四種記憶元件之激勵表 :

(1) SR latch (NOR) :

NOR latch 的電路符號, 功能表, 以及激勵表如下圖所示, function table 輸入 S, R 在左, 輸出 Qn+1 (次態, next state) 在右, 描述輸入-輸出的對應, 反之, excitation table 則是現態 (present state) Qn 變成次態 Qn+1 所需要的輸入環境.




SR NOR latch 激勵表的推導 :
  1. 第一列 : 正反器現態為 0 次態為 0, 在 function table 中符合之 SR 輸入有 SR=00 與 SR=01, 前者是因為狀態保持不變入選 (現態為 0  次態為 0), 因此 R 輸入值為 don't care, 所以打一個 X, 而 S 輸入值為 0. 
  2. 第二列 : 現態為 0 次態為 1, 在 function table 中符合之 SR 輸入只有一個, 即 SR=10.  
  3. 第三列 : 現態為 1 次態為 0, 在 function table 中符合之 SR 輸入只有一個, 即 SR=01. 
  4. 第四列 : 現態為 1 次態為 1, 在 function table 中符合之 SR 輸入有 SR=00 與 SR=10, 前者是因為狀態保持不變入選 (現態為 1), 因此 S 輸入值為 don't care, 所以打一個 X, 而 R 輸入值為 0. 

(2) JK flip-flop :

JK flip-flop 的電路符號, 功能表, 以及激勵表如下圖所示 :




JK flip-flop 激勵表的推導 :
  1. 第一列 : 正反器現態為 0 次態為 0, 在 function table 中符合之 JK 輸入有 JK=00 與 JK=01, 前者是因為狀態保持不變入選 (現態為 0), 因此 K 輸入值為 don't care, 所以打一個 X, 而 J 輸入值為 0.
  2. 第二列 : 現態為 0 次態為 1, 在 function table 中符合之 JK 輸入有 JK=10 與 JK=11, 前者是必然, 後者是因為 toggle 轉態入選 (現態為 0 次態為 1), 因此 K 輸入值為 don't care, 所以打一個 X, 而 J 輸入值為 1. 
  3. 第三列 : 現態為 1 次態為 0, 在 function table 中符合之 JK 輸入有 JK=01 與 JK=11, 前者是必然, 後者是因為 toggle 轉態入選 (現態為 1 次態為 0), 因此 J 輸入值為 don't care, 所以打一個 X, 而 K 輸入值為 1.
  4. 第四列 : 現態為 1 次態為 1, 在 function table 中符合之 JK 輸入有 JK=10 與 JK=00, 前者是必然, 後者是因為狀態保持不變入選 (現態為 1 次態為 1), 因此 J 輸入值為 don't care, 所以打一個 X, 而 K 輸入值為 0. 

(3) D flip-flop :

D flip-flop 的電路符號, 功能表, 以及激勵表如下圖所示 :




D flip-flop 激勵表的推導 :
  1. 第一列 : 現態為 0 次態為 0, 在 function table 中符合之 D 輸入為 D=0.
  2. 第二列 : 現態為 0 次態為 1, 在 function table 中符合之 D 輸入為 D=1. 
  3. 第三列 : 現態為 1 次態為 0, 在 function table 中符合之 D 輸入為 D=0.
  4. 第四列 : 現態為 1 次態為 1, 在 function table 中符合之 D 輸入為 D=1.
由於 D 正反器是 transparent flip-flop (透明的), 因此 D 輸入其實就是次態 Qn+1 之值.

(4) T flip-flop :

T flip-flop 的電路符號, 功能表, 以及激勵表如下圖所示 :




T flip-flop 激勵表的推導 :
  1. 第一列 : 現態為 0 次態為 0, 在 function table 中符合之 T 輸入為 T=0.
  2. 第二列 : 現態為 0 次態為 1, 在 function table 中符合之 T 輸入為 T=1. 
  3. 第三列 : 現態為 1 次態為 0, 在 function table 中符合之 T 輸入為 T=1.
  4. 第四列 : 現態為 1 次態為 1, 在 function table 中符合之 T 輸入為 T=0.
由於 T 正反器是 toggle flip-flop (交替的), 因此只要是有轉態, 即 1 變成 0 或 0 變成 1, 其 T 輸入必須為 1 (toggle), 否則 T=0 (keep state).

以上所推導出的四種激勵表是有限狀態機設計所必須, 摘要如下 :




由功能表 (function) 反推出激勵表 (excitation) 之後, 便可以將狀態表與激勵表整合成一張轉態表 (transition table), 以便利用卡諾圖來求得正反器的輸入方程式. 空白的轉態表範例如下所示, 這裡以最常用的 D 與 JK 正反器為例, 假設狀態機有一個輸入 X 與一個輸出 Y, 使用 4 個正反器, 故狀態有 Q0, Q1, Q2, Q3 共四個 :





如果有多個輸出入 (例如 X1, X2, ... Y1, Y2, ...), 需再添加欄位.

有了狀態表與激勵表, 接下來就是將兩者整合為一張轉態表以便求取正反器的輸入方程式, 這必須以實際範例來說明.


範例 1 : Moore 信號偵測器

設計一個信號偵測器, 當位元串流 (bit stream) 中出現 "101" 時輸出 high, 否則輸出 low. 例如 :




首先以 Moore 機來設計, 依據設計要求描述, 因為要偵測的信號標記是 3 個位元, 若使用 Moore 機來設計的話需要四個狀態來記錄已收到之信號, 這是一個逐步接近目標狀態 "101" 之進程 :

S0 : 0 received, output 0 
S1 : 1 received, output 0 
S2 : 10 received, output 0
S3 : 101 received, output 1

狀態圖如下 :




注意, 只有進入 S3 狀態 (已收到 "101") 才會輸出 1, 否則都輸出 0. 其次, 在 S3 收到 0 是進入 S2, 不是 S0, 因為在 S3 已收到 101, 若在收到 0 表示已收到 1010, 後兩位元是 10, 此為 S2 狀態.

狀態圖畫好後需指定狀態值 (即編碼), 四個狀態需要兩個位元編碼, 因為 2**2=4. 編碼可任意指定, 此處指定 S0=00, S1=01, S2=10, S3=11. 然後將狀態圖填入狀態表中 :




填表的方法是先將最左邊 S0~S3 的現態值填好, 然後依據狀態圖由上而下逐列填寫次態與輸出 :
  1. 在 S0 狀態時輸出 0, 收到 0 次態為 S0, 收到 1 次態為 S1. 
  2. 在 S1 狀態時輸出 0, 收到 0 次態為 S2, 收到 1 次態為 S1. 
  3. 在 S2 狀態時輸出 0, 收到 0 次態為 S0, 收到 1 次態為 S3. 
  4. 在 S3 狀態時輸出 1, 收到 0 次態為 S2, 收到 1 次態為 S1. 
接著要結合狀態表與正反器為一張轉態表, 以下將使用 D 與 JK 正反器, 其激勵表如下 :




轉態表實際上就是狀態表的延伸, 它將輸入與現態做排列組合, 並多出一個正反器輸入欄位, 依據激勵表填入每一個現態變成次態所需之輸入條件.

例如 JK 正反器的轉態表中, 第一列 Q0 狀態由 0 變 0, 從激勵表可知所需知輸入為 J0=0, K0=X. 第四列 Q1 由 1 變 0, 從激勵表可知所需知輸入為 J0=X, K0=1. 如此這般由上而下依序將第四欄的 JK excitation 填好, 輸出部分因 Moore 機輸出只與現態有關, 因此只在現態 Q0Q1=11 時輸出 1 :




如果用 D 正反器來做, 則轉態表就更容易填寫了, 因為正反器的輸入 D0D1 不用像 JK 那樣要去查看激勵表 (當然, 若背得起來的話是不用查), 直接將次態 (next state) 複製過來就行了 (凡事皆有代價, 這麼方便的代價是電路可能較複雜, 需要較多邏輯閘來實現) :




轉態表填好後就可以用卡諾圖求取正反器的輸入方程式了, 卡諾圖的變數有三個, 一個是輸入 X, 另外是正反器的現態 Q0 與 Q1 一組. 注意, 卡諾圖相鄰只能有一個變化, 因此 Q0Q1 排列依序是 00-01-11-10.

以 J0 為例, 只有在 XQ0Q1=001 (注意這裡 Q0Q1 是指現態) 時 J0 才為 1, XQ0Q1=000, 100, 與 101 時為 0, 其餘的組合均為 X (don't care), 填入卡諾圖後發現 XQ0Q1=001 可與 011 的 X 結合 (因 X 表示可以為 0 也可以為 1, 把它當作 1 比較有利), 這個組合項 X 部分為 0, Q0Q1 部分 Q0 消失只剩 Q1, 因此 J0=/XQ1, 其餘各方程式依此方法求得, 結果如下圖所示 :



如果以 D 正反器來實現, 則其卡諾圖化簡如下圖所示 :




因為 Moore 機輸出只與正反器狀態有關, 與輸入沒有直接相關, 因此不論是用 JK 還是 D, 其輸出都是 Y=Q0Q1 :




輸入方程式求出來後就可以繪製電路圖 :





這樣就完成整個設計.


範例 2 : Mealy 信號偵測器

此設計與上面範例 1 相同, 但改用 Mealy 機來設計. 與 Moore 機最大的不同是輸出與輸入直接相關, 因此只需要三個狀態即可, 狀態定義如下 :

S0 : 0 received, output 0
S1 : 1 received, output 0
S2 : 10 received, output 0

注意, Mealy 機不需要 Moore 機的第 4 個狀態 S3, 這是因為在 S2 時若收到 1 就可以輸出 1 並回到 S1 (即收到 1 的狀態), 若收到 0 就輸出 0 並回到 S0. Moore 機需要 S3 的原因是其輸出是依賴於正反器狀態, 因此需要一個收到 "101" 的 S3 狀態以支持輸出信號.

狀態圖如下 :




將狀態圖轉成如下狀態表 :




然後依據激勵表將狀態表延伸為轉態表 :






注意最底下一列表示現態為 10 時若收到 X=1 輸出 1. 用卡諾圖求取 JK 正反器輸入方程式如下 :




求取 D 正反器輸入方程式與輸出方程式如下 :




注意, 不論是用 JK 或 D 實現, 其輸出方程式都一樣 : Y=XQ0. 電路圖如下 :




以上便是 Mealy 機的設計結果, 看起來比 Moore 機簡單些.

在上一篇的計數器筆記中曾提到, 計數器其實就是一種有限狀態機, 同步計數器電路之構成有特定之規則, 下面就以設計 3-bit 同步計數器來說明這些電路是怎麼來的.


範例 3 : 設計 MOD-8 二元上數計數器

計數器可以直接用正反器狀態做輸出, 因此通常是用 Moore 狀態機來實現, MOD-8 二元計數器需要 8 個狀態來記錄計數值, 其狀態圖如下 :




將狀態圖轉成如下之狀態表並定義狀態值, 八個狀態需要用到 3 個正反器 :




以 JK 正反器來實現, 依據 JK 的激勵表得出轉態表如下, 方法以圖中的 Q0 為例, 現態 1 變為次態 0, 則 J0K0 須為 X1, 其餘均照此方法填寫 :





注意, 因計數器沒有額外輸入且直接以正反器狀態做輸出, 故轉態表無輸出入變數欄位. 接著用卡諾圖求取正反器輸入方程式 :




依據輸入方程式繪製電路圖如下 :




在上一篇計數器筆記中的 MOD-8 二元計數器電路就是這樣得到的. 此範例為上數 (count up) 計數器, 那下數計數器呢? 方法一樣, 只是狀態表不同罷了, 見下面範例.


範例 4 : 設計 MOD-8 二元下數計數器

MOD-8 下數計數器的狀態圖與上數計數器是一樣的, 參考上例, 不一樣的是狀態表, 如下圖所示 :




依據 JK 激勵表將狀態表延伸為轉態表如下 :




從轉態表求出正反器之輸入方程式 :




 依據輸入方程式繪製電路圖 :




可見上數是取 Q 輸出當正反器輸入, 而下數是取 /Q 輸出當正反器輸入.


範例 5 : 設計一個按照 0, 5, 4, 3, 2, 1 順序循環的同步計數器

此計數器有 6 個狀態, 最大狀態值 5 < 8=2**3, 因此需要三個正反器來記憶狀態值, 其狀態表如下, 0 的次態是 5; 1 的次態是 0; 2 的次態是 1, .... 依此類推 :




其 JK 正反器之激勵表與轉態表如下 :





由轉態表求取輸入方程式 :




依據輸入方程式繪製電路圖完成設計 :




OK, 今天終於把有限狀態機筆記整理完畢, 履行了對學生們的承諾, 不到一周就整理了四篇長篇筆記, 真是太佩服自己了, 有這種毅力我應該也可以去征服宇宙了, 呵呵. 真希望學生們有在看, 明天是期末考, 祝福他們都能 pass, 而被邏輯設計折騰了將近兩個月的我, 也總算解放了.

PS : 有空可以追加的範例 : ripple counter, Johnson counter, shift register 等等.


2021-03-05 補充 :

範例 2 的狀態圖 S1 打錯, 右上角應是 1/0 已修正.