freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

集成電路綜合課程設(shè)計(jì)(已修改)

2025-06-23 12:04 本頁面
 

【正文】 課程設(shè)計(jì) 開課學(xué)期: 20212021 學(xué)年第 一 學(xué)期 課程名稱: 集成電路綜合課程設(shè)計(jì) 學(xué) 院: 專 業(yè): 班 級 : 學(xué) 號 : 姓 名: 任課教師: 2021 年 9 月 11 日 一 、課程設(shè)計(jì) 目的 ..................................................... 3 二 、 設(shè)計(jì)要求 ............................................................. 3 ............................................................................... 3 三 、 設(shè)計(jì)基本原理 ...................................................... 3 四 、 設(shè)計(jì)設(shè)計(jì)分析 ...................................................... 4 五,設(shè)計(jì) 實(shí)現(xiàn) 過程 ...................................................... 5 ............................................................. 5 ............................... 錯誤 !未定義書簽。 ...................................... 錯誤 !未定義書簽。 五 .總結(jié)及感想 ............................. 錯誤 !未定義書簽。 附件: .................................................... 錯誤 !未定義書簽。 設(shè)計(jì)目的 利用 verilogHDL 設(shè)計(jì)數(shù)字電路異步 FIFO,通過對 verilogHDL 的學(xué)習(xí),掌握一些基本的知識, 本次課程設(shè)計(jì)的安排旨在提升學(xué)生的動手能力,加強(qiáng)大家對專業(yè)理論知識的理解和實(shí)際 運(yùn)用, 加強(qiáng)大家的自學(xué)能力,為大家做畢業(yè)設(shè)計(jì)做很好的鋪墊。 設(shè)計(jì)要求 遵循 RTL 設(shè)計(jì)規(guī)則,利用 VerilogHDL 設(shè)計(jì)數(shù)字電路異步 FIFO. 異步 FIFO 具有讀寫兩個時鐘,讀時鐘 100MHz,寫時鐘 50MHz。 RTL 為可綜合設(shè)計(jì),需要考慮不同時鐘領(lǐng)域的同步設(shè) 計(jì),具有空滿標(biāo)志產(chǎn)生邏輯,并且根據(jù)空滿標(biāo)志進(jìn)行讀寫數(shù)據(jù)及讀寫使能等邏輯控制。 根據(jù) RTL 設(shè)計(jì),編寫驗(yàn)證環(huán)境,即 testbench,在 testbench 中測試異步 FIFO的讀寫功能是否正確。異步 FIFO 寫數(shù)據(jù)由 testbench 產(chǎn)生。編寫一定的測試向量,來測試覆蓋所設(shè)計(jì)的異步 FIFO 各項(xiàng)功能及指標(biāo)。 將異步 FIFO RTL 在 DC 環(huán)境中進(jìn)行綜合,編寫約束文件,給出最終的綜合結(jié)果,包括面積報告,網(wǎng)表及時序報告。約束文件中,讀寫時鐘要求見上,輸入延遲為寫時鐘周期的一半,輸出延遲為讀時鐘周期的 1/3,其他約束要求根據(jù) RTL 設(shè)計(jì)自己確定。 設(shè)計(jì)基本原理 從硬件的觀點(diǎn)來看,就是一塊數(shù)據(jù)內(nèi)存。它有兩個端口,一個用來寫數(shù)據(jù),就是將數(shù)據(jù)存入 FIFO;另一個用來讀數(shù)據(jù),也就是將數(shù)據(jù)從 FIFO 當(dāng)中取出。與 FIFO操作相關(guān)的有兩個指針,寫指針指向要寫的內(nèi)存部分,讀指針指向要讀的內(nèi)存部分。 FIFO 控制器通過外部的讀寫信號控制這兩個指針移動,并由此產(chǎn)生 FIFO 空信號或滿信號。 對于異步 FIFO 而言,數(shù)據(jù)是由某一個時鐘域的控制信號寫入 FIFO,而由另一個時鐘域的控制信號將數(shù)據(jù)讀出 FIFO。也就是說,讀寫指針的變化動作是由不同的時鐘產(chǎn)生的。因 此,對 FIFO 空或滿的判斷是跨時鐘域的。如何根據(jù)異步的指針信號對 FIFO 的滿狀態(tài)或空狀態(tài)進(jìn)行正確的判斷 。 設(shè)計(jì)分析 在數(shù)字集成電路中,觸發(fā)器要滿足 setup/hold 的時間要求。當(dāng)一個信號被寄存器鎖存時,如果信號和時鐘之間不滿足這個要求, Q 端的值是不確定的,并且 在未知的時刻會固定到高電平或低電平。這個過程稱為亞穩(wěn)態(tài)( Metastability)。圖2 所示為異步時鐘和亞穩(wěn)態(tài),圖中 clka 和 clkb 為異步時 鐘。 ① 對寫地址 /讀地址采用格雷碼。由實(shí)踐可知,同步多個異步輸入信號出現(xiàn)亞穩(wěn)態(tài)的概率遠(yuǎn)遠(yuǎn)大于同步一個異 步信號的概率。對多個觸發(fā)器的輸出所組成的寫地址 /讀地址可以采用格雷碼。由于格雷碼每次只變化一位,采用格雷碼可以有效地減少亞穩(wěn)態(tài)的產(chǎn)生。 空 /滿標(biāo)志的產(chǎn)生 空 /滿標(biāo)志的產(chǎn)生 FIFO 的核心部分。如何正確設(shè)計(jì)此部分的邏輯,直接影響到 FIFO 的性能。 空 / 滿標(biāo)志產(chǎn)生的原則是:寫滿不溢出,讀空不多讀。即無論在什么進(jìn)修,都不應(yīng)出現(xiàn)讀寫地址同時對一個存儲器地址操作的情況。在讀寫地址相等或相差一個或多個地 址的時候,滿標(biāo)志應(yīng)該有效,表示此時 FIFO 已滿,外部電路應(yīng)對 FIFO 發(fā)數(shù)據(jù)。在滿信號有效時寫數(shù)據(jù),應(yīng)根據(jù) 設(shè)計(jì)的要求,或保持、或拋棄重發(fā)。同理,空 標(biāo)志的產(chǎn)生也是如此,即: 空標(biāo)志 =(|寫地址 讀地址 |=預(yù)定值 )AND(寫地址超前讀地址) 滿標(biāo)志 =( |寫地址 讀地址 |=預(yù)定值) AND(讀地址超前寫地址 ) 設(shè)計(jì)實(shí)現(xiàn)過程 五、 設(shè)計(jì)實(shí)現(xiàn)過程 A、電路實(shí)現(xiàn)過程 附圖 1 由異步 FIFO 內(nèi)部模塊圖和接口信號(附圖 1)可以知道,因?yàn)槭莾蓚€異步的時鐘,所以用鎖存器來避免產(chǎn)生亞穩(wěn)態(tài)。為了生成空滿標(biāo)志,我們采用格雷碼來編寫。我們可以看出 FIFO 中的 讀寫指針是一個循環(huán)指針,讀寫指針初始化值都為 0,滿標(biāo)志初始化為 0,空標(biāo)志初始化值為 ,每做一次寫操作,寫指針加 1,每做一次讀操作,讀指針也加 1,。當(dāng)讀指針在加 1過程中與寫指針相等的時候,表示緩沖區(qū)為空,應(yīng)置空標(biāo)志。反之,寫指針加 1過程中等于讀指針,緩沖區(qū)滿,應(yīng)置滿標(biāo)志。 經(jīng)上面的分析,結(jié)合格雷碼的特點(diǎn),我們可以將滿標(biāo)志定義如下: overflow=(wptr[n]^rptr[n1])amp。~(wptr[n1]^rptr[n] 我們可以將空標(biāo)志定義如下: underflow=~(wptr[n]^rptr[n1]amp。(wptr[n1]^rptr[n]) 分析后根據(jù) RTL 設(shè)計(jì)的規(guī)則來編寫代碼如下所示: //asyn fifo `timescale 1ns/1ns module fifo ( wdata, full, winc, wclk, wrst_n, rdata, rinc, empty, rclk, rrst_n )。 // parameter WIDTH = 8。 parameter DEPTH = 2。 parameter max_count = 239。b11。 // input [WIDTH:0] wdata。 input winc。 input wclk。 input wrst_n。 input rinc。 input rclk。 input rrst_n。 // output full。 output [WIDTH:0] rdata。 output empty。 // reg full_r。 reg empty_r。 reg [WIDTH:0] rdata_r。 // reg [DEPTH:0] wptr。 //n+1 ptr reg [DEPTH:0] rptr。 reg [DEPTH:0] w1_rptr。 reg [DEPTH:0] w2_rptr。 reg [DEPTH:0] r1_wptr。 reg [DEPTH:0] r2_wptr。 // reg [(WIDTH1):0] fifomem [0:max_count]。 reg [DEPTH:0] wbin,rbin。 wire [DEPTH:0] rgnext,rbnext,wgnext,wbnext。 reg [DEPTH:0] rgnext_r,rbnext_r。 wire [(DEPTH1):0] raddr,waddr。 //reg [(DEPTH1):0] raddr_r。 wire full_val,empty_val。 /// //write in always@(posedge wclk) begin if(!wincamp。!full)//write enable no full fifomem[waddr] = wdata。 end //read out always@(posedge rclk) begin if(!rincamp。!empty) rdata_r = fifomem[raddr]。 end // //asyn write ptr always@(posedge wclk or negedge wrst_n) begin if(!wrst_n) {w2_rptr,w1_rptr} = 239。b00。 else {w2_rptr,w1_rptr} = {w1_rptr,rptr}。 end // //generate wptr and wbin always@(posedge wclk or negedge wrst_n) begin if(!wrst_n) {wbin,wptr} = 239。b00。 else {wbin,wptr} = {wbnext,wgnext}。 end // assign waddr = wbin[(DEPTH1):0]。 assign wbnext = !full ? (wbin + !winc) : wbin。 assign wgnext = (wbnext 1) ^ wbnext。 assign full_val = (wgnext == {~w2_rptr[DEPTH],w2_rptr[(DEPTH1):0]})。 always@(posedge wclk or negedge wrst_n) begin if(!wrst_n) full_r = 139。b0。 else full_r = full_val。 end //asyn read ptr always@(posedge rclk or negedge rrst_n) begin if(!rrst_n) {r2_wptr,r1_wptr} = 239。b00。 else {r2_wptr,r1_wptr} = {r1_wptr,wptr}。 end /// //generate rbin and rptr always@(posedge rclk or negedge rrst_n) begin if(!rrst_n) {rbin,rptr} = 239。b00。 else {rbin,rptr} = {rbnext_r,rgnext_r}。 end // assign raddr = rbin[(DEPTH1):0]。 assign rbnext = !empty ? (rbin + !rinc) :rbin。 assign rgnext = (rbnext 1) ^ rbnext。 assign empty_val = (rgnext_r == r2_wptr)。 always@(posedge rclk or negedge rrst_n) begin if(!rrst_n) empty_r = 139。b0。 else empty_r = empty_val。 end // assign full = full_r。 assign empty = empty_r。 assign rdata = rdata_r。 //assign rgnext = rgnext_r。 always @(posedge rclk ) begin rgnext_r = rgnext。 rbnext_r = rbnext。 //raddr_r = raddr。 end endmodule 在 quartus II 中進(jìn)行編譯,語法正確無誤后在 modelsim 中進(jìn)行仿真查看是否有滿足預(yù)設(shè)的功能和要求。編譯文件( testbenc
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計(jì)相關(guān)推薦
文庫吧 www.dybbs8.com
公安備案圖鄂ICP備17016276號-1