1. 使用Verilog編寫三分頻電路,輸出為50%占空比(10分)
【解析】對(duì)于奇數(shù)分頻,就是分別利用待分頻時(shí)鐘的上升沿觸發(fā)生成一個(gè)時(shí)鐘,然后用下降沿觸發(fā)生成另一個(gè)時(shí)鐘,然后將兩個(gè)時(shí)鐘信號(hào)進(jìn)行或/與運(yùn)算得到占空比為50%的奇數(shù)分頻。具體方法詳述如下:
Step1: 雙沿計(jì)數(shù)器計(jì)數(shù)
使用2個(gè)計(jì)數(shù)器:cnt_up和cnt_down,分別在時(shí)鐘的上升沿觸發(fā)計(jì)數(shù)器cnt_up和cnt_down。[計(jì)數(shù)器進(jìn)制:N進(jìn)制;計(jì)數(shù)范圍:0-N-1]
Step2:生成兩個(gè)控制信號(hào)clk_up和clk_down
定義2個(gè)時(shí)鐘信號(hào)clk_p和clk_n, 對(duì)于上升沿計(jì)數(shù)器cnt_p,當(dāng)計(jì)數(shù)到0或者(N-1)/2時(shí),均翻轉(zhuǎn)clk_p信號(hào);對(duì)于下降沿計(jì)數(shù)器cnt_n,當(dāng)計(jì)數(shù)到0或者(N-1)/2時(shí),均翻轉(zhuǎn)clk_n信號(hào)。
Step3: 求出分頻后時(shí)鐘
若clk_p和clk_n初始復(fù)位為0,將2個(gè)時(shí)鐘clk_p和clk_n通過(guò)或運(yùn)算即可生成占空比為50%的分頻時(shí)鐘,且clk_out上升沿和原時(shí)鐘上升沿對(duì)齊。如果clk_p和clk_n初始復(fù)位為1,使用與邏輯運(yùn)算才能生成占空比50%的分頻時(shí)鐘。
占空比為50%的奇數(shù)分頻(以7分頻為例)的Verilog代碼如下:
波形圖就不掛出來(lái)了,勤勞的同學(xué)們自己跑一下仿真就可以看到結(jié)果了!
2. 除法器的Verilog RTL實(shí)現(xiàn)。16bitA,8bitB。C=A/B (15分)
【解析】和十進(jìn)制除法類似,計(jì)算 27 除以 5 的過(guò)程如下所示:
除法運(yùn)算過(guò)程如下:
(1) 取被除數(shù)的高幾位數(shù)據(jù),位寬和除數(shù)相同(實(shí)例中是 3bit 數(shù)據(jù))。
(2) 將被除數(shù)高位數(shù)據(jù)與除數(shù)作比較,如果前者不小于后者,則可得到對(duì)應(yīng)位的商為 1,兩者做差得到第一步的余數(shù);否則得到對(duì)應(yīng)的商為 0,將前者直接作為余數(shù)。
(3) 將上一步中的余數(shù)與被除數(shù)剩余最高位 1bit 數(shù)據(jù)拼接成新的數(shù)據(jù),然后再和除數(shù)做比較。可以得到新的商和余數(shù)。
(4) 重復(fù)過(guò)程 (3),直到被除數(shù)最低位數(shù)據(jù)也參與計(jì)算。
程序按照以上原理編寫如下:
3.簡(jiǎn)要描述AHB總線協(xié)議。包括有哪些信號(hào),簡(jiǎn)要描述信號(hào)的作用(15分)
【解析】
AHB是AMBA總線系列中的其中一種,它是一種高性能的pipe系統(tǒng)總線。AHB總線細(xì)分,可以分為三組總線:寫數(shù)據(jù)總線(HWDATA),讀數(shù)據(jù)總線(HRDATA)和地址控制總線(HADDR)。
這三組總線相互分離互不干擾。對(duì)于每一組總線來(lái)說(shuō),同時(shí)只能由一個(gè)master或者slave來(lái)獨(dú)占,這時(shí)需要仲裁器來(lái)決定將總線的控制權(quán)交與哪個(gè)設(shè)備,并控制多路選擇器來(lái)選擇已經(jīng)獲得控制權(quán)的那個(gè)設(shè)備來(lái)傳輸數(shù)據(jù)和地址信息。譯碼器根據(jù)地址來(lái)選擇讓哪個(gè)slave的數(shù)據(jù)通過(guò)選擇器。