第一篇:2012數字系統設計與VHDL課程大作業(定稿)
數字系統設計與VHDL課程大作業
具體要求
一、總體要求:
1. 本課程為專業必選考查類課程,以大作業加平時成績的形式給定最終成績。
2. 每班六個題目,每4-5為一組,自由組合,分工合作。10月26日上課
前請各班上交分組及組長情況表。
3. 所有作業需完成VHDL核心代碼的設計,并采用QuartusII進行相關仿
真或平臺實現,否則全組不及格。
4. 各小組推選一人于第十周(11月5日和9日)上講臺講解題目設計思路、源代碼分析、仿真結果及演示。
5. 各小組組長于11月30日前到老師處匯報題目的完成情況,并接受考核。
6. 每名同學于11月30日前提交一份大作業報告,并由班長統一送交老師。
二、大作業題目:
1. 頻率計設計(平臺實現)
1)
2)
3)
4)能對輸入的方波信號頻率進行采樣; 采樣頻率范圍為0~999999Hz,以1Hz為單位進行顯示; 采用六個七段數碼管顯示當前采樣的頻率值; 本電路系統輸入時鐘為6MHz。
2. 方波發生器設計(仿真實現)
1)
2)
3)系統的輸入時鐘為6MHz; 系統輸出頻率為對系統時鐘的1~32分頻;(5位二進制輸入); 系統輸出頻率的占空比可調,分為25%、50%、75%三檔;(采用2位二進制
位輸入控制)。
3. 競賽搶答器設計(平臺實現)
1)
2)搶答器的輸入路數為8路;(8位二進制輸入)當主持人宣布開始(按下某一鍵時為有效),搶答時當某一方先按下按鍵,其
他鍵則失效;
3)
4)
5)用1個七段數碼管顯示搶中的路編號; 系統復位鍵按下后,進行下一輪搶答; 系統的輸入時鐘為6MHz。
4. 交通燈控制系統設計(平臺實現)
1)交叉路口為十字路口;
2)
3)每路口設直行、左轉、右轉的方向指示燈; 每個方向指示燈有三種顏色,即紅、綠、黃三色。為簡化設計,右轉指示燈常
綠;黃燈閃動時間間隔為0。5S,持續時間自定義。
4)
5)每路口需用兩個數碼管顯示允許通行或禁止通行的時間; 系統的輸入時鐘為6MHz。
5. 點陣字符顯示控制器設計(仿真實現)
1)
2)
3)用16*16點陣的發光二極管顯示字符; 可顯示字符為0~9的數字字符與A~F英文字母; 輸入為四位二進制矢量。
6. 萬年歷及電子鐘設計(平臺實現)
1)
2)
3)
4)能顯示年、月、日、時、分、秒、星期,共需15個數碼管; 年、月、日、時、分、星期均需可調; 系統默認時間為2000年01月01日00時00分00秒星期6; 系統輸入時鐘為6MHz。
三、大作業報告要求:
1. 題目功能分析;
2. 總體模塊劃分;
3. 代碼實現;
4. 仿真結果;
5. 設計心得、體會;
6. 報告采用統一的A4封面,其中1、2、5項必須為手寫,3、4項為打印。
7. 網絡工程專業不再進行期末考試,期終成績以作業測試、講解、報告綜
合評定,計算機專業還需要進行閉卷考試,但作業測試、講解、報告占主要部分。
第二篇:數字邏輯與數字系統設計教學大綱
西安電子科技大學
“卓越工程師教育培養計劃”試點課程教學大綱
“數字邏輯與數字系統設計”教學大綱
課程編號:OE2121017 課程名稱:數字邏輯與數字系統設計
英文名稱: Digital Logic and Digital
System Design 學
時:60
學
分:4 課程類型:必修
課程性質:專業基礎課 適用專業:電子信息與通信工程(大類)
開課學期:4 先修課程:高等數學、大學物理、電路分析與模擬電子線路 開課院系:電工電子教學基地及相關學院
一、課程的教學任務與目標
數字邏輯與數字系統設計是重要的學科基礎課。該課程與配套的“數字邏輯與數字系統設計實驗”課程緊密結合,以問題驅動、案例教學、強化實踐和能力培養為導向,通過課程講授、單元實驗、綜合設計項目大作業、設計報告撰寫、研討講評等環節,實現知識能力矩陣中1.1.2.2、1.2.1.2以及2.5、2.6、3.6、4.1、4.2的能力要求。
要求學生掌握數字電路的基本概念、基本原理和基本方法,了解電子設計自動化(EDA:Electronic Design Automation)技術和工具。數字電路部分要求學生掌握數制及編碼、邏輯代數及邏輯函數的知識;掌握組合邏輯電路的分析與設計方法,熟悉常用的中規模組合邏輯部件的功能及其應用;掌握同步時序邏輯電路的分析和設計方法,典型的中大規模時序邏輯部件。EDA設計技術部分,需要了解現代數字系統設計的方法與過程,學習硬件描述語言,了解高密度可編程邏輯器件的基本原理及開發過程,掌握EDA設計工具,培養學生設計較大規模的數字電路系統的能力。
本課程教學特點和主要目的:
(1)本課程概念性、實踐性、工程性都很強,教學中應特別注重理論聯系實際和工程應用背景。
(2)使學生掌握經典的數字邏輯電路的基本概念和設計方法;(3)掌握當今EDA工具設計數字電路的方法。
(4)本課將硬件描述語言(HDL)融合到各章中,并在軟件平臺上進行隨堂仿真, 通西安電子科技大學
“卓越工程師教育培養計劃”試點課程教學大綱
過本課和實驗教學, 使學生掌握新的數字系統設計技術.雖然現代設計人員已經很少使用傳統的設計技術,但傳統的設計可以讓學生直觀地了解數字電路是如何工作的,并可以為EDA設計工具所進行的操作提供說明,讓學生進一步了解自動化設計技術的優點。
成功的邏輯電路設計人員必須深入理解數字邏輯設計相關的基本概念,并熟練掌握EDA設計工具的使用。
二、本課程與其它課程的聯系和分工
數字邏輯與數字系統設計主要討論集成電路器件的外部特性,對門電路內部晶體管的工作原理及狀態轉換只作定性了解。
數字邏輯與數字系統設計在學科基礎中的地位既要體現作為一門課程的完整性和電子線路體系結構的特點,也要體現為后續課程服務的目的。后續的專業課程如計算機組成原理,微機原理、接口技術等都是數字電路系統高度集成的體現。數字電路與系統設計為微處理器與系統設計、嵌入式系統、數字通信等后續課程進行了基礎知識準備。
三、課程內容及基本要求
(一)數制與編碼(建議3學時)學習數制表示方法和常用編碼 1.基本要求
(1)掌握常用數制(2、8、10、16進制數)的表示方法與相互轉換方法
(2)掌握常用編碼(842BCD碼、5421BCD碼、余3碼、格雷碼等)的表示方法 2.重點、難點
重點:二進制,十六進制 難點:格雷碼的掌握
3.說明:主要掌握常用編碼的表示方法
(二)邏輯代數與邏輯函數化簡(建議10學時)
學習邏輯代數的基本運算及函數表示方式,了解邏輯函數的化簡方法;學習硬件描述語言(HDL)描述邏輯函數的基本結構,熟悉邏輯函數與HDL之間的對應關系。1.基本要求
(1)熟練掌握基本邏輯運算與邏輯門
(2)了解邏輯代數的基本定理、法則和主要公式,了解邏輯函數代數化簡法(3)掌握邏輯函數的標準表達式和常用的五種表達式及相互轉換方法(4)能夠用HDL描述真值表,熟悉邏輯函數的HDL表達方式(5)熟悉邏輯函數的卡諾圖化簡法
(6)掌握包含無關項邏輯函數的表示方法及化簡方法 2.重點、難點
重點:邏輯函數的兩種標準表示形式以及HDL表達方式 難點:五種表達式之間的相互轉化 西安電子科技大學
“卓越工程師教育培養計劃”試點課程教學大綱
3.說明:5個變量以上的邏輯函數化簡不作要求
(三)組合邏輯電路(建議10學時)
學習組合邏輯電路的分析方法和設計方法,學習組合邏輯的HDL描述方式 1.基本要求
(1)掌握組合電路的分析方法和設計方法
(2)熟悉組合邏輯電路的HDL設計方法,掌握設計流程圖的繪制方法
(3)熟悉常用MSI組合邏輯部件(變量譯碼器、數據選擇器)的邏輯功能,擴展方法及應用
(4)掌握譯碼器、數據選擇器的HDL描述方式
(5)掌握由MSI器件構成組合電路的設計方法和分析方法(6)了解組合電路的競爭冒險現象及消除方法 2.重點、難點
重點:由門電路進行組合電路的設計 難點:中規模集成電路芯片應用
3.說明: 安排組合邏輯研究實驗
(四)觸發器(建議6學時)
學習觸發器的工作原理和功能描述方法,學習觸發器的HDL描述方法 1.基本要求
(1)掌握基本RS觸發器及常用沿觸發的(D、T、JK)觸發器的邏輯功能及其描述方法(2)觸發器的HDL描述方法(包括行為級描述和結構化描述)(3)熟悉常用集成觸發器的邏輯符號及時序圖的畫法(4)掌握觸發器的HDL描述方法中的沿觸發與電平觸發 2.重點、難點
重點: 觸發器的多種描述方法
難點:觸發器電路的HDL描述及時序波形
3.說明:觸發器部分要求記憶邏輯符號掌握邏輯功能,對觸發器內部電路不做要求,安排集成觸發器實驗。
(五)時序邏輯電路(建議16學時)
學習同步時序電路的分析方法和典型同步時序電路的設計方法,時序電路的HDL描述。1.基本要求
(1)掌握同步時序電路的分析方法,要求根據電路能正確列出狀態表,畫出狀態及時序圖并分析其功能
(2)了解同步時序電路的一般設計方法和步驟,掌握給定狀態同步時序電路的設計方法
(3)掌握時序電路的HDL描述方法 西安電子科技大學
“卓越工程師教育培養計劃”試點課程教學大綱
(4)掌握典型MSI時序邏輯部件(74LS161、74LS194)的邏輯功能,擴展方法及應用(5)學習狀態機的HDL描述方法,并掌握復雜時序邏輯電路的HDL描述方法(6)掌握以MSI為主的典型同步時序電路的分析方法與設計方法:
任意模值計數器;移位型計數器;序列碼發生器(7)掌握典型時序電路的HDL描述方法
(8)了解異步時序電路的主要特點
2.重點、難點
重點:電路自啟動自校正的設計;MSI時序邏輯部件的邏輯功能及應用 難點:時序邏輯點狀態機HDL描述
3.說明:學習這一章后,要求能看懂器件手冊,安排計數器和移位寄存器應用實驗。
(六)集成邏輯門(建議3學時)1.基本要求
(1)了解典型TTL與非門的基本工作原理,掌握其主要外特性和參數(2)掌握集電極開路門和三態門的主要特點
(3)掌握MOS邏輯門(以CMOS為主)的主要特點和使用方法 2.重點、難點
重點:TTL與非門的主要外特性和參數 難點:集電極開路門
(七)脈沖波形的產生與整形(建議3學時)了解脈沖電路的分析方法 1.基本要求
(1)了解典型脈沖電路(單穩、多諧、施密特觸發器)的基本特點及脈沖電路的分析方法
(2)掌握555定時器的基本工作原理及典型應用
(3)掌握晶體振蕩器,施密特單穩集成電路的基本原理及使用方法。2.重點、難點 重點: 555定時器
難點:振蕩電路性能提高需要考慮的因素 3.說明:安排脈沖電路的產生和整形實驗。
(八)存貯器及可編程器件(建議4學時)1.基本要求
(1)掌握ROM的基本工作原理和幾種不同的編程方法(2)了解靜態RAM和動態RAM的基本工作原理
(3)了解可編程器件的內部結構特點, 可用資源, 主要參數和選型依據 西安電子科技大學
“卓越工程師教育培養計劃”試點課程教學大綱
(4)結合實驗, 逐步掌握FPGA的仿真與設計技術 2.重點、難點
重點:ROM的基本工作原理, FPGA的仿真與設計技術 難點:ROM實現組成邏輯函數, FPGA的仿真與設計技術
(九)D/A和A/D(建議1學時)1.基本要求
(1)了解D/A和A/D轉換器的基本原理和主要技術指標(2)了解典型集成D/A和A/D芯片的特點 2.重點、難點
重點:D/A和A/D轉換器的主要技術指標 難點:D/A和A/D轉換器的基本原理
四、布置大作業
綜合設計(1)-----用VHDL設計一數字頻率計(結合實驗在FPGA上實現)綜合設計(2)-----用VHDL設計一DDS信號發生器(結合實驗在FPGA上實現)系統設計完成通過EDA軟件仿真后,在FPGA系統上實現驗證,期間安排兩次討論。第一次是設計方案評審和講評,第二次的實現結果報告和講評。
五、教學安排及方式
總學時 60 學時,講課 56 學時。討論4學時。實驗單獨開課,大作業采用開放式實驗方式利用課外時間進行。
六、考核方式
1.期末筆試(以閉卷考試為主,也可開卷考試或半開卷半閉卷考試)占60% , 2.大作業----綜合設計占30%, 3.平時成績占10%.七、推薦教材與參考資料
教材:
(1)新編: 任愛鋒, 孫萬蓉, 周端等
(2)楊頌華等 數字電子技術基礎 西安 西安電子科技大學出版社 2009 參考書:
(1)夏宇聞等譯 數字邏輯基礎與Verilog設計 機械工業出版社
(2)John F.Wakerly 數字設計——原理與實踐(第三版 影印版)高等教育出版社
西安電子科技大學
“卓越工程師教育培養計劃”試點課程教學大綱
第三篇:《數字邏輯與數字系統》課程實踐教學經驗總結
數字邏輯與數字系統資源庫
《數字邏輯與數字系統》課程實踐教學
經驗總結
北京郵電大學計算機學院實驗中心 楊秦 張杰 靳秀國
“數字邏輯與數字系統”課程是計算機、通信、電子、信息、自動控制等專業的技術基礎課程,又是一門實踐性很強的課程。對計算機專業的學生來說,它是硬件知識的基礎課,一輩子受用?!皵底诌壿嬇c數字系統”課程教學實驗不僅對學好本門課,而且對 “計算機組成原理”等后續課的理論教學和實踐教學具有十分重要的意義。因為它是能力培養的基礎性工作,理論教學無法取代。為了配合精品課程建設,我們對教學實驗包括實驗系統、教學內容及實驗教學手段都進行了改革,也取得了一些經驗。本文從課程實驗和課程設計兩個方面
進行總結。
課程實驗部分
1.從教材、實驗系統到教學實驗內容的改革
由于新技術的發展,“數字邏輯與數字系統”教材也在變革,我們選擇了清華大學科教儀器廠的TDS-2實驗系統(見圖一)。在這個實驗設備上,既能使用中小規模標準器件作基礎數字實驗,又可使用可編程邏輯器件完成復雜的數字系統實驗。在我們新購置的100臺綜合實驗平臺TEC-5(見圖一)中,仍保持了基礎性實驗和時代性實驗兩方面的教學內容,為數字實驗提供了高端的ISP芯片,使教學實驗的內容和重點得以向在系統編程邏輯方面傾斜。
圖 一
基礎性實驗的設計非常重要,它使學生掌握基本概念,具備基礎知識和能力
結構?;具壿嬮T和三態門實驗:在掌握“TDS數字電路實驗系統”儀器和示波器測量的使用方法的基礎上,掌握TTL與非門、與或非門和異或門輸入與輸出之間的邏輯關系;三態門邏輯功能和使用方法,熟悉TTL中、小規模集成電路的外形、管腳和使用方法;掌握用三態門構成總線的特點和方法?;具壿嬮T實驗,選擇了典型的芯片,讓學生從芯片的外觀、封裝到邏輯關系的驗證來熟悉數字芯片;在接下來的三態門實驗中,邏輯的驗證就不是重點了,我們引導學生測量高阻輸出受鉗制的情況,讓他們在實驗中感性的體會三態的意義。
數據選擇器和譯碼器實驗:熟悉數據選擇器和譯碼器的邏輯功能。這種組合邏輯的實驗,我們更加強調應用而不是簡單驗證。時序邏輯的實驗也是一樣,有時候一次實驗做出多少個計數器并不重要,我們更加看重的是會不會分析設計電路,能不能記錄和分析時序圖。觸發器實驗:掌握RS觸發器、D觸發器、JK觸發器的工作原理,學會正確使用RS觸發器、D觸發器、JK觸發器。
簡單時序電路:掌握簡單時序電路的分析、設計、測試方法。計數器實驗:掌握計數器74LS162的功能,計數器的級連方法,熟悉任意模計數器的構成方法,熟悉數碼管的使用。在計數器和時序電路實驗中,我們還穿插了Workbench仿真試驗,并且指導學生用仿真軟件指導設計和完成測試。我們在時代性實驗中,在系統編程ISP技術的實驗內容:用兩個時間單元完成AHDL實現三八譯碼器、十進制計數器和七段譯碼器實驗,芯片選用ISP1032,軟件平臺用isp EXPER,鼓勵學生采用多種方案實現。
2.實驗教學方式的改革和實踐效果 在實驗教學中,我們拋棄了過去的粉筆黑板灌輸式的教學方式,嘗試了多種
手段結合的互動式教學模式。首先,我們在總結大家教學經驗的基礎上統一了實驗PPT教案(如圖二所示),采用了PPT投影為主和老師即興板書為輔的授課形式,一改過去落后的教學方式,圖形界面美觀并且講解更為方便,也收到良好的教學效果。
圖 二
然后,我們指導做畢業設計的學生完成實驗課件的Flash動畫設計(如圖三所示),連同PPT教案放到FTP服務器上提供學生下載,學生在實驗課前就可以完成對實驗系統和實驗內容的預習,并且對實驗的流程有一個直觀的了解。
圖 三
在實驗指導上,我們也做了很多嘗試。在學生做數字邏輯實驗的第一天起,就告訴他們實驗不是簡單對理論的驗證,而是以培養數字系統硬件工程師的標準去要求,除了知識的學習,實驗更看中的是能力的培養。首先,對實驗系統的所有調試工具:示波器、邏輯筆等必須熟練掌握;每一次實驗前要求下載相關芯片手冊,對芯片每一個功能引腳都要求了解;在時序邏輯實驗中,要求繪制并分析時序圖;能使用防真軟件輔助小型綜合電路的設計;在系統可編程系統實驗中,鼓勵以不同方案完成設計。在驗收和給成績的時候,我們看的不僅僅是實驗內容的正確完成,更多考慮的是工具是否熟練使用、設計方案是否靈活多樣等等個人能力。
對于實驗中遇到的問題,教師可結合自身教學和科研經驗,盡量給出詳盡并且特別的解答,比如在三態門實驗中,學生對高阻態和總線方式提出疑問時,除了講解概念之外,還給他們舉了一個科研中的實例:在我們做CDMA基站測試系統硬件設計時,由于譯碼和讀寫信號設計錯誤,CPU訪問存儲單元數據總線嚴重沖突造成死機。在講解時序芯片由于工藝限制導致信號延時的時候,用一次科研實例:一個特別信號需要延時幾納秒而系統時鐘只有4兆赫茲,設計人員利用EPLD芯片自身延時將信號進出芯片兩次,巧妙的解決了問題,讓學生在硬件實驗中學會逆向思維去解決問題。
多樣化的教學手段的應用以及更新更特別的教學方式,讓學生在數字邏輯實驗中不僅鍛煉了能力,更重要的是找到了學習的樂趣。在實驗結束后,很多同學不愿離開實驗室,而是熱烈地討論和試驗更多不同方案,我們贊同這種腦力激蕩的方式,畢竟求知的樂趣和熱情是非常難能可貴的,這也是我們實驗教學的目標。
3.一個典型的實驗范例
我們加大了在系統編程ISP系統實驗的數量,讓學生用AHDL語言實現三八譯碼器、十進制計數器和七段譯碼器,在實驗中鼓勵他們設計不同的方案,比較分析不同方案的優缺點,也給他們講解一些設計的技巧。比如使用中間變量邏輯結構,能夠簡化邏輯表達式,從而減少適配器的工作量和運行時間,增加適配成功率同時減少芯片資源占用率。在實驗中,學生的完成情況給我們以很大的驚喜。下面以最后一次ISP實驗為例。
實驗要求:學生獨立設計一位十進制計數器七段數字顯示系統,如圖四所示。計數器是8421BCD碼同步計數器,其輸出Q3—Q0作為七段譯碼器的輸入,譯碼器的輸出送到七段發光二極管顯示器,它能顯示0,2,??9十個字符。采用ABEL-HDL語言設計并寫出完整的設計源程序,并在實驗臺的數碼管上進行演示。
圖 四
這個實驗非常典型,既有時序邏輯,又有組合邏輯。不少學生在實驗中作出了創新嘗試,采用了多種方案:涉及邏輯方程法、真值表法、狀態圖法。由于設計中包含了計數器和譯碼器兩個模塊,各種方法又有不同的設計方案,很多同學一個人就做了多種方案,表現了很高的興趣和設計熱情。下面選取了有特點的5種方案:方案一至方案三中的十進制計數器設計方法大致相同,而譯碼器設計采用了邏輯方程和真值表法,而方案二和三又用了真值表的不同表達方式;方案四和五同是狀態圖法,表達方式也不相同。充分表現了ABEL-HDL語言設計數字邏輯電路的靈活性和多樣性。方案一
MODULE count1 TITLE 'count1' DECLARATIONS
clock,clear PIN;q3,q2,q1,q0 NODE ISTYPE 'reg';ya,yb,yc,yd,ye,yf,yg PIN ISTYPE 'com';count=[q3..q0];EQUATIONS
count.clk=clock;count.clr=clear;
count:=(count+1)&!(count==9);
yg=!(count==0)&!(count==1)&!(count==7);
yf=!(count==1)&!(count==2)&!(count==3)&!(count==7);
ye=!(count==1)&!(count==3)&!(count==4)&!(count==5)&!(count==7)&!(count==9);yd=!(count==1)&!(count==4)&!(count==7)&!(count==9);yc=!(count==2);
yb=!(count==5)&!(count==6);
ya=!(count==1)&!(count==4)&!(count==6);END count1
方案二
方案三 MODULE count2 TITLE 'count2' DECLARATIONS
clock,clear PIN;
q0,q1,q2,q3 NODE ISTYPE 'reg';
a,b,c,d,e,f,g PIN ISTYPE 'com';q=[q3..q0];EQUATIONS q.clk=clock;q:=(q+1)&(q!=9);q.clr=clear;TRUTH_TABLE
(q->[a,b,c,d,e,f,g]);0->[1,1,1,1,1,1,0];1->[0,1,1,0,0,0,0];2->[1,1,0,1,1,0,1];3->[1,1,1,1,0,0,1];4->[0,1,1,0,0,1,1];5->[1,0,1,1,0,1,1];6->[0,0,1,1,1,1,1];7->[1,1,1,0,0,0,0];8->[1,1,1,1,1,1,1];9->[1,1,1,0,0,1,1];
MODULE count3 TITLE 'count3' DECLARATIONS
clock,clear PIN;
q0,q1,q2,q3 NODE ISTYPE 'reg';
a,b,c,d,e,f,g PIN ISTYPE 'com';q=[q3..q0];EQUATIONS q.clk=clock;q:=(q+1)&!(q==9);q.clr=clear;TRUTH_TABLE
([q3..q0]->[a,b,c,d,e,f,g]);[0,0,0,0]->[1,1,1,1,1,1,0];[0,0,0,1]->[0,1,1,0,0,0,0];[0,0,1,0]->[1,1,0,1,1,0,1];[0,0,1,1]->[1,1,1,1,0,0,1];[0,1,0,0]->[0,1,1,0,0,1,1];[0,1,0,1]->[1,0,1,1,0,1,1];[0,1,1,0]->[0,0,1,1,1,1,1];[0,1,1,1]->[1,1,1,0,0,0,0];[1,0,0,0]->[1,1,1,1,1,1,1];[1,0,0,1]->[1,1,1,0,0,1,1];
END count2 方案四
MODULE count4 DECLARATIONS clock PIN;
g, f, e, d, c, b, a PIN;y = [g, f, e, d, c, b, a ];q0,q1,q2,q3 node istype 'reg';count=[q3,q2,q1,q0];
state0 = [0,0,0,0];state1 = [0,0,0,1];state2 = [0,0,1,0];state3 = [0,0,1,1];state4 = [0,1,0,0];state5 = [0,1,0,1];state6 = [0,1,1,0];state7 = [0,1,1,1];state8 = [1,0,0,0];state9 = [1,0,0,1];EQUATIONS
count.CLK = clock;STATE_DIAGRAM [q3,q2,q1,q0 ] STATE state0 :y= ^B0111111;goto state1;STATE state1 :y= ^B0000110;goto state2;STATE state2 :y= ^B1011011;goto state3;
END count3
方案五
MODULE count5 DECLARATIONS clock PIN;
a, b, c, d, e, f, g PIN ISTYPE 'REG';COUNT = [g, f, e, d, c, b, a ];
EQUATIONS
COUNT.CLK = clock;
STATE_DIAGRAM [g, f, e, d, c, b, a ] STATE ^B0000000 : GOTO ^B0111111;STATE ^B0111111 : GOTO ^B0000110;STATE ^B0000110 : GOTO ^B1011011;STATE ^B1011011 : GOTO ^B1001111;STATE ^B1001111 : GOTO ^B1100110;STATE ^B1100110 : GOTO ^B1101101;STATE ^B1101101 : GOTO ^B1111101;STATE ^B1111101 : GOTO ^B0000111;STATE ^B0000111 : GOTO ^B1111111;STATE ^B1111111 : GOTO ^B1101111;STATE ^B1101111 : GOTO ^B0111111;END count5
STATE state3 :y= ^B1001111;goto state4;STATE state4 :y= ^B1100110;goto state5;STATE state5 :y= ^B1101101;goto state6;STATE state6 :y= ^B1111101;goto state7;STATE state7 :y= ^B0000111;goto state8;STATE state8 :y= ^B1111111;goto state9;STATE state9 :y= ^B1101111;goto state0;END count4
課程設計部分
課程設計的目的是學習運用ISP(在系統編程)技術進行設計和調試的基本步驟和方法,熟悉集成開發軟件中設計,模擬調試工具的使用,體會ISP技術相對于傳統開發技術的優點。通過課程設計的鍛煉,培養學生進行科學研究的獨立工作能力,取得工程設計與組裝調試的實踐經驗。
課程設計放在暑假中短學期進行,完全是開放性的,實驗室全天開放,教師只對學生的設計方案和調試方法提供指導,不限制設計思路。學生3人一組,團隊協同工作,在規定的兩周時間內,獨立完成四個設計課題并調試成功,由指導教師驗收。
1.課程設計內容
芯片選用ISP1032E(引腳圖見圖五),軟件平臺用isp EXPERT(如圖六所
示)。
圖 五 圖 六
課題一簡易電子琴:用ABEL語言設計一個電子琴。使用TDS-2或TEC-5實驗臺上的8個電平開關做琴鍵,電平開關輸出為高電平時相當于琴鍵按下,電平開關輸出為低電平時相當于琴鍵松開。電子琴共有C調的8個音:1,2,3,4,5,6,7和I,在TDS數字電路實驗臺上對設計進行調試,調試時用實驗臺上的小喇叭作發聲裝置。
課題二簡易頻率計:設計一個簡易的頻率計,用于測量1MHz以下數字脈沖信號的頻率。閘門只有1S一檔,測量結果在實驗臺上的6個數碼管顯示出來,不測信號脈寬,每次對被測信號計數前,計數器應清零。
課題三交通燈實驗:以實驗臺上的4個紅色電平指示燈、4個綠色電平指示燈和4個黃色電平指示燈模仿路口的東、西、南、北4個方向的紅、綠、黃交通燈??刂七@些指示燈,使它們按下列規律亮、滅:
1.初始狀態為4個方向的紅燈全亮,時間為1秒。
2.東、西方向綠燈亮,南、北方向紅燈亮。東、西方向通車。時間為5秒。3.東、西方向黃燈閃爍,南、北方向紅燈亮。時間2秒。
4.東、西方向紅燈亮,南、北方向綠燈亮。南北方向通車。時間5秒。5.東、西方向紅燈亮,南、北方向黃燈閃爍。時間2秒。6.返回2,繼續運行。
7.如果發生緊急事件,例如救護車、警車通過,則按下單脈沖按鈕,使得東、西、南、北四個方向紅燈亮,緊急事件結束后,松開單脈沖按鈕,恢復到被打斷的狀態繼續運行。
課題四電子鐘:設計實現一個電子鐘。電子鐘具有以下功能: 1.實驗臺上的6個數碼管顯示時、分、秒。2.能使電子鐘復位(清零)。3.能啟動或者停止電子鐘運行。
4.在電子鐘停止運行狀態下,能夠修改時、分、秒的值。5.具有報時功能,整點時喇叭鳴叫。
要求整個設計分為若干模塊,頂層模塊用原理圖設計,低層模塊用ABEL語言設計。在TDS-2或TEC-5實驗臺上調試設計。
2.完成情況分析
從2001-2005共五屆學生的課程設計情況來看,多數小組兩周時間能夠完成,其中優秀的小組一周多的時間就能全部調試驗收完成。四個設計課題涵蓋了計數、分頻、狀態轉移多種典型的內容,尤其最后一個電子鐘的實驗,要求學生用原理圖和ABEL語言用兩層結構,鍛煉了綜合設計的能力。學生在整個課程設計期間會出現很多錯誤:器件型號選錯、各種語法錯誤、設計疏漏引起的競爭和冒險等等,大家團隊合作解決問題的過程是非常有趣的經歷。學生在調試日志中寫道:
* 出現問題:在“停止-調表”狀態和計時狀態轉換時,數碼管顯示的數出現無規律地跳變,而且跳變時有時無。……原來在處理“停止-調表”狀態和計時狀態時存在競爭冒險,也就是這條語句:
SF.clk=(!V&!stop)#(!aset1&stop)……
終于找到根源所在!解決問題立即出臺!……從根本上解決了問題!
……把分鐘、小時鐘的模塊采取同樣的措施后,我們的電子鐘近乎完美!
* 實驗過程使我們對ABEL的應用有了更深入的認識,實驗的同時也增進了我們對ISPexpert軟件的熟悉程度。實驗的過程就是解決每一個問題的過程,每一個問題的解決,都讓我們對基本概念有了更為深入地理解。
課程設計的整個過程進一步鞏固和加深了《數字邏輯與數字系統》基本理論、概念的理解,提高了學生的動手能力和數字系統綜合設計能力,取得了非常好的實驗教學效果。但也發現了一些學生有拷貝現象,為此我們采取了相應的措施,如改換題目進行重做并嚴格打分;期末考試中加入了實驗部分的內容。
結語
在整個《數字邏輯與數字系統》課程的實驗教學工作中,我們不僅注重實驗設備、教材的更新,更注重實驗內容、教學方式的改革,將先進的手段和觀念引入教學。通過實驗,使學生鞏固加深數字邏輯與數字系統的理論知識,通過實踐進一步加強學生獨立分析問題和解決問題的能力、綜合設計及創新能力的培養,同時注意培養學生實事求是、嚴肅認真的科學作風和良好的實驗習慣,為今后科學研究工作打下良好的基礎。
第四篇:《系統設計與UML》課程教學大綱
課程名稱:系統分析與UML,System Analysis and UML 課程學科類別:工學 電氣信息類 學時與學分:48/3 先修課程:軟件工程,面向對象程序設計 課程教學目標:
1. 使學生了解面向對象的軟件分析與設計過程,掌握UML的語言、表示法及其應用。2. 熟練掌握支持UML的CASE軟件開發工具Rational Rose。
3. 能夠應用UML和Rational Rose對面向對象的軟件系統進行分析和設計。適用學科專業:計算機軟件、軟件工程、計算機科學與技術 教學手段與方法:面授 基本教學內容與學時安排:
? 軟件工程與面向對象建摸(4學時)
軟件開發方法概述 面向對象的系統分析與設計 面向對象建模 ? UML概覽(2學時)
UML的形成歷史 UML的結構、符號與圖形 UML建模簡單流程
? Rational Rose工具(3學時)
Rational Rose的架構 Rational Rose的安裝和使用 ? Use Case圖(3學時)
用例圖的概念 用例圖建模技術 ? 類圖與對象圖(3學時)
類圖的概念 類圖建模技術 對象圖 對象圖建模技術 ? 包圖(2學時)
包的概念 包之間的關系
? 狀態圖(3學時)
狀態機 狀態圖
狀態、事件、轉換 狀態圖建模技術 ? 活動圖(3學時)
活動圖的組成元素 活動的分解 活動圖建模技術 ? 時序圖(3學時)
時序圖的組成 對象的創建和撤銷 時序圖建模技術 ? 協作圖(3學時)
對象、鏈和消息 時序圖與協作圖的比較 時序圖與協作圖的互換 協作圖建模技術 ? 組件圖(2學時)
接口、依賴關系 組件圖建模技術 ? 配置圖(1學時)
節點、關聯關系 配置圖建模技術
? UML的擴展機制(3學時)
UML的體系結構 構造型、標記值、約束
用于業務建模的UML擴展 ? Rose的雙向工程(2學時)
雙向工程介紹 逆向工程
? UML與統一開發過程(3學時)軟件開發過程
第五篇:VHDL數字電路設計教程第六章習題答案
P6.1 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity chp6_1 is port(clk:in std_logic;
d_out:out std_logic_vector(5 downto 0));end;architecture bhv of chp6_1 is
signal count: std_logic_vector(5 downto 0);
signal temp: std_logic_vector(5 downto 0);begin
process(clk)
begin
if clk'event and clk='1' then
count<= count+1;
if count=“100000” then count<=“000000”;
end if;
end if;
end process;process(clk)
begin
if clk'event and clk='0' then
temp<=temp+1;
if temp=“0111111” then temp<=“000000”;
end if;end if;end process;
d_out<=count+temp;end;P6.3
solution1 library ieee;use ieee.std_logic_1164.all;entity chp6_3 is port(x:in std_Logic_vector(7 downto 1);
y:out std_logic_vector(2 downto 0));end;architecture bhv of chp6_3 is begin
process(x)
begin
if x(7)='1' then y<=“111”;
elsif x(6)='1' then y<=“110”;
elsif x(5)='1' then y<=“101”;
elsif x(4)='1' then y<=“100”;
elsif x(3)='1' then y<=“011”;
elsif x(2)='1' then y<=“010”;
elsif x(1)='1' then y<=“001”;
else y<=“000”;
end if;
end process;end;solution2 library ieee;use ieee.std_logic_1164.all;entity chp6_3_2 is generic(n:integer:=3);port(x:in std_logic_vector(2**n-1 downto 0);
y:out integer range 0 to 2**n-1);end;architecture bhv of chp6_3_2 is begin
process(x)
variable temp:integer range 0 to 2**n-1;
begin
for i in x'range loop
if x(i)='1' then
temp:=i;
exit;
end if;
end loop;
y<=temp;end process;end;P6.4
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity chp6_4 is generic(n:integer:=8);port(clk:in std_logic;
clk_out:out std_logic);end;architecture bhv of chp6_4 is signal rst:std_logic;signal temp:std_logic_vector(2 downto 0);begin process(clk,rst)begin
if rst='1' then
temp<=“000”;
elsif clk'event and clk='1' then
temp<=temp+1;
end if;end process;
rst<='1' when temp=“111” else
'0';
clk_out<=temp(2);end;P6.5
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity chp6_5 is generic(n:integer:=7);port(clk:in std_logic;
clk_out:out std_logic);end;architecture bhv of chp6_5 is signal temp:std_logic_vector(2 downto 0);signal cout:std_logic;begin process(clk)begin
if clk'event and clk='1' then
temp<=temp+1;
if temp=“110” then temp<=“000”;
end if;
end if;
end process;
cout<='1' when temp=“110” else
'0';
clk_out<=cout;end;P6.6
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity chp6_6 is
port(clk,start,stop,reset:in std_logic;
dig1,dig2,dig3:out std_logic_vector(3 downto 0));end;architecture bhv of chp6_6 is signal sec1:integer range 0 to 10;signal sec2:integer range 0 to 6;signal min:integer range 0 to 10;begin
process(clk,start, stop,reset)
variable count1:integer range 0 to 10;
variable count2:integer range 0 to 6;
variable count3:integer range 0 to 10;
begin
if reset='1' then
count1:=0;
count2:=0;
count3:=0;
elsif clk'event and clk='1' then
if start='1' and stop='0' then
count1:=count1+1;
if count1=10 then
count1:=0;count2:=count2+1;
if count2=6 then
count2:=0;count3:=count3+1;
if count3=10 then
count3:=0;
end if;
end if;
end if;
end if;
end if;
sec1<=count1;
sec2<=count2;
min<=count3;end process;
dig1<=conv_std_logic_vector(sec1,4);
dig2<=conv_std_logic_vector(sec2,4);
dig3<=conv_std_logic_vector(min,4);end;P6.8 library ieee;use ieee.std_logic_1164.all;entity chp6_8 is generic(n:integer:=8);port(input:in std_logic_vector(n-1 downto 0);
output:out std_logic);end;architecture bhv of chp6_8 is begin
process(input)
variable temp:std_logic_vector(n-1 downto 0);
begin
temp(0):=input(0);
for i in 1 to n-1 loop
temp(i):=input(i)xor temp(i-1);
end loop;
output<=temp(n-1);end process;end;
P6.9 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity chp6_9 is
generic(n:integer:=4);
port(input:std_logic_vector(n-1 downto 0);
output:out integer range 0 to n);end;architecture bhv of chp6_9 is begin process(input)
variable temp:integer range 0 to n;begin
temp:=0;
for i in 0 to n-1 loop
if input(i)='1' then
temp:=temp+1;
end if;
end loop;
output<=temp;end process;end;P6.10 library ieee;use ieee.std_logic_1164.all;entity chp6_10 is generic(n:integer :=8);port(din:in integer range 0 to n-1;
dout:out std_logic_vector(n-1 downto 0));end;architecture bhv of chp6_10 is begin process(din)
begin
for i in 0 to n-1 loop
if din=i then dout<=(i=>'1', others=>'0');
end if;
end loop;
end process;end;P6.16
library ieee;use ieee.std_logic_1164.all;entity chp6_16 is generic(n:integer:=8);port(a,b:in std_logic_vector(n-1 downto 0);
cin:in std_logic;
s:out std_logic_vector(n-1 downto 0);
cout:out std_logic);end;architecture bhv of chp6_16 is signal carry:std_logic_vector(n downto 0);begin process(a,b,cin,carry)begin
carry(0)<=cin;
for i in 0 to n-1 loop
s(i)<=a(i)xor b(i)xor carry(i);
carry(i+1)<=(a(i)and b(i))or(a(i)and carry(i))or(b(i)and carry(i));
end loop;
cout<=carry(n);
end process;end;說明:本次答案均為課上討論過的,P6.11-P6.15均可參考第五章答案,可以利用對應語句將其放入進程中。