第一篇:FPGA教學大綱
四 川 大 學 錦 城 學 院
本科課程《現(xiàn)場可編程邏輯門陣列FPGA》
電子類專業(yè)教學大綱
一、課程基本信息
課程名稱(中、英文):《現(xiàn)場可編程邏輯門陣列FPGA》, Field Programmable Gate Array 課程類別:必修專業(yè)課
學時:
學分:2
二、預前知識
數(shù)字電子技術(shù)基礎(chǔ)
三、課程目的及要求
1.了解FPGA的應用場合、發(fā)展歷程、主要廠家。2.熟悉典型FPGA的基本結(jié)構(gòu)。
3.掌握FPGA設(shè)計流程及其中涉及到的重要概念與工具軟件。4.熟練掌握可綜合的Verilog語法語句。
5.掌握常用的基本電路結(jié)構(gòu),并能用Verilog語言進行描述。
四、教學內(nèi)容及進度
第1章 課程簡介(本章2課時)
掌握FPGA的概念、用途及生產(chǎn)廠家,掌握FPGA的學習方法。重點:FPGA的學習方法 難點:芯片可編程的理解 1.什么是FPGA 2.FPGA有何用途 3.為什么要學習FPGA 4.如何學習FPGA 第二章 可編程邏輯器件基礎(chǔ)(本章2課時)
掌握與或陣列及查找表用于實現(xiàn)邏輯函數(shù)的方法,了解基于與或陣列結(jié)構(gòu)可編程邏輯器件的發(fā)展歷程,掌握典型FPGA的基本結(jié)構(gòu)及使用上的特點,了解FPGA的發(fā)展趨勢。
重點:與或陣列及查找表用于實現(xiàn)邏輯函數(shù) 難點:典型FPGA的基本結(jié)構(gòu) 1.知識準備:與或陣列、查找表 2.可編程邏輯器件結(jié)構(gòu)發(fā)展歷程 3.FPGA結(jié)構(gòu)介紹
第3章 硬件描述語言基礎(chǔ)(本章2課時)
掌握硬件描述的思想,了解常用的硬件描述語言及Verilog的歷史,掌握可綜合的概念及對應的設(shè)計思路,掌握數(shù)字芯片系統(tǒng)結(jié)構(gòu)及自頂向下分層設(shè)計的方法,掌握Verilog描述程序的基本結(jié)構(gòu)及Verilog基本語法。
重點:數(shù)字芯片系統(tǒng)結(jié)構(gòu)及Verilog基本語法 難點:可綜合的理解
1.硬件描述語言及Verilog簡介 2.可綜合簡介
3.自頂向下分層設(shè)計的思路 4.Verilog基本語法
第4章 Verilog基本描述語句(本章4課時)
掌握常用的可綜合Verilog描述語句:always過程語句;串行塊begin-end;連續(xù)賦值 assign;過程賦值 =、<=;條件語句if-else、case;循環(huán)語句for 重點:常用的可綜合Verilog描述語句
難點:阻塞賦值與非阻塞賦值的區(qū)別,順序執(zhí)行與并發(fā)執(zhí)行的區(qū)分 1.always過程語句 2.串行塊begin-end 3.連續(xù)賦值 assign 4.過程賦值 =、<= 5.條件語句if-else、case 6.循環(huán)語句for 第5章 運算符及表達式(本章4課時)
掌握Verilog中注釋的格式;掌握Verilog中整數(shù)常量的表示法;掌握Verilog中常用的可綜合運算符的使用:邏輯運算符、關(guān)系運算符、相等與全等運算符、位運算符、歸約(縮減)運算符、移位運算符、條件運算符、連接(位拼接)運算符、算術(shù)運算符 重點:常用的可綜合運算符的使用
難點:各運算符的優(yōu)先級別及對有符號數(shù)和無符號數(shù)處理的差別 1.注釋的格式 2.整數(shù)常量表示法 3.邏輯運算符 4.關(guān)系運算符 5.相等與全等運算符 6.位運算符
7.歸約(縮減)運算符 8.移位運算符 9.條件運算符
10.連接(位拼接)運算符 11.算術(shù)運算符
第6章 基本電路設(shè)計(本章2課時)
掌握電路描述方法,掌握按端口位置對應及按端口名稱對應的模塊例 化方式,掌握常用基本電路的結(jié)構(gòu)及描述方法 重點:常用基本電路的結(jié)構(gòu)及描述方法
難點:按端口位置對應及按端口名稱對應的模塊例化方式
1.電路描述方法,按端口位置對應及按端口名稱對應的模塊例化方式 2.2選1多路選擇器 3.優(yōu)先編碼器 4.多路選擇器 5.譯碼器 6.D觸發(fā)器 7.移位寄存器 8.上升沿檢測 9.下降沿檢測 10.計數(shù)器
11.兩級單時鐘使能計數(shù)器結(jié)構(gòu)
第7章 有限狀態(tài)機設(shè)計(本章2課時)
掌握狀態(tài)機設(shè)計及描述方法,掌握起始狀態(tài)、剩余狀態(tài)的處理,掌握各狀態(tài)編碼方式之間的差別及各自的優(yōu)缺點。重點:狀態(tài)機設(shè)計及描述方法
難點:格雷碼及“one-hot”狀態(tài)值編碼 1.有限狀態(tài)機介紹及其優(yōu)點 2.狀態(tài)機設(shè)計思路 3.起始狀態(tài)處理 4.狀態(tài)編碼方式 5.剩余狀態(tài)與容錯技術(shù)
第8章 雙向端口及存儲器(本章2課時)
掌握雙向端口的定義及使用,掌握使用D觸發(fā)器組及調(diào)用庫單元實現(xiàn) 存儲器的描述方式。重點:存儲器的描述 難點:雙向端口的使用 1.雙向端口的定義及使用 2.存儲器描述方式
第9章 設(shè)計方法與技巧(本章4課時)
掌握可編程邏輯設(shè)計的基本原則,掌握可編程邏輯設(shè)計常用設(shè)計思想和技巧,掌握良好的編碼風格。重點:時鐘的最小周期定義 難點:流水線、寄存器配平1.可編程邏輯設(shè)計的基本原則 2.可編程邏輯設(shè)計常用設(shè)計思想和技巧 3.Altera公司推薦的編碼風格 4.面積優(yōu)化 5.速度優(yōu)化
五、教材
《CPLD/FPGA與ASIC設(shè)計實踐教程》 主編:陳 賾
編著:朱如琪、羅 杰、王建明、魯 放 出版社:科學出版社 出版日期:2005-8 書號:ISBN-978-7-03-016036-2/TP.332.1
六、主要參考資料
[1] 陳云洽,CPLD應用技術(shù)與數(shù)字系統(tǒng)設(shè)計,北京:電子工業(yè)出版社,2003 [2] 黃智偉,F(xiàn)PGA系統(tǒng)設(shè)計與實踐,北京:電子工業(yè)出版社,2005 [3] 李國麗,EDA與數(shù)字系統(tǒng)設(shè)計,北京:機械工業(yè)出版社,2004 [4] 王金明,數(shù)字系統(tǒng)設(shè)計與Verilog HDL,北京:電子工業(yè)出版社,2002
七、成績評定
學科成績總分100分:
期末閉卷考試,考查學生對基本理論、能力的掌握程度,100分,占70%
平時成績100分(包括考勤,課堂提問,作業(yè))占
30%
第二篇:教學大綱-FPGA及硬件描述語言
《FPGA與硬件描述語言》教學大綱
課程名稱:FPGA與硬件描述語言
英文名稱: FPGA and hardware description language 課程類別:實踐教學課 課程編號: 學
分: 4
學
時:68 課程簡介:
FPGA與硬件描述語言該課程主要講授數(shù)字邏輯電路的基本知識、基本理論和基本分析、設(shè)計方法,并利用現(xiàn)代EDA技術(shù)的verilog和Multisim進行數(shù)字邏輯電路分析與設(shè)計,它起到由專業(yè)基礎(chǔ)課向?qū)I(yè)課過渡的承上啟下的作用。本課程的教學任務是通過本課程的理論學習,使學生掌握有關(guān)數(shù)字邏輯的基本理論,熟悉數(shù)字邏輯電路基本器件的電路結(jié)構(gòu)、功能和使用方法,掌握數(shù)字邏輯電路的分析方法和設(shè)計方法。通過課堂教學演示環(huán)節(jié)及課程設(shè)計,使學生掌握利用Verilog和EDA工具進行數(shù)字邏輯電路設(shè)計的方法.課程內(nèi)容:
1.概論:EDA設(shè)計方法以及FPGA/CPLD特點 2.層次建模的概念 3.基本概念 4.模塊和端口 5.門級建模 6.數(shù)據(jù)流建模 7.行為級建模 8.任務與函數(shù) 9.實用建模技術(shù) 10.時序和延遲 11.開關(guān)級建模 12.用戶自定義原語 先修課程:《C語言程序設(shè)計》、《數(shù)字邏輯電路》 適用專業(yè):電子信息技術(shù)
教材(暫定):《Verilog HDL 數(shù)字設(shè)計與綜合》 作者:(美)Sanir Palnitkar,譯者: 夏宇聞 胡燕祥 刁嵐松
電子工業(yè)出版社
參考教材:
1、《Verilog HDL數(shù)字設(shè)計與綜合(第二版)》,電子工業(yè)出版社
夏宇聞
2、《電子工程師創(chuàng)新設(shè)計必備寶典系列之FPGA開發(fā)全攻略》,張國斌
3、《Verilong數(shù)字系統(tǒng)設(shè)計教程 》,北航出版社
夏宇聞
開課學院:信息技術(shù)學院
具體課程內(nèi)容與安排
第一章 概述
第一節(jié) 課程介紹
第二節(jié) 學習重點及學習方法
第三節(jié) EDA技術(shù)及發(fā)展與實現(xiàn)目標 第四節(jié) 硬件描述語言及IEEE標準 第五節(jié) EDA設(shè)計流程及優(yōu)點 第六節(jié) 常用EDA工具
第七節(jié) 電子設(shè)計自動化系統(tǒng)軟件與器件
第八節(jié) 數(shù)字系統(tǒng)設(shè)計方法
第九節(jié) 九節(jié) FPGA/CPLD的特點及發(fā)展
(一)采用多媒體,講解與演示相結(jié)合
(二)內(nèi)容及基本要求 主要內(nèi)容: 【重點掌握】:FPGA/CPLD的優(yōu)缺點,采用硬件描述語言(Verilog HDL)的設(shè)計流程。【掌握】:EDA設(shè)計流程方法及數(shù)字系統(tǒng)設(shè)計方法的比較和優(yōu)點,自頂向下的設(shè)計方法; 【了解】:EDA工具的發(fā)展以及特點,【一般了解】:EDA技術(shù)及發(fā)展
第二章 層次建模的概念
第一節(jié) 自底向上和自頂向下設(shè)計方法 第二節(jié) 模塊的基本概念 第三節(jié) 四種不同的描述方式 第四節(jié) 邏輯仿真的構(gòu)成
(一)采用多媒體,講解與演示相結(jié)合
(二)內(nèi)容及基本要求 主要內(nèi)容: 【重點掌握】:數(shù)字電路自頂向下設(shè)計方法以及模塊相關(guān)內(nèi)容的學習; 【難點】:自頂向下以及自底向上的設(shè)計思路;
第三章 verilog基本概念
第一節(jié) 模塊的結(jié)構(gòu) 第二節(jié) 數(shù)據(jù)類型及其常量和變量 第三節(jié) 運算符及表達式
(一)采用多媒體,講解與演示相結(jié)合
(二)內(nèi)容及基本要求
主要內(nèi)容:verilog基本語法和結(jié)構(gòu) 【重點掌握】:基本語法和概念以及詞法約定 【掌握】:各種數(shù)據(jù)類型 【了解】:系統(tǒng)任務和編譯指令 【一般了解】: 【難點】:各類寄存器數(shù)據(jù)類型
第四章 模塊和端口
第四節(jié)
模塊 第五節(jié)
端口列表 第六節(jié)
端口聲明
第四節(jié) 端口連接規(guī)則 第七節(jié)
端口與外部信號的連接 第八節(jié)
層次命名
(一)采用多媒體,講解與實驗相結(jié)合
(二)內(nèi)容及基本要求
主要內(nèi)容:verilog的模塊定義、組成部分以及端口列表以及聲明和端口連接。
【了解】:verilog標示符的層次引用 【重點掌握】:模塊各部分的定義和應用 【難點】:端口連接的命名規(guī)則
第五章 門級建模
第一節(jié)
門的類型 第二節(jié) 門延遲
(一)采用多媒體,講解與實驗相結(jié)合
(二)內(nèi)容及基本要求
主要內(nèi)容:verilog如何用門級對實際電路做硬件電路建模 【重點掌握】:門的類型與延遲,門級建模的具體設(shè)計電路 【掌握】: 上升、下降和關(guān)斷延遲 以及最小/典型/最大延遲 【難點】:門級建模的具體電路實現(xiàn)
第六章 數(shù)據(jù)流建模
第一節(jié) 連續(xù)賦值語句assign 第二節(jié) 延遲
第三節(jié) 表達式、操作符和操作數(shù) 第四節(jié) 操作符類型
(一)采用多媒體,講解與演示相結(jié)合
(二)內(nèi)容及基本要求
主要內(nèi)容:連續(xù)賦值語句以及使用數(shù)據(jù)流結(jié)構(gòu)對實際電路的數(shù)字電路建模?!局攸c掌握】:連續(xù)賦值的定義及應用;操作符的類型 【掌握】: 延遲的概念和應用 【難點】:用數(shù)據(jù)流語句設(shè)計電路,掌握門級建模與數(shù)據(jù)流建模的區(qū)別
第七章 行為級建模
第一節(jié) 結(jié)構(gòu)化過程語句 第二節(jié) 過程賦值語句 第三節(jié) 條件語句 第四節(jié) 多路分支語句
第五節(jié) 循環(huán)語句
第六節(jié) 順序塊和并行塊 第七節(jié) 生成塊
(一)采用多媒體,講解與實驗相結(jié)合
(二)內(nèi)容及基本要求
主要內(nèi)容:行為級建模的語法以及結(jié)構(gòu) 【重點掌握】: 在實際電路中進行行為級建模以及時序控制機制 【掌握】:行為級建模的語法和語句,always、initial,阻塞和非阻塞以及 4 過程性賦值語句。
【難點】:行為級建模的具體實現(xiàn)
第八章 結(jié)構(gòu)語句、系統(tǒng)任務、函數(shù)語句和顯示系統(tǒng)任務
第一節(jié) 結(jié)構(gòu)說明語句 第二節(jié) 任務和函數(shù)語句 第三節(jié) 其他任務和函數(shù)語句
(一)采用多媒體,講解與演示相結(jié)合
(二)內(nèi)容及基本要求
主要內(nèi)容:任務與函數(shù)的定義 區(qū)別以及應用 【重點掌握】:任務和函數(shù)語句的使用 【掌握】: 模塊、任務、函數(shù)和命名塊定義和聯(lián)系,任務與函數(shù)所需要的條件。
【難點】:任務和函數(shù)語句的使用
第九章 實用建模技術(shù)
第一節(jié) 過程連續(xù)賦值 第二節(jié) 改寫(覆蓋)參數(shù)
第三節(jié) 條件編譯和執(zhí)行 第四節(jié) 時間尺度
第五節(jié) 常用的系統(tǒng)任務
(一)采用多媒體,講解與演示相結(jié)合
(二)內(nèi)容及基本要求 主要內(nèi)容: 【重點掌握】:assign deassign force 和release的定義和使用 【掌握】:在模塊調(diào)用時用defparam語句重新定義參數(shù)值 【了解】:認識和理解系統(tǒng)任務,如文件輸出、顯示層次、選通顯示、隨機數(shù)生成、存儲器初始化和值變轉(zhuǎn)儲等系統(tǒng)任務 【一般了解】: 【難點】: 條件編譯和verilog描述部件的執(zhí)行。
第十章 時序和延遲
第一節(jié) 延遲模型 第二節(jié) 路徑延遲建模 第三節(jié) 時序檢查
第四節(jié) 延遲反標注
(一)采用多媒體,講解與演示相結(jié)合
(二)內(nèi)容及基本要求 主要內(nèi)容: 【重點掌握】:如何在仿真過程中用specify塊設(shè)置路徑延遲 【掌握】:延遲模型的類型和定義 【了解】:時序檢查定義系統(tǒng)任務 【一般了解】: 延遲反標注 【難點】: 路徑延遲建模的連接
第十一章 開關(guān)級建模
第一節(jié):開關(guān)級建模元件
主要內(nèi)容:開關(guān)級建模的基本知識 【一般了解】:僅作大概了解 【難點】:
第十二章 用戶自定義原語
第一節(jié):UDP的基本知識 第二節(jié):表示組合邏輯的UDP 第三節(jié):表示時序邏輯的UDP 第四節(jié):UDP表中的縮寫符號 第五節(jié):UDP設(shè)計指南 主要內(nèi)容:
【重點掌握】編寫時序和組合邏輯UDP: 【難點】:UDP設(shè)計的原則以及與門級建模的區(qū)別
第十三章 編程語言接口 第一節(jié):PLI的使用
第二節(jié):PLI任務的連接和調(diào)用 第三節(jié):內(nèi)部數(shù)據(jù)表示 第四節(jié):PLI庫子程序 主要內(nèi)容: 【重點掌握】:如何在仿真中使用任務和函數(shù) 【難點】:用戶如何創(chuàng)建自定義系統(tǒng)任務和函數(shù),6 第十四章 使用vrilog進行邏輯綜合
第一節(jié):什么是邏輯綜合
第二節(jié):邏輯綜合對數(shù)字設(shè)計行業(yè)的影響 第三節(jié):verilogHDL綜合 第四節(jié):邏輯綜合流程 第五節(jié):門級網(wǎng)表的驗證 第六節(jié):邏輯綜合建模技巧 第七節(jié):時序電路綜合舉例
主要內(nèi)容:了解邏輯綜合的方法和問題。【了解】:邏輯綜合編寫RTL的技巧 【一般了解】: 邏輯綜合的概念和優(yōu)點 【重點掌握】:可綜合的結(jié)構(gòu)和操作符以及邏輯綜合的最佳門級網(wǎng)表分隔技術(shù) 【難點】:使用邏輯綜合進行組合電路和時序電路的設(shè)計
三、課程考核
(一)基本要求及比例:考試是對學生掌握知識水平的檢驗,重點掌握內(nèi)容占考試內(nèi)容的70%、掌握內(nèi)容占20%、了解及一般了解內(nèi)容占10%。
(二)成績構(gòu)成與說明: 總評成績 =平時學習表現(xiàn)(10%)+上機實驗(20%)+實訓項目(20%)+期末考試成績(50%)
期末考試:
考試形式:上機閉卷考試 時間長度(120分鐘)
制定人:賈政亞
審定人:
批準人:
日
期: 2014年10月1日
第三篇:FPGA學習心得
回想起自己學FPGA,已經(jīng)有一段時間了,從開始的茫然,到后來的瘋狂看書,設(shè)計開發(fā)板,調(diào)電路,練習各種FPGA實例,到最后能獨立完成項目,一路走來,感受頗多,拿出來和大家分享,順便介紹下自己的一點經(jīng)驗所得,希望對初學者有所幫助。
廢話不說了,下面進入正題,學習FPGA我主要經(jīng)歷了這么幾個階段:
①、Verilog語言的學習,熟悉Verilog語言的各種語法。
②、FPGA的學習,熟悉QuartusII軟件的各種功能,各種邏輯算法設(shè)計,接口模塊(RS232,LCD,VGA,SPI,I2c等)的設(shè)計,時序分析,硬件優(yōu)化等,自己開始設(shè)計簡單的FPGA板子。
③、NiosII的學習,熟悉NiosII的開發(fā)流程,熟悉開發(fā)軟件(SOPC,NiosII IDE),了解NiosII的基本結(jié)構(gòu),設(shè)計NiosII開發(fā)板,編寫NiosII C語言程序,調(diào)試板子各模塊功能。
先來說說第一個階段,現(xiàn)在主要的硬件描述語言有VHDL,Verilog兩種,在本科時老師一般教VHDL,不過現(xiàn)在
Verilog用的人越來越多,其更容易上手(與C語言語法比較類似),也更靈活,現(xiàn)在的IC設(shè)計基本都用Verilog。像systemC,systemVerilog之類的應該還在萌芽階段,以后可能會有較大發(fā)展。鑒于以上原因我選擇了Verilog作為我學習的硬件描述語言。
其實有C語言的基礎(chǔ),學起Verilog的語言很簡單,關(guān)鍵要有并行的概念,所有的module,assign,always都是并行的,這一點與軟件語言有明顯不同。這里推薦幾本評價比較好的學習Verilog的書籍:
①、《verilog 數(shù)字系統(tǒng)設(shè)計教程》,這本書對于入門是一本很好的書,通俗易懂,讓人很快上手,它里面的例子也不錯。但本書對于資源優(yōu)化方面的編程沒有多少涉及到。
②、《設(shè)計與驗證Verilog HDL》,這本書雖然比較薄,但是相當精辟,講解的也很深入,很多概念看了這本書有種豁然開朗的感覺,呵呵。
學習Verilog其實不用看很多書,基本的語法部分大家都一樣,關(guān)鍵是要自己會靈活應用,多做練習。
Verilog語言學了一段時間,感覺自己可以編點東西,希望自己編的程序在板子上運行看看結(jié)果,下面就介紹我學習的第二個階段。
剛開始我拿了實驗室一塊CPLD的開發(fā)板做練習,熟悉QuartusII的各種功能,比如IP的調(diào)用,各種約束設(shè)置,時序分析,Logiclock設(shè)計方法等,不過做到后面發(fā)現(xiàn)CPLD的資源不太夠(沒有內(nèi)嵌的RAM、不能用SignalTapII,LE太少等),而實驗室沒有FPGA開發(fā)板,所以就萌生了自己做FPGA開發(fā)板的意圖,剛好Cadence我也學的差不多了,就花了幾天時間主要研究了FPGA配置電路的設(shè)計,在板子上做了Jtag和AS下載口,在做了幾個用戶按鍵和LED,其他的口全部引出作為IO口,電路比較簡單,板子焊好后一調(diào)就通了(心里那個爽啊...)。我選的FPGA是cycloneII系列的EP2C5,資源比以前的FPGA多了好幾倍,還有PLL,內(nèi)嵌的RAM,可以試試SignalTapII,用內(nèi)嵌的邏輯分析儀測試引腳波形,對于FPGA的調(diào)試,邏輯分析儀是至關(guān)重要的。利用這塊板子我完成了項目中的幾個主要功能:RS232通信,指令譯碼,配置DDS,AD數(shù)據(jù)高速緩存,電子開關(guān)狀態(tài)設(shè)置等,在實踐中學習起來真的比平時快很多,用到什么學什么動力更大。這個時候我主要看的數(shù)據(jù)有這幾本感覺比較好:
①、《Altera FPGA/CPLD 設(shè)計(基礎(chǔ)篇)》:講解一些基本的FPGA設(shè)計技術(shù),以及QuartusII中各個工具的用法(IP,RTL,SignalProbe,SignalTapII,Timing Closure Floorplan,chip Editor等),對于入門非常好。
②、《Altera FPGA/CPLD 設(shè)計(高級篇)》:講解了一些高級工具的應用,LogicLock,時序約束很分析,設(shè)計優(yōu)化,也講述了一些硬件編程的思想,作為提高用。
③、《FPGA設(shè)計指南--器件,工具和流程》:這本書看了他的目錄忍不住就買了,這本書講述了FPGA設(shè)計的各個方面,雖然每個方面都是點到為止,但能讓你有個整體的概念,了解FPGA的所有設(shè)計功能,了解FPGA開發(fā)的整個流程。
④、在這里也推薦幾個學習FPGA比較好的論壇
http://www.tmdps.cnt信號控制著w_fifo_rden、aes_ready等信號,是該模塊的關(guān)鍵信號,通過將它們之間的時序關(guān)系通過時序圖反應出來,寫代碼時就可以做到胸有成竹,減少出現(xiàn)邏輯混亂的情況。
聽起來似乎很簡單,但是執(zhí)行起來卻不容易,因為畫波形圖是一件很煩鎖的事(有一次一個模塊因為操作比較多我畫了8張時序圖)。但是請相信我,如果不這樣做,因為時序關(guān)系沒有處理好引起設(shè)計多次迭代所花的時間遠多于畫波形圖的時間。
時序設(shè)計好之后,模塊內(nèi)部各個信號之間的關(guān)系就理得差不多了,之后就是將它翻譯成代碼了,這個過程以體力勞動為主,我就不多說了。
補充一下,畫波形圖推薦用TimingDesigner這個軟件,如果有更好的,請告訴我,我也不喜歡TimingDesigner:)。
另一個就是約束。
這里的約束是針對綜合軟件和布局布線軟件而言的。
為什么會有約束這個東西出現(xiàn)呢?主要原因是EDA軟件比較笨,難以明白我們的心思,如果我們不把更詳細的信息告訴它的話它就干不好活,比如需要將輸出寄存器放的與輸出管腳近一點,如果不加約束,EDA軟件可能布通之后就不管了,導致Tco狂大,一點也不善解人意。所以我們需要約束這個東西,告訴EDA軟件要怎么干活,工程驗收的標準又是什么。
在加約束之前,我們首先要定義一些術(shù)語好告訴EDA軟件我們想干什么,這些術(shù)語便是Fmax、Tsu、Tco等等這些東西。這些東西的含義這里就不多說了,網(wǎng)上的討論已經(jīng)很多了。
有了術(shù)語,還要有一種通信方式與EDA軟件通信,腳本語言充當了這一角色。不過現(xiàn)在像quartus這類軟件做的比較智能化了,提供了圖形化界面,但是這背后支撐的還是些腳本語言,大家可以用UltraEdit打加*.qsf文件去看看我們加的約束用腳本語言是怎么寫的。在加了約束之后,EDA工具就可以更好地按照我們的意愿去干活了,比較我們加了Fmax的約束,它就會盡可能地將關(guān)鍵路徑放的靠近一些,以提高電路工作頻率。當然,這是有代價的,尋找路徑是需要時間的,要求越苛刻,時間花的越多,因此加約束的原則的適用就行。如果約束加的過高,就相當于讓EDA工具去做一件不可能完成的事,找更短的路徑的時候說不定找著找著就掉下懸崖了,效果反而更差。
雖然有約束這個好東西,不過提醒一下,在項目之前千萬對它抱有太多的幻想,把希望寄托在別人的身上并不是每一次都很可靠的,出了問題還是要麻煩自己,加約束只能做一些錦上添花的事情。所以,我們在做方案的時候就需要對關(guān)鍵路徑進行預估,要通過設(shè)計而不是約束解決這些問題。
第四篇:FPGA學習心得
回想起自己學FPGA,已經(jīng)有一段時間了,從開始的茫然,到后來的瘋狂看書,設(shè)計開發(fā)板,調(diào)電路,練習各種FPGA實例,到最后能獨立完成項目,一路走來,感受頗多,拿出來和大家分享,順便介紹下自己的一點經(jīng)驗所得,希望對初學者有所幫助。
廢話不說了,下面進入正題,學習FPGA我主要經(jīng)歷了這么幾個階段:
①、Verilog語言的學習,熟悉Verilog語言的各種語法。
②、FPGA的學習,熟悉QuartusII軟件的各種功能,各種邏輯算法設(shè)計,接口模塊(RS232,LCD,VGA,SPI,I2c等)的設(shè)計,時序分析,硬件優(yōu)化等,自己開始設(shè)計簡單的FPGA板子。
③、NiosII的學習,熟悉NiosII的開發(fā)流程,熟悉開發(fā)軟件(SOPC,NiosII IDE),了解NiosII的基本結(jié)構(gòu),設(shè)計NiosII開發(fā)板,編寫NiosII C語言程序,調(diào)試板子各模塊功能。
先來說說第一個階段,現(xiàn)在主要的硬件描述語言有VHDL,Verilog兩種,在本科時老師一般教VHDL,不過現(xiàn)在Verilog用的人越來越多,其更容易上手(與C語言語法比較類似),也更靈活,現(xiàn)在的IC設(shè)計基本都用Verilog。像systemC,systemVerilog之類的應該還在萌芽階段,以后可能會有較大發(fā)展。鑒于以上原因我選擇了Verilog作為我學習的硬件描述語言。
其實有C語言的基礎(chǔ),學起Verilog的語言很簡單,關(guān)鍵要有并行的概念,所有的module,assign,always都是并行的,這一點與軟件語言有明顯不同。這里推薦幾本評價比較好的學習Verilog的書籍:
①、《verilog 數(shù)字系統(tǒng)設(shè)計教程》,這本書對于入門是一本很好的書,通俗易懂,讓人很快上手,它里面的例子也不錯。但本書對于資源優(yōu)化方面的編程沒有多少涉及到。
②、《設(shè)計與驗證Verilog HDL》,這本書雖然比較薄,但是相當精辟,講解的也很深入,很多概念看了這本書有種豁然開朗的感覺,呵呵。
學習Verilog其實不用看很多書,基本的語法部分大家都一樣,關(guān)鍵是要自己會靈活應用,多做練習。
Verilog語言學了一段時間,感覺自己可以編點東西,希望自己編的程序在板子上運行看看結(jié)果,下面就介紹我學習的第二個階段。
剛開始我拿了實驗室一塊CPLD的開發(fā)板做練習,熟悉QuartusII的各種功能,比如IP的調(diào)用,各種約束設(shè)置,時序分析,Logiclock設(shè)計方法等,不過做到后面發(fā)現(xiàn)CPLD的資源不太夠(沒有內(nèi)嵌的RAM、不能用SignalTapII,LE太少等),而實驗室沒有FPGA開發(fā)板,所以就萌生了自己做FPGA開發(fā)板的意圖,剛好Cadence我也學的差不多了,就花了幾天時間主要研究了FPGA配置電路的設(shè)計,在板子上做了Jtag和AS下載口,在做了幾個用戶按鍵和LED,其他的口全部引出作為IO口,電路比較簡單,板子焊好后一調(diào)就通了(心里那個爽啊...)。我選的FPGA是cycloneII系列的EP2C5,資源比以前的FPGA多了好幾倍,還有PLL,內(nèi)嵌的RAM,可以試試SignalTapII,用內(nèi)嵌的邏輯分析儀測試引腳波形,對于FPGA的調(diào)試,邏輯分析儀是至關(guān)重要的。利用這塊板子我完成了項目中的幾個主要功能:RS232通信,指令譯碼,配置DDS,AD數(shù)據(jù)高速緩存,電子開關(guān)狀態(tài)設(shè)置等,在實踐中學習起來真的比平時快很多,用到什么學什么動力更大。這個時候我主要看的數(shù)據(jù)有這幾本感覺比較好:
①、《Altera FPGA/CPLD 設(shè)計(基礎(chǔ)篇)》:講解一些基本的FPGA設(shè)計技術(shù),以及QuartusII中各個工具的用法(IP,RTL,SignalProbe,SignalTapII,Timing Closure Floorplan,chip Editor等),對于入門非常好。
②、《Altera FPGA/CPLD 設(shè)計(高級篇)》:講解了一些高級工具的應用,LogicLock,時序約束很分析,設(shè)計優(yōu)化,也講述了一些硬件編程的思想,作為提高用。
③、《FPGA設(shè)計指南--器件,工具和流程》:這本書看了他的目錄忍不住就買了,這本書講述了FPGA設(shè)計的各個方面,雖然每個方面都是點到為止,但能讓你有個整體的概念,了解FPGA的所有設(shè)計功能,了解FPGA開發(fā)的整個流程。
④、在這里也推薦幾個學習FPGA比較好的論壇
⑤、其實最好的學習網(wǎng)站莫過于Altera的官方網(wǎng)站,不過很多人一看到英語就不想看,其實上面的英文很簡單,很多時候不敢看是因為對自己沒信心或心靜不下來看。不過官方網(wǎng)站上資料很多,剛開始可能會覺得資料安排的有點亂,不方便查找,以后有時間我列個資料的鏈接目錄,整理一下,方便大家查找。
到這里,自己最FPGA的學習有一段時間了,練習了很多實例,自己也編寫了不少程序,也有了一些項目經(jīng)驗,算是對FPGA有些了解了。在不斷的學習中發(fā)現(xiàn)FPGA不僅可以做邏輯設(shè)計,算法設(shè)計等,還能做嵌入式開發(fā),altera先后開發(fā)了Nios,NiosII兩款FPGA的嵌入式軟核,并有配套的軟件,剛開始看到這些我真是心中突然豁然開朗,學習真的是無止境,又一個全新的領(lǐng)域擺在我面前,我決定學習NiosII,要學就要學最好。
剛開始入門是很痛苦的,嵌入式設(shè)計需要從硬件到驅(qū)動到軟件全部熟悉,硬件系統(tǒng)問題還不是很大(以前做過單片機,DSP等MCU),處理器的架構(gòu)心里還有點數(shù),對于驅(qū)動和軟件工程,剛開始學習真的很頭痛。NiosII應該還算比較新的內(nèi)容(應該是2004年出的),國內(nèi)的書籍不算很多,網(wǎng)上這方面的資料也比較零碎,所以我就開始將Altera網(wǎng)站上這方面的資料系統(tǒng)的看一邊,這里推薦幾本網(wǎng)站上的handbook:
①、Embedded Design Handbook
②、Nios II Processor Reference Handbook
③、Nios II Software Developer's Handbook
④、Quartus II Handbook, Volume 4: SOPC Builder
⑤、Quartus II Handbook, Volume 5: Embedded Peripherals
看完這些handbook,總算基本明白整個架構(gòu),軟硬件設(shè)計方法,驅(qū)動的編寫等,感覺自己可以編一些嵌入式的程序了,不過雖然前面做的那塊ep2c5的板子支持NiosII系統(tǒng),不過對于嵌入式設(shè)計來說還是顯得單薄了一點,沒有SDRAM,F(xiàn)lash這兩個比較基本的模塊,Ep2C5內(nèi)嵌的RAM太小,程序?qū)懖淮?,而且每次總要絞盡腦汁優(yōu)化程序代碼大小,很多時候優(yōu)化了后函數(shù)功能會受到限制,不利于初學者,也不利于調(diào)試。所以到這里我有產(chǎn)生了自己做一塊Nios開發(fā)板的想法(直接買比較貴,自己做便宜,而且還能鍛煉自己,一舉兩得),通過借鑒其他開發(fā)板,選擇自己開發(fā)板上需要包含什么模塊,確定各個模塊使用什么芯片,閱讀各個芯片的datasheet,畫出原理圖并做出PCB圖,這塊板子我選的是
Ep2c8Q208,比上一塊資源又將近多了一倍,板子上還有以下模塊:SDRAM,F(xiàn)lash,EPCS4,RS232,USB,VGA,PS2,AD,DA,LCD等,滿足了一般開發(fā)板的配置要求。板子回來以后調(diào)試了四五天,(flash工作了,LCD顯示了,RS232通了,USB通了,AD,DA工作了,SDRAM正常了...),真是每天都有驚喜,每個模塊都編寫了NiosII軟件測試程序,調(diào)試硬件的時候?qū)浖倪\行也更熟悉了。在這次調(diào)試的過程中真的學到了很多,為此專門寫了好幾頁調(diào)試筆記,下次拿出來和大家一起分享?,F(xiàn)在硬件平臺有了,NiosII也了解的差不多了,終于可以自己編寫一些規(guī)模大一點的程序了。
以后的路還很長,不過也有很多驚喜在等著我們......
第五篇:FPGA常用術(shù)語
標題:FPGA常用術(shù)語
2010-05-13 11:16:29
FPGA常用術(shù)語
1:LCA(Logic Cell Array):邏輯單元陣列,內(nèi)部包括可配置邏輯模塊CLB(Configurable Logic Block)、輸出輸入模塊IOB(Input Output Block)和內(nèi)部連線(Interconnect)三個部分。
2: IOB(Input Output Block):可編程輸入輸出單元,為了便于管理和適應多種電器標準,F(xiàn)PGA的IOB被劃分為若干個組(bank),每個bank的接口標準由其接口電壓VCCO決定,一個bank只能有一種VCCO,但不同bank的VCCO可以不同。只有相同電氣標準的端口才能連接在一起,VCCO電壓相同是接口標準的基本條件。
3:CLB(Configurable Logic Block):可配置邏輯模塊,是FPGA內(nèi)的基本邏輯單元,每個CLB都包含一個可配置開關(guān)矩陣,此矩陣由4或6個輸入、一些選型電路(多路復用器等)和觸發(fā)器組成。在賽靈思公司公司的FPGA器件中,CLB由多個(一般為4個或2個)相同的Slice和附加邏輯構(gòu)成。
4:Slice:是賽靈思公司公司定義的基本邏輯單位,一個Slice由兩個4輸入的函數(shù)、進位邏輯、算術(shù)邏輯、存儲邏輯和函數(shù)復用器組成。
5:LUT(Look-Up-Table):查找表。本質(zhì)上就是一個RAM,目前FPGA中多使用4輸入的LUT,所以每一個LUT可以看成一個有4位地址線的 的RAM。
6:DCM(數(shù)字時鐘管理模塊):提供數(shù)字時鐘管理和相位環(huán)路鎖定。
7:BRAM(嵌入式塊RAM):塊RAM可被配置為單端口RAM、雙端口RAM、內(nèi)容地址存儲器(CAM)以及FIFO等常用存儲結(jié)構(gòu)。單片塊RAM的容量為18k比特,即位寬為18比特、深度為1024,可以根據(jù)需要改變其位寬和深度,但要滿足兩個原則:首先,修改后的容量(位寬 深度)不能大于18k比特;其次,位寬最大不能超過36比特。當然,可以將多片塊RAM級聯(lián)起來形成更大的RAM,此時只受限于芯片內(nèi)塊RAM的數(shù)量,而不再受上面兩條原則約束。