如何快速學(xué)習FPGA之煉獄傳奇層次化

發(fā)布時(shí)間:2015-6-18 10:21    發(fā)布者:zxopen09
關(guān)鍵詞: 層次化
   至芯科技就業(yè)班邀請函.pdf (161.77 KB)


本節我們通過(guò)驅動(dòng)流水燈的不同方式來(lái)體現Fpga中的一個(gè)重要思想—層次化設計。
首先介紹一下我所使用開(kāi)發(fā)板的硬件資源,50MHZ時(shí)鐘輸入、4個(gè)低電平點(diǎn)亮的流水燈。然后通過(guò)兩種不同驅動(dòng)方式的對比使讀者更加深層次的了解層次化設計
        下圖提供了一段流水燈代碼,請問(wèn)能夠實(shí)現流水現象嗎?

與上述代碼所對應的波形圖如下


FPGA的時(shí)鐘是50M,周期20ns,上述代碼每隔20ns,流水燈的狀態(tài)發(fā)生改變,即每個(gè)燈亮的狀態(tài)是20ns,時(shí)間非常短,人的肉眼觀(guān)察不到燈亮的狀態(tài)。
    由于周期特別短導致無(wú)法觀(guān)察到燈亮,因此只要通過(guò)計數器將周期延長(cháng)一定的時(shí)間,就可以看到“流水”現象。以下代碼通過(guò)設計一個(gè)計數器count將周期延長(cháng)到兩秒,代碼如下
代碼經(jīng)過(guò)編譯以后得到RTL圖如下
下面提供相對應的仿真代碼,通過(guò)參數傳遞的方式將led_fsm1 中的NUM賦值為50,代替NUM=28'd100000000,提高仿真效率

具體解釋如下,在led_fsm1中NUM 達到28'd100000000-1(NUM-1)時(shí),才會(huì )產(chǎn)生時(shí)鐘的跳轉,但是在波形仿真中仿真時(shí)間長(cháng),效率低,通過(guò)參數傳遞將50傳給NUM,這樣在仿真中,NUM-1=49時(shí),時(shí)鐘發(fā)生翻轉,提高仿真效率,參數傳遞時(shí),將參數定義為parameter 類(lèi)型,并且在文件中凡是能夠用到參數的地方,盡量要用參數表示,比如用到28'd100000000-1,可以用NUM-1代替,否則會(huì )導致參數傳遞失敗。具體參考給出的波形文件
仿真結果如下
從上面的波形看出當count==50-1,led_out 發(fā)生改變,而不是count==28'd100000000-1 ,由此可知參數傳遞成功
那么,請問(wèn)一下,在一個(gè)模塊里面既要寫(xiě)count分頻模塊,又要寫(xiě)led_out的輸出,有沒(méi)有簡(jiǎn)單的思路呢?
下面我們介紹一種更簡(jiǎn)單的思考方式,層次化設計
所謂層次設計就是將一個(gè)整體項目劃分成多個(gè)模塊,就像電腦由鍵盤(pán)、鼠標、顯示器構成一樣。分好模塊以后,我們就必須要一個(gè)頂層文件,將多個(gè)模塊連接起來(lái)。
下面依然用一個(gè)50MHz的晶振點(diǎn)亮一個(gè)流水燈進(jìn)行層次化設計為例進(jìn)行講解。
首先考慮流水燈由哪幾個(gè)模塊構成。如果用50MHz驅動(dòng)流水燈的話(huà),50MHz頻率過(guò)快,會(huì )導致點(diǎn)亮流水燈的效果看不到,所以我們需要一個(gè)分頻模塊,將時(shí)鐘頻率降低。為了實(shí)現流水燈則需要一個(gè)邏輯控制模塊,最后將這兩個(gè)模塊在頂層中進(jìn)行連接
系統框圖如下:
接下來(lái),設計具體電路描述代碼,實(shí)現各模塊功能,首先,新建工程如下
然后建立起頂層文件
建立時(shí)鐘分頻模塊 led_freq 在這里不建議調用鎖相環(huán)(PLL),鎖相環(huán)分頻是有限制的,我試了一下如果用鎖相環(huán)來(lái)點(diǎn)燈的話(huà),時(shí)鐘太快還是看不到流水的現象,所以需要獨立編寫(xiě)一個(gè)led_freq模塊
在寫(xiě)完分頻模塊以后,就要寫(xiě)如何讓流水燈實(shí)現,以下是流水燈控制模塊的代碼,在控制模塊(led_ctrl)中 注意信號clk, 此時(shí)鐘不是50M時(shí)鐘,是經(jīng)過(guò)分頻模塊分頻以后的時(shí)鐘,這點(diǎn)是如何實(shí)現的呢?可以看后面提供的RTL圖,看模塊的連接關(guān)系,和頂層模塊講解
下面先提供一個(gè)led_ctrl 控制的仿真代碼,用來(lái)測試單獨的流水燈控制模塊,具體代碼如下
led_ctrl模塊仿真波形如下
有以上波形可以看出,復位結束以后,流水燈的驅動(dòng)端口led_out和狀態(tài)機的狀態(tài)寄存器state在時(shí)鐘上升沿的驅動(dòng)下有效配合,實(shí)現了數據的滾動(dòng)賦值,可以正確實(shí)現流水燈設計。

下面編輯頂層模塊,頂層模塊的主要功能是將分頻模塊和流水燈控制模塊連接起來(lái),我們要求在頂層中只做端口連線(xiàn),不做任何邏輯。頂層具體代碼如下:
進(jìn)行全編譯,結果如下:
編譯通過(guò),我們可以首先查看一下RTL級視圖,點(diǎn)擊Tools->Netlist Viewers->RTL Viewer
查看結果如下
由上圖可以說(shuō)明,最終綜合出來(lái)的電路和我們所設想的是完全一致的。

通過(guò)對比以上兩種方法,可以很明顯的發(fā)現層次化設計的RTL視圖能夠清晰的反映出模塊之間的連接關(guān)系,在設計中可以獨立的對每個(gè)模塊進(jìn)行設計,降低設計的復雜度,尤其是大規模的設計,也便于代碼的調試,將一個(gè)復雜的系統轉換為對每個(gè)獨立模塊的調試,所以層次化設計是一項非常重要的設計技巧

傳奇
本主題由 夢(mèng)翼師兄 于 2015-3-21 09:56 限時(shí)高亮

4.png (35.9 KB, 下載次數: 0)

[url=][/url]


本文地址:http://selenalain.com/thread-150712-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
zxopen09 發(fā)表于 2015-6-25 16:44:38
頂一下
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页