第一篇:FPGA芯片配置總結(jié)
FPGA芯片配置總結(jié)
[日期:2010-05-22 ] [來源:本站編輯 作者:佚名] [字體:大 中 小](投遞新聞)
1.FPGA器件有三類配置下載方式:主動配置方式(AS)和被動配置方式(PS)和最常用的(JTAG)配置方式。
AS由FPGA器件引導(dǎo)配置操作過程,它控制著外部存儲器和初始化過程,EPCS系列.如EPCS1,EPCS4配置器件專供AS模式,目前只支持Cyclone系列。使用Altera串行配置器件來完成。Cyclone期間處于主動地位,配置期間處于從屬地位。配置數(shù)據(jù)通過DATA0引腳送入 FPGA。配置數(shù)據(jù)被同步在DCLK輸入上,1個時鐘周期傳送1位數(shù)據(jù)。(見附圖)
PS則由外部計(jì)算機(jī)或控制器控制配置過程。通過加強(qiáng)型配置器件(EPC16,EPC8,EPC4)等配置器件來完成,在PS配置期間,配置數(shù)據(jù)從外部儲存部件,通過DATA0引腳送入FPGA。配置數(shù)據(jù)在DCLK上升沿鎖存,1個時鐘周期傳送1位數(shù)據(jù)。(見附圖)
JTAG接口是一個業(yè)界標(biāo)準(zhǔn),主要用于芯片測試等功能,使用IEEE Std 1149.1聯(lián)合邊界掃描接口引腳,支持JAM STAPL標(biāo)準(zhǔn),可以使用Altera下載電纜或主控器來完成。
FPGA在正常工作時,它的配置數(shù)據(jù)存儲在SRAM中,加電時須重新下載。在實(shí)驗(yàn)系統(tǒng)中,通常用計(jì)算機(jī)或控制器進(jìn)行調(diào)試,因此可以使用PS。在實(shí)用系統(tǒng) 中,多數(shù)情況下必須由FPGA主動引導(dǎo)配置操作過程,這時FPGA將主動從外圍專用存儲芯片中獲得配置數(shù)據(jù),而此芯片中fpga配置信息是用普通編程器將設(shè)計(jì)所得的pof格式的文件燒錄進(jìn)去。專用配置器件:epc型號的存儲器
常用配置器件:epc2,epc1,epc4,epc8,epc1441(現(xiàn)在好象已經(jīng)被逐步淘汰了)等
對于cyclone cycloneII系列器件,ALTERA還提供了針對AS方式的配置器件,EPCS系列.如EPCS1,EPCS4配置器件也是串行配置的.注意,他們只適用于cyclone系列.除了AS和PS等單BIT配置外,現(xiàn)在的一些器件已經(jīng)支持PPS,F(xiàn)PS等一些并行配置方式,提升配置了配置速度。當(dāng)然所外掛的電路也和PS有一些區(qū)別。還有處理器配置比如JRUNNER 等等,如果需要再baidu吧,至少不下十種。比如Altera公司的配置方式主要有Passive Serial(PS),Active Serial(AS),Fast Passive Parallel(FPP),Passive Parallel Synchronous(PPS),Passive Parallel Asynchronous(PPA),Passive Serial Asynchronous(PSA),JTAG等七種配置方式,其中Cyclone支持的配置方式有PS,AS,JTAG三種.對FPGA芯片的配置中,可以采用AS模式的方法,如果采用EPCS的芯片,通過一條下載線進(jìn)行燒寫的話,那么開始的“nCONFIG,nSTATUS”應(yīng)該上拉,要是考慮多種配置模式,可以采用跳線設(shè)計(jì)。讓配置方式在跳線中切換,上拉電阻的阻值可以采用10K
3,在PS模式下tip:如果你用電纜線配置板上的FPGA芯片,而這個FPGA芯片已經(jīng)有配置芯片在板上,那你就必須隔離纜線與配置芯片的信號.(祥見 下圖).一般平時調(diào)試時不會把配置芯片焊上的,這時候用纜線下載程序.只有在調(diào)試完成以后,才把程序燒在配置芯片中, 然后將芯片焊上.或者配置芯片就是可以方便取下焊上的那種.這樣出了問題還可以方便地調(diào)試.在AS模式下tip: 用過一塊板子用的AS下載,配置芯片一直是焊在板子上的,原來AS方式在用線纜對配置芯片進(jìn)行下載的時候,會自動禁止對FPGA的配置,而PS方式需要電路上隔離。
4,一般是用jtag配置epc2和flex10k,然后 epc2用ps方式配置flex10k.這樣用比較好.(這是我在網(wǎng)上看到的,可以這樣用嗎?懷疑中)望達(dá)人告知.5,下載電纜,Altera下的下載電纜分為byteblaster和byteblasterMV,以及ByteBlaster II,現(xiàn)在還
推出了基于USB-blaster.由于BB基本已經(jīng)很少有人使用,而USB-Blaster現(xiàn)在又過于昂貴,這里就說一下BBII和 BBMV的區(qū)別.BBII支持多電壓供電5.5v,3.3v,2.5v,1.8v;
BBII支持三種下載模式:AS,可對Altera的As串行配置芯片(EPCS系列)進(jìn)行編程PS,可對FPGA進(jìn)行配置
JTAG,可對FPGA,CPLD,即Altera配置芯片(EPC系列)編程而BBMV只支持PS和JTAG6,一般在做FPGA實(shí)驗(yàn)板,(如cyclone系列)的時候,用AS+JTAG方式,這樣可以用JTAG方式調(diào)試,而最后程序已經(jīng)調(diào)試無誤了后,再用 AS模式把程序燒到配置芯片里去,而且這樣有一個明顯的優(yōu)點(diǎn),就是在AS模式不能下載的時候,可以利用Quartus自帶的工具生成JTAG模式下可以利用jic文件來驗(yàn)證配置芯片是否已經(jīng)損壞,方法祥見附件.7.Altera的FPGA可以通過單片機(jī),CPLD等加以配置,主要原理是滿足datasheet中的時序即可,這里我就不多說了,有興趣的朋友可以看看下面幾篇文章,應(yīng)該就能夠明白是怎么回事了.8.配置時,quartus軟件操作部分:
(1).assignment-->device-->device&pin options-->選擇configuration scheme,configuaration mode,configuration device,注
意在不支持遠(yuǎn)程和本地更新的機(jī)器中configuration mode不可選擇,而configuration device中會根據(jù)不同的配置芯片產(chǎn)生pof文件,如果選擇自動,會選擇最小密度的器件和適合設(shè)計(jì)
(2).可以定義雙口引腳在配置完畢后的作用,在剛才的device&pin option-->dual-purpose pins-->,可以在配置完畢后繼續(xù)當(dāng)I/O口使用
(3).在general菜單下也有很多可鉤選項(xiàng),默認(rèn)情況下一般不做改動,具體用法參見altera configuration handbook,volume2,sectionII.(4)關(guān)于不同后綴名的文件的適用范圍:
sof(SRAM Object File)當(dāng)直接用PS模式下將配置數(shù)據(jù)下到FPGA里用到,USB BLASTER,MASTERBLASER,BBII,BBMV適用,quartusII會自動生成,所有其他的配置文件都是由sof生成的.pof(Programmer Object File)也是由quartusII自動生成的,BBII適用,AS模式下將配置數(shù)據(jù)下到配置芯片中
rbf(Raw Binary File)用于微處理器的二進(jìn)制文件.在PS,FPP,PPS,PPA配置下有用處
rpd(Raw Programing Data File)包含bitstream的二進(jìn)制文件,可用AS模式配置,只能由pof文件生成hex(hexadecimal file)這個就不多說了,單片機(jī)里很多
ttf(Tabular Text File)適用于FPP,PPS,PPA,和bit-wide PS配置方式
sbf(Serial Bitstream File)用PS模式配置Flex 10k和Flex6000的jam(Jam File)專門用于program,verigy,blank-check
參考鏈接:http:///news/2010-05/2141.htm
第二篇:FPGA芯片(技術(shù))發(fā)展現(xiàn)狀及應(yīng)用調(diào)研
FPGA芯片(技術(shù))發(fā)展現(xiàn)狀及應(yīng)用調(diào)研
1引言
1.1背景
1.2FPGA簡介
FPGA全稱是現(xiàn)場可編程門陣列(Field Programmable Gate Array),結(jié)構(gòu)是什么?
有哪些分類?
基本的作用?
1.3比較
MS 把 CPU,GPU,F(xiàn)PGA 和 ASIC 放在 Flexibility VS Efficiency的角度進(jìn)行對比,這個也是我們經(jīng)常使用的方法。再次強(qiáng)調(diào),靈活性(通用性)一定意味著效率的損失,反之亦然[2]
這幾個相比的優(yōu)缺點(diǎn)又各是什么
1.4國家戰(zhàn)略
中國從2006年到2020年實(shí)施的《國家中長期科學(xué)與技術(shù)發(fā)展規(guī)劃綱要》[3]中,明確指出重點(diǎn)領(lǐng)域中的第7條信息產(chǎn)業(yè)與服務(wù)業(yè),要重點(diǎn)發(fā)展集成電路及關(guān)鍵元器件。集成電路及芯片是計(jì)算機(jī)的核心部件,隨著中美兩國在科技上的競爭愈加激烈,為遏制我國電子信息產(chǎn)業(yè)向高端、核心領(lǐng)域發(fā)展,如中興華為大疆等高科技公司接連被美國制裁。實(shí)現(xiàn)核心技術(shù)和裝備的國產(chǎn)化和自主可控已上升到國家戰(zhàn)略層面。
FPGA國產(chǎn)化是實(shí)現(xiàn)集成電路國產(chǎn)化的重要一環(huán),同時也作為十二五核高基重大專項(xiàng)——千萬門FPGA設(shè)計(jì),2發(fā)展歷史
FPGA是PAL(可編程陣列邏輯)、GAL(通用陣列邏輯)、PLD(可編程邏輯器件)等可編程器件的基礎(chǔ)上發(fā)展起來的。
FPGA與ASIC(專用集成電路)、GPU(中央處理器)的比較
[5]ASIC芯片尺寸小、功能強(qiáng)、功耗低,但其設(shè)計(jì)復(fù)雜,并且由批量要求
FPGA價(jià)格較低廉,能現(xiàn)場編程,但體積大、能力有限且功耗比ASIC大
2.1起源
可編程電路發(fā)展歷程1、20世紀(jì)70年代 基于與或陣列的PLD(可編程邏輯器件)
特點(diǎn):結(jié)構(gòu)簡單,只能實(shí)現(xiàn)用少量乘積項(xiàng)表示的小規(guī)模電路2、1984年 Altera公司制造出紫外線可擦寫的EPLD
特點(diǎn):可重復(fù)編程3、1985年 Lattice公司制造出電可擦寫的GAL
特點(diǎn):設(shè)計(jì)靈活、高速、低功耗和改寫迅速方便等4、1985年 Xilinx公司制造出FPGA
特點(diǎn):結(jié)合PLD可編程性與MPGA(掩膜可編程門陣列)通用連線結(jié)構(gòu),因而具備可編程性和高邏輯密度。
中國FPGA技術(shù)的追趕歷程列出引用文獻(xiàn)
1、反向研制
2、正向研制
3、完備化的正向研制
據(jù)不完全統(tǒng)計(jì)顯示,國內(nèi)目前有以高云半導(dǎo)體、京微齊力、上海安路、紫光同創(chuàng)、AGM和上海復(fù)旦微電子等為代表的數(shù)家國產(chǎn)FPGA企業(yè)
國內(nèi)研究文獻(xiàn)大多從1992年開始出現(xiàn)FPGA技術(shù)的介紹
早先的介紹書籍 朱明程.FPGA 原理及應(yīng)用設(shè)計(jì)
復(fù)旦大學(xué)專用集成電路與系統(tǒng)國家重點(diǎn)實(shí)驗(yàn)室
2004研制10萬門針對數(shù)據(jù)通信的FPGA芯片“FDP100K”
成果轉(zhuǎn)化-復(fù)旦微電子企業(yè)
2.2
(1)(embedded)eFPGA(嵌入式現(xiàn)場可編程門電路)
eFPGA思想由2014年王成誠博士等人提出,作者隨后成立FlexLogix公司并將其商業(yè)化,(2)
2.3 FPGA的結(jié)構(gòu)[5]
采用邏輯單元陣列的新概念,包括可配置邏輯模塊(CLB)、輸入輸出模塊(IOB)和內(nèi)部連線三個部分
2.4 FPGA的設(shè)計(jì)流程
利用開發(fā)軟件和編程工具對器件進(jìn)行開發(fā)的過程,2.5 發(fā)展趨勢[5]
2003年文章指出幾點(diǎn)
1、大容量、低電壓、低功耗FPGA2、系統(tǒng)級高密度FPGA3、FPGA與ASIC相互融合4、動態(tài)可重構(gòu)FPGA
不僅在系統(tǒng)重新配置電路功能,而且在系統(tǒng)動態(tài)重構(gòu)電路邏輯,比如對于時序邏輯系統(tǒng),動態(tài)可重構(gòu)FPGA的意義在于其時序邏輯的發(fā)生不是通過調(diào)用芯片內(nèi)不同區(qū)域、不同邏輯資源來組合而成,而是通過對FPGA進(jìn)行局部或全局的芯片邏輯的動態(tài)重構(gòu)而實(shí)現(xiàn)的。
3發(fā)展現(xiàn)狀
2014年[6]
三種編程方式的對比
3.1 企業(yè)
兩大兩小
Xilinx、Intel(Altera)、Lattice、Microsemi
Altera(被Intel收購)和Xilinx
深耕eFPGA也有前兩個公司FlexLogic 和 QuickLogic
調(diào)研Xilinx公司產(chǎn)品系列
主流是28nm工藝,屬于芯片產(chǎn)業(yè)中絕大多數(shù)的產(chǎn)品制程,而且國內(nèi)上海微電子近年內(nèi)已經(jīng)突破28nm光刻機(jī)的研制,可以滿足大部分的芯片替代生產(chǎn)需求。
Xilinx公司在28nm制程上推出7系列的四大類型芯片,覆蓋低端中端高端市場,分別是Spartan系列(低端)、Artix系列(中低端)、Kintex(中高端)及Vertex系列(高端)產(chǎn)品。
系列 | 應(yīng)用 |
Spartan7 | 汽車消費(fèi)類應(yīng)用,傳感器融合人以及嵌入式視覺 |
Artix7 | 各類成本功耗敏感型應(yīng)用,軟件定義無線電、機(jī)器視覺照相及低端無線回傳 |
Kintex7 | 3G/4G無線、平板顯示器和video over IP解決方案 |
Vertex7 | 10G-100G聯(lián)網(wǎng)、便攜式雷達(dá)及ASIC原型設(shè)計(jì) |
在20nm工藝上推出UltraScale系列
3.2 行業(yè)分析
2021年在倪光南院士的電子信息產(chǎn)業(yè)發(fā)展建議中[4],整理了最新國產(chǎn)核心電子器件的研制進(jìn)展
4前景
4.1 應(yīng)用前景
4.2 前沿進(jìn)展
5總結(jié)
5.1優(yōu)缺點(diǎn)分析
5.2啟示
5.3可行的工作
由于FPGA與中央處理器的接口存在高延遲,高性能計(jì)算受限[1]
參考文獻(xiàn)
[1]馮園園,張倩.嵌入式FPGA技術(shù)發(fā)展現(xiàn)狀及啟示[J].集成電路應(yīng)用,2018, 35(08):1-4.[2]唐杉.可編輯門陣列FPGA在智慧云中的應(yīng)用案例分析[J].集成電路應(yīng)用.2018(01).[3]中華人民共和國國務(wù)院.國家中長期科學(xué)和技術(shù)發(fā)展規(guī)劃綱要(2006—2020年)[EB/OL].(2006-02-09)[2021-04-01].http://
[4]倪光南,朱新忠.自主可控關(guān)鍵軟硬件在我國宇航領(lǐng)域的應(yīng)用與發(fā)展建議[J].上海航天(中英文).2021, 38(03):30-34.[5]陸重陽,盧東華.FPGA 技術(shù)及其發(fā)展趨勢[J].微電子技術(shù),2003,31(01):5-7.[6]Yang Haigang, Zhang Jia, Zhang Jia,etc.REVIEW OF ADVANCED FPGA ARCHITECTURES AND TECHNOLOGIES[J].JOURNAL OF ELECTRONICS(CHINA).2014,31(5).
第三篇:常用芯片總結(jié)
常用芯片總結(jié)
1.音頻pcm編碼DA轉(zhuǎn)換芯片cirrus logic的cs4344,cs4334
4334是老封裝,據(jù)說已經(jīng)停產(chǎn),4344封裝比較小,非常好用。還有菲利譜的8211等。
2.音頻放大芯片4558,LM833,5532,此二芯片都是雙運(yùn)放。
3.244和245,由于244是單向a=b的所以只是單向驅(qū)動。而245是用于數(shù)據(jù)總線等雙向驅(qū)動選擇。同時245的封裝走線非常適合數(shù)據(jù)總線,它按照順序d7-d0。
4.373和374,地址鎖存器,5.max232和max202,max3232 TTL電平轉(zhuǎn)換
6.網(wǎng)絡(luò)接口變壓器。需要注意差分信號的等長和盡量短的規(guī)則。
7.amd29系列的flash,有bottom型和top型,主要區(qū)別是loader區(qū)域設(shè)置在哪里?bottom型的在開始地址空間,top型號的在末尾地址空間,我感覺有點(diǎn)反,但實(shí)際就是這么命名的。
8.74XX164,它是一個串并轉(zhuǎn)換芯片,可以把串行信號變?yōu)椴⑿行盘枺刂茢?shù)碼管顯示可以用到。
9.網(wǎng)卡控制芯片CS8900,ax88796,rtl8019as,dm9000ae當(dāng)然這些都是用在isa總線上的。24位AD:CS5532,LPC2413,ADS1240,ADS1241效果還可以儀表運(yùn)放:ITL114,不過據(jù)說功耗有點(diǎn)大
音頻功放:一般用LM368
音量控制IC: PT2257,Pt2259.PCM雙向解/編碼 :/ CW6691.cirruslogic公司比較多
2.4G雙工通訊IC CC2500
1.cat809,max809,這些是電源監(jiān)控芯片,當(dāng)?shù)陀谀骋浑妷阂院蟊热?.07v等出現(xiàn)一個100ms的低電平,實(shí)現(xiàn)復(fù)位功能。當(dāng)然這個要求是低復(fù)位。max810,cat810等就是出現(xiàn)一個100ms的高電平。還有一些復(fù)位芯片,既有高又有低復(fù)位輸出,同時還有帶手動觸發(fā)復(fù)位功能,型號可以查找一下。
2.pericom的pt7v(pi6cx100-27)壓控振蕩器,脈沖帶寬調(diào)制。
1、語音編解碼TP3054/3057,串行接口,帶通濾波。
2、現(xiàn)在用漢仁的網(wǎng)卡變壓器HR61101G接在RTL8019AS上,兼容的有VALOR的FL1012、PTT的PM24-1006M。
3、驅(qū)動LED點(diǎn)陣用串行TPIC6B595,便宜的兼容型號HM6B59
5交換矩正: mt 88168*16
雙音頻譯碼器: 35300
我們原來使用單獨(dú)的網(wǎng)絡(luò)變壓器,如常用的8515等。現(xiàn)在我們用YDS的一款帶網(wǎng)絡(luò)變壓器的RJ45接口。其優(yōu)點(diǎn):1.體積僅比普通的RJ45稍微大一點(diǎn)。
2.價(jià)格單買就6元,我覺得量稍微大點(diǎn)應(yīng)該在4-5左右或者更低。
3.連接比較方便只要把差分信號注意就可以了。
缺點(diǎn):用的人不多,不知道是因?yàn)槭切拢€是性能不好,我們用了倒沒什么問題。不過沒有做過抗雷擊等測試,我覺得既然YDS做了這樣的產(chǎn)品,性能應(yīng)該問題不大。我覺得最好再加一點(diǎn)典型電路的原理圖等。比如說網(wǎng)絡(luò)接口,串口232,485通訊,I2C級連,RAM連接,F(xiàn)LASH連接,電壓轉(zhuǎn)換,時鐘電路,打印接口電路,以及如何在沒有典型電路的時候,把芯片和已有系統(tǒng)有效連接等。首先要有開關(guān)電源需求,額定電流,功率,幾路輸出,主路設(shè)計(jì)等等如何測試其性能指標(biāo)達(dá)到要求。
便宜的液晶驅(qū)動芯片HT1621
要求一般的485芯片SN308
2CH375A USB主控芯片 南京沁恒的數(shù)據(jù)采集,我用tlc2543, AD7656,AD976
運(yùn)放OP27,很好用,經(jīng)受住時間考驗(yàn),連續(xù)3年
我介紹一下我現(xiàn)在用的光耦,就是光電隔離:
TLP521-1 TLP521-2 TLP521-4 線性光耦hcr210不錯
其實(shí)我只用過TLP521-1,很好用的,TLP521-2 的價(jià)格比 TLP521-1要貴兩倍多,不只為什么,恩 LED導(dǎo)通電流是小了一點(diǎn),它們由于速率有點(diǎn)低所以推薦高速光耦
6N1361M
6N13710M
單通道HDLC協(xié)議控制器:MT8952;
音頻放大器LM2904;
512k*8帶軟件保護(hù)可段/整片擦除的flah28SF040;
關(guān)于電壓轉(zhuǎn)換芯片的一點(diǎn)體會:AD7865做電機(jī)控制的使用很不錯,四路350K,14位精度,單電壓,+/-10V輸入,推薦使用AD7864的升級用。掉電保存可以選擇NVRAM,帶電池的,maxim有很多
74ALVC164245,電平轉(zhuǎn)換芯片,3.3V電平和5V電平總線接口用
74HCT14:復(fù)位隔離緩沖
ULN2003:達(dá)林頓輸出的驅(qū)動芯片,帶繼電器滅弧的二極管,驅(qū)動繼電器不錯
MAX708:復(fù)位芯片,帶高低電平和手動復(fù)位功能
CPU:雖然不推薦選用***貨,但是多一個選擇也不錯,SuperH系列的CPU性能不錯
1:usb控制器,cypress公司的cy7c63723,cy7c68013,63723是otp的建議初次搞usb接口的不要使用,調(diào)試起來很麻煩。
2:cpld,fpga用xilinx的型號很全
3:2.4g rf收發(fā)芯片nrf2401a
看門狗 813、705、706等
1、LI358/LM324 小信號放大器,通用型的當(dāng)然你要求太高就的另選了。
2、24C08/24C16 EEPROM 感覺還可以!
3、MPS3100
1,可做充電器的電壓升降的IC,SP34063,感覺使用起來還是聽方便的2,RF IC,NRF2401,NREF2402,還有功能更強(qiáng)的集成增強(qiáng)型8051內(nèi)核的好象是 NRF24E1,不過我沒用過
3,音頻功放TPA021
13.HT12D,是與“HT12E”對應(yīng)的解碼芯片。也有紅外的解碼芯片。
4.IRF640N,MOSFET,電力場效應(yīng)管
電能(ATT7022A、SA9904B)、壓力(PGA309)、溫度(DS18B20、K型熱電偶MAX6675)、濕度(SHT10)、液位(LM1042)、煙霧(NIS-09C+MC145018)、紅外(HS0001)、距離(TDC-GP1)、轉(zhuǎn)速(KM115-1),codec(AMBE-2000)、can(SJA1000)、gps(u-blox)、無線數(shù)傳(nRF905、nRF9e5)
cirruslogic--cs5460計(jì)量芯片,0.1級
ADE7758三相電力計(jì)量芯片0.5級
ATT7022三相電能計(jì)量芯片0.5級,可作多功能表
24bit的有AD7712AN
溫度傳感器:AD592CN,環(huán)境穩(wěn)定25度時精度,+/-0.5度
第四篇:FPGA高手總結(jié)
一個FPGA高手的總結(jié)
很早之前就想對這幾個月工作經(jīng)歷寫的東西,一是作為自己的總結(jié),二是自己也很想將自己這段時間的一些經(jīng)歷和大家分享一下,希望對初學(xué)者而言能使得他們能少走一些彎路。只是公司里的事情很多,最近經(jīng)常加班,所以一直拖到現(xiàn)在。
能來到這家公司應(yīng)該是一種緣份--緣起NIOS。當(dāng)初三月份altera來我們學(xué)校建立SOPC實(shí)驗(yàn)室的時候自己還不知道NIOS是什么東西,只是想在altera的FAE講完NIOS后多問他幾個時序約束的問題,然后拷一份PPT回去。但是想不到因?yàn)槟且环軳IOS的培訓(xùn)資料,我認(rèn)識了edacn上的cawan,他給我講了很多NIOS的東西,之后是丁哥在SOC版帖了位NIOS大賽的通知,然后我和隊(duì)友就去報(bào)了名,并去川大參加了NIOS的培訓(xùn),認(rèn)識了峻龍的FAE----也是我現(xiàn)在的boss。在這里要謝謝cawan、丁哥、和我一起參加NIOS競賽的隊(duì)友劉科以及我的BOSS,是他們讓我有了這一段的經(jīng)歷。在公司里的幾個月,做的項(xiàng)目其實(shí)不多,但是收獲還是有一些,我覺得收獲最大的是設(shè)計(jì)理念的改變,這也是我這段時間最想總結(jié)的,我會在后面逐漸闡述。
時序是設(shè)計(jì)出來的我的boss有在華為及峻龍工作的背景,自然就給我們講了一些華為及altera做邏輯的一些東西,而我們的項(xiàng)目規(guī)范,也基本上是按華為的那一套去做。在工作這幾個月中,給我感觸最深的是華為的那句話:時序是設(shè)計(jì)出來的,不是仿出來的,更不是湊出來的。在我們公司,每一個項(xiàng)目都有很嚴(yán)格的評審,只有評審?fù)ㄟ^了,才能做下一步的工作。以做邏輯為例,并不是一上來就開始寫代碼,而是要先寫總體設(shè)計(jì)方案和邏輯詳細(xì)設(shè)計(jì)方案,要等這些方案評審?fù)ㄟ^,認(rèn)為可行了,才能進(jìn)行編碼,一般來說這部分工作所占的時間要遠(yuǎn)大于編碼的時間。總體方案主要是涉及模塊劃分,一級模塊和二級模塊的接口信號和時序(我們要求把接口信號的時序波形描述出來)以及將來如何測試設(shè)計(jì)。在這一級方案中,要保證在今后的設(shè)計(jì)中時序要收斂到一級模塊(最后是在二級模塊中)。什么意思呢?我們在做詳細(xì)設(shè)計(jì)的時候,對于一些信號的時序肯定會做一些調(diào)整的,但是這種時序的調(diào)整最多只能波及到本一級模塊,而不能影響到整個設(shè)計(jì)。記得以前在學(xué)校做設(shè)計(jì)的時候,由于不懂得設(shè)計(jì)時序,經(jīng)常因?yàn)橛幸惶幮盘柕臅r序不滿足,結(jié)果不得不將其它模塊信號的時序也改一下,搞得人很郁悶。在邏輯詳細(xì)設(shè)計(jì)方案這一級的時候,我們已經(jīng)將各級模塊的接口時序都設(shè)計(jì)出來了,各級模塊內(nèi)部是怎么實(shí)現(xiàn)的也基本上確定下來了。由于做到這一點(diǎn),在編碼的時候自然就很快了,最重要的是這樣做后可以讓設(shè)計(jì)會一直處于可控的狀態(tài),不會因?yàn)槟骋惶幍腻e誤引起整個設(shè)計(jì)從頭進(jìn)行。做邏輯的難點(diǎn)在于系統(tǒng)結(jié)構(gòu)設(shè)計(jì)和仿真驗(yàn)證剛?cè)ス镜臅r候BOSS就和我講,做邏輯的難點(diǎn)不在于RTL級代碼的設(shè)計(jì),而在于系統(tǒng)結(jié)構(gòu)設(shè)計(jì)和仿真驗(yàn)證方面。目前國內(nèi)對可綜合的設(shè)計(jì)強(qiáng)調(diào)的比較多,而對系統(tǒng)結(jié)構(gòu)設(shè)計(jì)和仿真驗(yàn)證方面似乎還沒有什么資料,這或許也從一個側(cè)面反映了國內(nèi)目前的設(shè)計(jì)水平還比較低下吧。
以前在學(xué)校的時候,總是覺得將RTL級代碼做好就行了,仿真驗(yàn)證只是形式而已,所以對HDL的行為描述方面的語法不屑一顧,對testbench也一直不愿意去學(xué)--因?yàn)橛X得畫波形圖方便;對于系統(tǒng)結(jié)構(gòu)設(shè)計(jì)更是一點(diǎn)都不懂了。到了公司接觸了些東西才發(fā)現(xiàn)完全不是這樣。其實(shí)在國外,花在仿真驗(yàn)證上的時間和人力大概是花在RTL級代碼上的兩倍,現(xiàn)在仿真驗(yàn)證才是百萬門級芯片設(shè)計(jì)的關(guān)鍵路徑。仿真驗(yàn)證的難點(diǎn)主要在于怎么建模才能完全和準(zhǔn)確地去驗(yàn)證設(shè)計(jì)的正確性(主要是提高代碼覆蓋),在這過程中,驗(yàn)證速度也是很重要的。驗(yàn)證說白了也就是怎么產(chǎn)生足夠覆蓋率的激勵源,然后怎么去檢測錯誤。我個人認(rèn)為,在仿真驗(yàn)證中,最基本就是要做到驗(yàn)證的自動化。這也是為什么我們要寫testbench的原因。在我現(xiàn)在的一個設(shè)計(jì)中,每次跑仿真都要一個小時左右(這其實(shí)算小設(shè)計(jì))。由于畫波形圖無法做到驗(yàn)證自動化,如果用通過畫波形圖來仿真的話,一是畫波形會畫死(特別是對于算法
復(fù)雜的、輸入呈統(tǒng)計(jì)分布的設(shè)計(jì)),二是看波形圖要看死,三是檢錯率幾乎為零。
那么怎么做到自動化呢?我個人的水平還很有限,只能簡單地談下BFM(bus function model,總線功能模型)。以做一個MAC的core為例(背板是PCI總線),那么我們需要一個MAC_BFM和PCI_BFM及PCI_BM(PCI behavior.model)。MAC_BFM的主要功能是產(chǎn)生以太網(wǎng)幀(激勵源),隨機(jī)的長度和幀頭,內(nèi)容也是隨機(jī)的,在發(fā)送的同時也將其復(fù)制一份到PCI_BM中;PCI_BFM的功能則是仿PCI總線的行為,比如被測收到了一個正確幀后會向PCI總線發(fā)送一個請求,PCI_BFM則會去響應(yīng)它,并將數(shù)據(jù)收進(jìn)來;PCI_BM的主要功能是將MAC_BFM發(fā)送出來的東西與PCI_BFM接收到的東西做比較,由于它具有了MAC_BFM的發(fā)送信息和PCI_BFM的接收信息,只要設(shè)計(jì)合理,它總是可以自動地、完全地去測試被測是否工作正常,從而實(shí)現(xiàn)自動檢測。華為在仿真驗(yàn)證方面估計(jì)在國內(nèi)來說是做的比較好的,他們已建立起了比較好的驗(yàn)證平臺,大部分與通信有關(guān)的BFM都做好了,聽我朋友說,現(xiàn)在他們只需要將被測放在測試平臺中,并配置好參數(shù),就可以自動地檢測被測功能的正確與否。在功能仿真做完后,由于我們做在是FPGA的設(shè)計(jì),在設(shè)計(jì)時已經(jīng)基本保證RTL級代碼在綜合結(jié)果和功能仿真結(jié)果的一致性,只要綜合布局布線后的靜態(tài)時序報(bào)告沒有違反時序約束的警告,就可以下到板子上去調(diào)試了。事實(shí)上,在華為中興,他們做FPGA的設(shè)計(jì)時也是不做時序仿真的,因?yàn)樽鰰r序仿真很花時間,且效果也不見得比看靜態(tài)時序分析報(bào)告好。當(dāng)然了,如果是ASIC的設(shè)計(jì)話,它們的仿真驗(yàn)證的工作量要大一些,在涉及到多時鐘域的設(shè)計(jì)時,一般還是做后仿的。不過在做后仿之前,也一般會先用形式驗(yàn)證工具和通過靜態(tài)時序分序報(bào)告去查看有沒有違反設(shè)計(jì)要求的地方,這樣做了之后,后仿的工作量可以小很多。
在HDL語言方面,國內(nèi)語言很多人都在爭論VHDL和verilog哪個好,其實(shí)我個人認(rèn)為這并沒有多大的意義,外面的大公司基本上都是用verilog在做RTL級的代碼,所以還是建議大家盡量學(xué)verilog。在仿真方面,由于VHDL在行為級建模方面弱于verilog,用VHDL做仿真模型的很少,當(dāng)然也不是說verilog就好,其實(shí)verilog在復(fù)雜的行為級建模方面的能力也是有限的,比如目前它還不支持?jǐn)?shù)組。在一些復(fù)雜的算法設(shè)計(jì)中,需要高級語言做抽象才能描述出行為級模型。在國外,仿真建模很多都是用System C和E語言,用verilog的都算是很落后的了,國內(nèi)華為的驗(yàn)證平臺好像是用System C寫。
在系統(tǒng)結(jié)構(gòu)設(shè)計(jì)方面,由于我做的設(shè)計(jì)還不夠大,還談不上什么經(jīng)驗(yàn),只是覺得必須要具備一些計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)的知識才行。劃分的首要依據(jù)是功能,之后是選擇合適的總線結(jié)構(gòu)、存儲結(jié)構(gòu)和處理器架構(gòu),通過系統(tǒng)結(jié)構(gòu)劃分要使各部分功能模塊清晰,易于實(shí)現(xiàn)。這一部分我想過段時間有一點(diǎn)體會了再和大家分享,就先不誤導(dǎo)大家了。
規(guī)范很重要
工作過的朋友肯定知道,公司里是很強(qiáng)調(diào)規(guī)范的,特別是對于大的設(shè)計(jì)(無論軟件還是硬件),不按照規(guī)范走幾乎是不可實(shí)現(xiàn)的。邏輯設(shè)計(jì)也是這樣:如果不按規(guī)范做的話,過一個月后調(diào)試時發(fā)現(xiàn)有錯,回頭再看自己寫的代碼,估計(jì)很多信號功能都忘了,更不要說檢錯了;如果一個項(xiàng)目做了一半一個人走了,接班的估計(jì)得從頭開始設(shè)計(jì);如果需要在原來的版本基礎(chǔ)上增加新功能,很可能也得從頭來過,很難做到設(shè)計(jì)的可重用性。
在邏輯方面,我覺得比較重要的規(guī)范有這些:
1.設(shè)計(jì)必須文檔化。要將設(shè)計(jì)思路,詳細(xì)實(shí)現(xiàn)等寫入文檔,然后經(jīng)過嚴(yán)格評審?fù)ㄟ^后才能進(jìn)行下一步的工作。這樣做乍看起來很花時間,但是從整個項(xiàng)目過程來看,絕對要比一上來就寫代碼要節(jié)約時間,且這種做法可以使項(xiàng)目處于可控、可實(shí)現(xiàn)的狀態(tài)。
2.代碼規(guī)范。
a.設(shè)計(jì)要參數(shù)化。比如一開始的設(shè)計(jì)時鐘周期是30ns,復(fù)位周期是5個時鐘周期,我們可以這么寫:
重
parameter CLK_PERIOD = 30;parameter RST_MUL_TIME = 5;parameter RST_TIME = RST_MUL_TIME * CLK_PERIOD;...rst_n = 1'b0;# RST_TIME rst_n = 1'b1;...# CLK_PERIOD/2 clk <= ~clk;如果在另一個設(shè)計(jì)中的時鐘是40ns,復(fù)位周期不變,我們只需對CLK_PERIOD進(jìn)行新例化就行了,從而使得代碼更加易于重用。b.信號命名要規(guī)范化。1)信號名一律小寫,參數(shù)用大寫。2)對于低電平有效的信號結(jié)尾要用_n標(biāo)記,如rst_n。3)端口
第五篇:FPGA程序總結(jié)
1流水燈程序
module ww(clk,led,rst);
input clk,rst;
output [3:0]led;
reg [3:0]led;
reg [24:0] cnt;
always@(posedge clk or negedge rst)
begin
if(!rst)cnt<=25'd0;
else
begin
if(cnt==25'd24999999)cnt<=25'd0;
else cnt<=cnt+25'd1;
end
end
通過cnt對時鐘的計(jì)數(shù)實(shí)現(xiàn)0.5s定時。設(shè)輸入時鐘是50M always@(posedge clk or negedge rst)
begin
if(!rst)led<=4'b1111;
else
begin
if(cnt==25'd24999999)
begin
led<=led<<1;
if(led==4'b0000)led<=4'b1111;
end
else led<=led;
end
end endmodule
學(xué)會計(jì)數(shù)判斷實(shí)現(xiàn)定時,和移位的使用
將第二個always改為下面的,就是跑馬燈了。(相當(dāng)向左循環(huán)移位)always@(posedge clk or negedge rst)
begin
if(!rst)led<=4'b0101;
else
begin
if(cnt==25'd24999999)
led<={led[2:0],led[3]};
else led<=led;
end
end
2共陰數(shù)碼管
3FH,06H,5BH,4FH,66H,6DH,7DH,07H[0-7]7FH,6FH ,77H,7CH,39H,5EH,79H,71H[8-F]注意:easyfpga板獨(dú)立的2個數(shù)碼管是共陰的,斷碼8位順序:dp,g,f,e,d,c,b,a//dp在高位 0—F顯示 輸入時鐘50M
module ww(clk,seg,wei,rst);
input clk,rst;
output [7:0]seg;
output [1:0]wei;
reg [7:0]seg;
reg [3:0]dat;reg [25:0] cnt;
always@(posedge clk or negedge rst)//1秒定時 begin
if(!rst)cnt<=26'd0;
else
begin
if(cnt==26'd49999999)cnt<=26'd0;else cnt<=cnt+26'd1;
end
end
always@(posedge clk or negedge rst)begin
if(!rst)dat<=4'b0000;
else
begin
if(cnt==26'd49999999)begin
dat<=dat+1'b1;
if(dat==4'hf)dat<=0;end
end
always@(dat)
begin
case(dat)
4'h0:seg=8'h3f;
4'h1:seg=8'h06;
4'h2:seg=8'h5b;else dat<=dat;end
4'h3:seg=8'h4f;4'h4:seg=8'h66;4'h5:seg=8'h6d;4'h6:seg=8'h7d;4'h7:seg=8'h07;4'h8:seg=8'h7f;4'h9:seg=8'h6f;4'ha:seg=8'h77;4'hb:seg=8'h7c;4'hc:seg=8'h39;4'hd:seg=8'h5e;4'he:seg=8'h79;4'hf:seg=8'h71;endcase end
assign wei=2'b00;endmodule