AHB2APB Bridge模塊的Verilog設(shè)計(jì)

前言:
本文是個(gè)人FPGA項(xiàng)目《基于AMBA總線的流水燈控制器系統(tǒng)》中的第二章節(jié),
文章主要內(nèi)容是介紹項(xiàng)目中AHB2APB Bridge模塊的Verilog設(shè)計(jì)方法,
由于該模塊在AMBA總線架構(gòu)中具有不可替代的地位,因此本文章所介紹的設(shè)計(jì)方法和思路在其他設(shè)計(jì)項(xiàng)目中具有很強(qiáng)的通用性,
《基于AMBA總線的流水燈控制器系統(tǒng)》介紹了一個(gè)完全用Verilog HDL手寫的AMBA片上系統(tǒng),設(shè)計(jì)了一個(gè)基于AMBA總線的流水燈控制系統(tǒng),
項(xiàng)目中所有數(shù)字電路邏輯RTL設(shè)計(jì)都是通過(guò)Verilog進(jìn)行的,不會(huì)調(diào)用成熟IP核,
RTL模型的仿真、綜合與布線在Vivado平臺(tái)上完成,最后在FPGA開發(fā)板上進(jìn)行板級(jí)驗(yàn)證。
對(duì)于FPGA項(xiàng)目感興趣的朋友們,可以參照本人發(fā)布于博客園的設(shè)計(jì)文檔與項(xiàng)目在FPGA開發(fā)板上的運(yùn)行演示視頻:
博客園鏈接:https://www.cnblogs.com/sjtu-zsj-990702/p/17251396.html
FPGA上板驗(yàn)證視頻:https://www.bilibili.com/video/BV1EM4y1U7QP/?spm_id_from=333.788.top_right_bar_window_default_collection.content.click
正文:
AHB2APB Bridge是AHB與APB總線之間的橋梁,負(fù)責(zé)兩種協(xié)議信號(hào)的相互轉(zhuǎn)換,
AHB2APB Bridge的模塊框圖和信號(hào)定義如下:

AHB2APB Bridge既是AHB總線上的一個(gè)Slave,也作為APB總線上唯一的Master,
其任務(wù)是將來(lái)自于AHB總線上的信號(hào)轉(zhuǎn)化為APB信號(hào),實(shí)現(xiàn)AHB系統(tǒng)和APB的互聯(lián),
2.1 AHB2APB Bridge有限狀態(tài)機(jī)
那么如何實(shí)現(xiàn)一個(gè)可以完成上述功能的Bridge模塊呢?
答案是通過(guò)一個(gè)有限狀態(tài)機(jī)(FSM,F(xiàn)inite State Machine)來(lái)進(jìn)行控制,
看看一次典型的AHB到APB信號(hào)轉(zhuǎn)換時(shí)序圖(以Read為例):

在T1-T2期間,Bridge作為AHB總線上的Slave被HADDR選中,
在T2-T4兩個(gè)時(shí)鐘周期內(nèi),Bridge將AHB的HADDR上的地址Addr1放在APB總線的PADDR上,
其中T2-T3,PENABLE尚未被拉高,且HREADY會(huì)被Bridge拉低,因?yàn)锳PB的傳輸速度是低于AHB的,需要AHB總線上的Master進(jìn)行等待,
而T3-T4,PENABLE被Bridge使能,數(shù)據(jù)信息被放上PRDATA并且由Bridge轉(zhuǎn)交給HRDATA,
我們將T1-T2,T2-T3,T3-T4這個(gè)周期分別稱為IDLE,SETUP和ENABLE,
于是我們得到AHB2APB Bridge的狀態(tài)機(jī)轉(zhuǎn)換示意圖:

總結(jié)一下:
1. 對(duì)于SETUP,下一個(gè)周期必定跳往ENABLE,
由于本項(xiàng)目用的是APB-Lite,沒有PREADY信號(hào),所有APB傳輸必須在兩個(gè)周期完成
2. 對(duì)于IDLE或ENABLE,若總線上有傳輸,則下一個(gè)周期為SETUP;若無(wú),則下一個(gè)周期為IDLE
(“有無(wú)傳輸”,意思是AHB端的HADDR是否選中APB上的設(shè)備)
注意:在T2-T4傳輸Data1后,APB總線又在T4-T6兩個(gè)周期內(nèi)完成了Data2的傳輸,
這兩次傳輸之間并沒有經(jīng)歷IDLE狀態(tài),這表明當(dāng)AHB總線上仍然有傳輸任務(wù)時(shí),ENABLE狀態(tài)直接跳往SETUP狀態(tài)以準(zhǔn)備下一個(gè)數(shù)據(jù)的傳輸,
由此我們得到AHB2APB Bridge的狀態(tài)機(jī):
2.2 AHB與APB信號(hào)轉(zhuǎn)換
完成上述狀態(tài)機(jī)設(shè)計(jì)后,剩下的工作就非常簡(jiǎn)單了,我們需要把AHB總線上的信號(hào)放到APB總線上:
1. APB上的控制信號(hào)(PWRITE,PADDR)與數(shù)據(jù)信號(hào)(PWDATA,PRDATA)都是直接從AHB那邊的信號(hào)拿過(guò)來(lái)的,
2. PENABLE只在ENABLE狀態(tài)下拉高,
3. PSELx取決于HADDR落在APB總線上哪個(gè)外設(shè)的地址空間范圍內(nèi),在本設(shè)計(jì)中,APB Slave為APB GPIO模塊
于是可以得到AHB與APB信號(hào)之間的對(duì)應(yīng)關(guān)系:
最后,
附上AHB2APB Bridge模塊的完整RTL: