本發(fā)明屬于集成電路設(shè)計
技術(shù)領(lǐng)域:
,尤其涉及到陣列處理器中4*4陣列處理器簇內(nèi)分布式存儲結(jié)構(gòu)的數(shù)據(jù)并行訪問。
背景技術(shù):
:隨著處理器內(nèi)部計算核數(shù)目增多,集成功能日益復(fù)雜,對主存數(shù)據(jù)訪問需求也在逐漸增加,處理速度與存取速度失配所引發(fā)的“存儲墻”問題也隨著工藝的進(jìn)步而日益嚴(yán)重,并成為制約處理器性能提高的重要因素。為了使處理速度與存儲速度之間達(dá)到平衡,主流存儲結(jié)構(gòu)采用多級Cache技術(shù)來緩解不斷惡化的“存儲墻”問題。然而,多級Cache結(jié)構(gòu)需要附加電路才能完成地址映射,保證數(shù)據(jù)的一致性。隨著集成電路工藝的不斷進(jìn)步,片上集成的處理器核數(shù)顯著增加,附加電路也會隨之增多,采用多級Cache存儲結(jié)構(gòu)不僅會增加電路的復(fù)雜度,而且會消耗更多的能量。相對于采用多級Cache技術(shù)的處理器,現(xiàn)有無Cache結(jié)構(gòu)又面臨著訪存帶寬達(dá)不到要求,訪問復(fù)雜度高、處理器訪存靈活性差的問題。為此,研究陣列處理器簇內(nèi)存儲結(jié)構(gòu),提高訪存過程的并行性,并在此基礎(chǔ)上緩解處理器與存儲器之間的“存儲墻”問題,解決多級Cache技術(shù)帶來的附加電路增多,存儲架構(gòu)復(fù)雜,處理器訪存靈活性差等問題變得日益迫切。簇內(nèi)存儲訪問行列兩級交換電路,充分考慮了數(shù)據(jù)級并行應(yīng)用的存儲訪問特點(diǎn),采用本地存儲單元優(yōu)先訪問策略,并通過“行交換+列交換”的兩級交換結(jié)構(gòu)實(shí)現(xiàn)了4*4陣列處理器簇內(nèi)16個處理單元對16個存儲塊的并行訪問。技術(shù)實(shí)現(xiàn)要素:本設(shè)計涉及到簇內(nèi)存儲訪問行列兩級交換電路,目的在于通過行列兩級交換結(jié)構(gòu)及本地存儲單元優(yōu)先訪問策略,減小數(shù)據(jù)訪問延遲、提高訪存帶寬、提高資源利用率。本發(fā)明實(shí)施例是這樣實(shí)現(xiàn)的,簇內(nèi)存儲訪問行列兩級交換電路的功能是接收來自簇內(nèi)4*4個輕核處理單元PE的存儲訪問信號,并根據(jù)讀/寫地址進(jìn)行判斷,如果訪問本地存儲單元,則無阻塞直接訪問;如果訪問簇內(nèi)遠(yuǎn)程其它存儲單元,則通過行控制單元和列控制單元進(jìn)行兩級交換實(shí)現(xiàn)數(shù)據(jù)訪問;其中本地存儲單元指當(dāng)前PE發(fā)起訪問請求所對應(yīng)的存儲塊;簇內(nèi)遠(yuǎn)程其它存儲單元指當(dāng)前PE發(fā)起訪問請求對應(yīng)存儲塊以外的其它存儲塊。所述的簇內(nèi)存儲訪問行列兩級交換電路,由16個分配模塊、16個選擇模塊、4個行控制單元、4個列控制單元構(gòu)成。分配模塊由2個比較器、1個寫分配操作、1個讀分配操作和1個讀/寫反饋產(chǎn)生器構(gòu)成,主要功能是接收來自處理器的存儲訪問信號,根據(jù)讀/寫地址idmu_data_raddr/idmu_data_waddr[12:9]位進(jìn)行判斷,如果與本地存儲單元編號相同,則為本地讀寫訪問,將該訪問信息發(fā)送給選擇模塊,如果與本地存儲單元編號不同,則為遠(yuǎn)程讀寫訪問,將該訪問信息發(fā)送給行控制單元,并根據(jù)接收到的外部請求響應(yīng)信號及當(dāng)前請求類型產(chǎn)生輸出給處理器的反饋響應(yīng)信號。選擇模塊由1個寫數(shù)據(jù)通路選擇、1個讀/寫使能產(chǎn)生器、1個讀/寫反饋產(chǎn)生器和1個讀數(shù)據(jù)通路選擇構(gòu)成,主要功能是接收來自分配模塊的本地讀寫訪問以及來自列控制單元的遠(yuǎn)程讀寫訪問,產(chǎn)生輸出到本地存儲塊的存儲訪問信號,并發(fā)回給列控制單元反饋響應(yīng)信號;當(dāng)本地讀寫訪問和遠(yuǎn)程讀寫訪問同時到達(dá)時,優(yōu)先響應(yīng)本地讀寫訪問。行控制單元由1個使能選擇模塊、4個寫使能仲裁模塊、4個讀使能仲裁模塊、4個寫通路選擇模塊、4個讀通路選擇模塊和1個讀數(shù)據(jù)選擇模塊和1個反饋模塊構(gòu)成,主要功能是接收來自16個分配模塊的存儲訪問信號,根據(jù)讀/寫地址idmu_data_raddr/idmu_data_waddr[12:11]位按照輪詢算法進(jìn)行仲裁,將接收到的存儲訪問信號發(fā)送給目的列控制單元,并產(chǎn)生相應(yīng)的反饋響應(yīng)信號,其中idmu_data_raddr/idmu_data_waddr[12:11]=00發(fā)給0號列控制單元、idmu_data_raddr/idmu_data_waddr[12:11]=01發(fā)給1號列控制單元、idmu_data_raddr/idmu_data_waddr[12:11]=10發(fā)給2號列控制單元、idmu_data_raddr/idmu_data_waddr[12:11]=11發(fā)給3號列控制單元。列控制單元同行控制單元設(shè)計思路相同,但信號的輸入來源和輸出走向不同,由1個使能選擇模塊、4個寫使能仲裁模塊、4個讀使能仲裁模塊、4個寫通路選擇模塊、4個讀通路選擇模塊和1個讀數(shù)據(jù)選擇模塊和1個反饋模塊構(gòu)成,主要功能是接收來自4個行控制單元產(chǎn)生的存儲訪問信號,根據(jù)讀/寫地址idmu_data_raddr/idmu_data_waddr[10:9]位按照輪詢算法進(jìn)行仲裁,將接收到的存儲訪問信號發(fā)送給目的選擇模塊,并產(chǎn)生相應(yīng)的反饋響應(yīng)信號,其中idmu_data_raddr/idmu_data_waddr[10:9]=00發(fā)給A號選擇模塊、idmu_data_raddr/idmu_data_waddr[10:9]=01發(fā)給B號選擇模塊、idmu_data_raddr/idmu_data_waddr[10:9]=10發(fā)給C號選擇模塊、idmu_data_raddr/idmu_data_waddr[10:9]=11發(fā)給D號選擇模塊。本設(shè)計的特點(diǎn)是采用“行交換+列交換”的兩級交換結(jié)構(gòu),完成了4*4陣列處理器對16個分布式存儲塊的并行全訪問,支持本地存儲優(yōu)先訪問遠(yuǎn)程存儲次之的優(yōu)先級策略。附圖說明圖1簇內(nèi)存儲訪問行列兩級交換電路結(jié)構(gòu)圖;圖2分配模塊電路圖;圖3選擇模塊電路圖;圖4行控制單元內(nèi)部結(jié)構(gòu)圖;圖5列控制單元內(nèi)部結(jié)構(gòu)圖;圖6行/列控制單元中使能選擇模塊結(jié)構(gòu)圖;圖7行/列控制單元中寫使能仲裁模塊結(jié)構(gòu)圖;圖8行/列控制單元中讀使能仲裁模塊結(jié)構(gòu)圖;圖9行/列控制單元中寫通路選擇模塊結(jié)構(gòu)圖;圖10行/列控制單元中讀通路選擇模塊結(jié)構(gòu)圖;圖11行/列控制單元中讀數(shù)據(jù)選擇模塊結(jié)構(gòu)圖;圖12行/列控制單元中反饋模塊結(jié)構(gòu)圖。具體實(shí)施方式本設(shè)計的簇內(nèi)存儲訪問行列兩級交換電路結(jié)構(gòu)圖如圖1所示,適用于4*4陣列處理器對16個分布式存儲塊的并行訪問,因此需要16組來自處理器端的讀/寫請求接口信息和16組訪問分布式存儲塊的讀/寫信息,表1中只列出了1組讀/寫請求接口信息的情況,簇內(nèi)其他15組讀/寫請求接口信息的引腳含義與之相同。分配模塊電路(allot)輸入輸出接口說明如表2所示;選擇模塊電路(RAM_arbiter)的輸入輸出接口說明如表3所示;行控制單元電路(H_top)的輸入輸出接口說明如表4所示;列控制單元電路(V_top)的輸入輸出接口說明如表5所示;行/列控制單元中使能選擇模塊電路(H_en_select)的輸入輸出接口說明如表6所示;行/列控制單元中寫使能仲裁模塊電路(H_wr_en_arbiter)的輸入輸出接口說明如表7所示;行/列控制單元中讀使能仲裁模塊電路(H_rd_en_arbiter)的輸入輸出接口說明如表8所示;行/列控制單元中寫通路選擇模塊電路(H_mux4to1_wr)的輸入輸出接口說明如表9所示;行/列控制單元中讀通路選擇模塊電路(H_mux4to1_rd)的輸入輸出接口說明如表10所示;行/列控制單元中讀數(shù)據(jù)選擇模塊電路(H_mux4to1_rdata)的輸入輸出接口說明如表11所示;行/列控制單元中反饋模塊電路(H_mux4to1_rw_ack)的輸入輸出接口說明如表12所示。表1,簇內(nèi)存儲訪問行列兩級交換電路接口信號說明:信號名稱信號說明含義clkIN全局時鐘信號。rst_nIN全局復(fù)位信號。idmu_data_enIN數(shù)據(jù)存儲器使能信號。idmu_data_rd_enIN數(shù)據(jù)讀使能信號。idmu_data_wr_enIN數(shù)據(jù)寫使能信號。idmu_data_waddr[12:0]IN數(shù)據(jù)寫地址。idmu_data_raddr[12:0]IN數(shù)據(jù)讀地址。idmu_data_wdata[31:0]IN寫入到數(shù)據(jù)存儲單元的數(shù)據(jù)。idmu_data_rdata[31:0]OUT從數(shù)據(jù)存儲器中讀取到的數(shù)據(jù)。wr_ackOUT數(shù)據(jù)存儲器寫數(shù)據(jù)反饋信號。rd_ackOUT數(shù)據(jù)存儲器讀數(shù)據(jù)反饋信號。表2,分配模塊電路(allot)接口信號說明:信號名稱信號說明含義clkIN全局時鐘信號。rst_nIN全局復(fù)位信號。idmu_data_enIN數(shù)據(jù)存儲器使能信號。idmu_data_rd_enIN數(shù)據(jù)讀使能信號。idmu_data_wr_enIN數(shù)據(jù)寫使能信號。idmu_data_waddr[12:0]IN數(shù)據(jù)寫地址。idmu_data_raddr[12:0]IN數(shù)據(jù)讀地址。idmu_data_wdata[31:0]IN寫入到數(shù)據(jù)存儲單元的數(shù)據(jù)。idmu_data_rdata[31:0]OUT從數(shù)據(jù)存儲器中讀取到的數(shù)據(jù)。wr_ackOUT數(shù)據(jù)存儲器寫數(shù)據(jù)反饋信號。rd_ackOUT數(shù)據(jù)存儲器讀數(shù)據(jù)反饋信號。ram_wrOUT發(fā)送給選擇模塊的寫使能信號。ram_waddr[12:0]OUT發(fā)送給選擇模塊的寫地址。ram_wdata[31:0]OUT發(fā)送給選擇模塊的寫數(shù)據(jù)。ram_rdOUT發(fā)送給選擇模塊的讀使能信號。ram_raddr[12:0]OUT發(fā)送給選擇模塊的讀地址。ram_rdata[31:0]IN接收來自選擇模塊的讀數(shù)據(jù)。bus_wrOUT發(fā)送給列控制單元的寫使能信號。bus_waddr[12:0]OUT發(fā)送給列控制單元的寫地址。bus_wdata[31:0]OUT發(fā)送給列控制單元的寫數(shù)據(jù)。bus_rdOUT發(fā)送給列控制單元的讀使能信號。bus_raddr[12:0]OUT發(fā)送給列控制單元的讀地址。bus_rdata[31:0]IN發(fā)送給列控制單元的讀數(shù)據(jù)。bus_rd_vldIN接收來自總寫模塊的讀數(shù)據(jù)反饋信號。bus_wr_ackIN接收來自總寫模塊的寫數(shù)據(jù)反饋信號。表3,選擇模塊電路(RAM_arbiter)的接口信號說明:信號名稱信號說明含義clkIN全局工作時鐘。rst_nIN全局復(fù)位時鐘。wr_enAIN接收來自分配模塊寫使能信號。wr_addrA[12:0]IN接收來自分配模塊寫地址信號。wr_dataA[31:0]IN接收來自分配模塊寫數(shù)據(jù)信號。rd_enAIN接收來自分配模塊讀使能信號。rd_addrA[12:0]IN接收來自分配模塊讀地址信號。rd_dataA[31:0]OUT發(fā)送給分配模塊讀數(shù)據(jù)信號。wr_enBIN接收來自列控制單元的寫使能信號。wr_addrB[12:0]IN接收來自列控制單元的寫地址信號。wr_dataB[31:0]IN接收來自列控制單元的寫數(shù)據(jù)信號。rd_enBIN接收來自列控制單元的讀使能信號。rd_addrB[12:0]IN接收來自列控制單元的讀地址信號。rd_dataB[31:0]OUT發(fā)送給列控制單元的讀數(shù)據(jù)信號。wr_ackOUT發(fā)送給列控制單元的寫數(shù)據(jù)反饋信號。rd_ackOUT發(fā)送給列控制單元的讀數(shù)據(jù)反饋信號。wr_enRAMOUT發(fā)送給RAM的寫使能信號。wr_addrRAM[8:0]OUT發(fā)送給RAM的寫地址信號。wr_dataRAM[31:0]OUT發(fā)送給RAM的寫數(shù)據(jù)信號。rd_enRAMOUT發(fā)送給RAM的讀使能信號。rd_addrRAM[8:0]OUT發(fā)送給RAM的讀地址信號。rd_dataRAM[31:0]IN接收來自RAM的讀數(shù)據(jù)信號。表4,行控制單元電路(H_top)的輸入輸出接口說明:(其中H_wr_、H_rd_、H_waddr_[12:0]、H_raddr_[12:0]、H_wdata_[31:0]、H_rdata_[31:0]、H_wr_ack、H_rd_ack共有4套端口,序號為0、1、2、3,分別接分配模塊A、B、C、D,表格中只列出了其中1套;HV_wr、HV_rd、HV_waddr[12:0]、HV_raddr[12:0]、HV_wdata[31:0]、HV_rdata[31:0]、HV_wr_ack、HV_rd_ack共有4套端口,序號為0、1、2、3,分別列控制單元0、1、2、3,表格中只列出了其中1套。)信號名稱信號說明含義clkIN全局工作時鐘。Rst_nIN全局復(fù)位時鐘。H_wr_0IN接收來自分配模塊A的寫使能信號。H_rd_0IN接收來自分配模塊A的讀使能信號。H_waddr_0[12:0]IN接收來自分配模塊A的寫地址信號。H_raddr_0[12:0]IN接收來自分配模塊A的讀地址信號。H_wdata_0[31:0]IN接收來自分配模塊A的寫數(shù)據(jù)信號。H_rdata_0[31:0]OUT發(fā)送給分配模塊A的讀數(shù)據(jù)信號。H_wr_ack0OUT發(fā)送給分配模塊A的寫數(shù)據(jù)反饋信號。H_rd_ack0OUT發(fā)送給分配模塊A的讀數(shù)據(jù)反饋信號?!璈V_wr0OUT發(fā)送給列控制單元0的寫使能信號。HV_rd0OUT發(fā)送給列控制單元0的讀使能信號。HV_waddr0[12:0]OUT發(fā)送給列控制單元0的寫地址信號。HV_raddr0[12:0]OUT發(fā)送給列控制單元0的讀地址信號。HV_wdata0[31:0]OUT發(fā)送給列控制單元0的寫數(shù)據(jù)信號。HV_rdata0[31:0]IN接收來自列控制單元0的讀數(shù)據(jù)信號。HV_wr_ack0IN接收來自列控制單元0的寫數(shù)據(jù)反饋信號。HV_rd_ack0IN接收來自列控制單元0的讀數(shù)據(jù)反饋信號?!?,列控制單元電路(V_top)的輸入輸出接口說明:(其中HV_wr_、HV_rd_、HV_waddr_[12:0]、HV_raddr_[12:0]、HV_wdata_[31:0]、HV_rdata_[31:0]、HV_wr_ack、HV_rd_ack共有4套端口,序號為0、1、2、3,分別接行控制單元0、1、2、3,表格中只列出了其中1套;R_wr、R_rd、R_waddr[12:0]、R_raddr[12:0]、R_wdata[31:0]、R_rdata[31:0]、R_wr_ack、R_rd_ack共有4套端口,序號為0、1、2、3,分別選擇模塊A、B、C、D,表格中只列出了其中1套。)信號名稱信號說明含義clkIN全局工作時鐘。rst_nIN全局復(fù)位時鐘。HV_wr_0IN接收來自行控制單元0的寫使能信號。HV_rd_0IN接收來自行控制單元0的讀使能信號。HV_waddr_0[12:0]IN接收來自行控制單元0的寫地址信號。HV_raddr_0[12:0]IN接收來自行控制單元0的讀地址信號。HV_wdata_0[31:0]IN接收來自行控制單元0的寫數(shù)據(jù)信號。HV_rdata_0[31:0]OUT發(fā)送給行控制單元0的讀數(shù)據(jù)信號。HV_wr_ack0OUT發(fā)送給行控制單元0的寫數(shù)據(jù)反饋信號。HV_rd_ack0OUT發(fā)送給行控制單元0的讀數(shù)據(jù)反饋信號?!璕_wr0OUT發(fā)送給選擇模塊A的寫使能信號。R_rd0OUT發(fā)送給選擇模塊A的讀使能信號。R_waddr0[12:0]OUT發(fā)送給選擇模塊A的寫地址信號。R_raddr0[12:0]OUT發(fā)送給選擇模塊A的讀地址信號。R_wdata0[31:0]OUT發(fā)送給選擇模塊A的寫數(shù)據(jù)信號。R_rdata0[31:0]IN接收來自選擇模塊A的讀數(shù)據(jù)信號。R_wr_ack0IN接收來自選擇模塊A的寫數(shù)據(jù)反饋信號。R_rd_ack0IN接收來自選擇模塊A的讀數(shù)據(jù)反饋信號?!?,行/列控制單元中使能選擇模塊電路(H_en_select)的輸入輸出接口說明(其中bus_wr_、bus_rd_、bus_waddr_[12:0]、bus_raddr_[12:0]共有4套端口,序號分別為0、1、2、3,表格中只列出了其中1套;bus_wr_00、bus_wr_01、bus_wr_02、bus_wr_03共有4套端口,序號分別為00、01、02、03、10、11、12、13、20、21、22、23、30、31、32、33,表格中只列出了其中1套,bus_rd_00、bus_rd_01、bus_rd_02、bus_rd_03共有4套端口,序號分別為00、01、02、03、10、11、12、13、20、21、22、23、30、31、32、33,表格中只列出了其中1套。)信號名稱信號說明含義bus_wr_0IN接收的寫使能信號。bus_rd_0IN接收的讀使能信號。bus_waddr_0[12:0]IN接收的寫地址信號。bus_raddr_0[12:0]IN接收的讀地址信號?!璪us_wr_00OUT發(fā)送給寫使能仲裁模塊0的寫使能信號。bus_wr_01OUT發(fā)送給寫使能仲裁模塊1的寫使能信號。bus_wr_02OUT發(fā)送給寫使能仲裁模塊2的寫使能信號。bus_wr_03OUT發(fā)送給寫使能仲裁模塊3的寫使能信號?!璪us_rd_00OUT發(fā)送給讀使能仲裁模塊0的讀使能信號。bus_rd_01OUT發(fā)送給讀使能仲裁模塊1的讀使能信號。bus_rd_02OUT發(fā)送給讀使能仲裁模塊2的讀使能信號。bus_rd_03OUT發(fā)送給讀使能仲裁模塊3的讀使能信號。………………表7,行/列控制單元中寫使能仲裁模塊電路(H_wr_en_arbiter)的輸入輸出接口說明:(其中bus_wr_共有4套端口,序號分別為0、1、2、3,表格中只列出了其中一套。)信號名稱信號說明含義clkIN全局工作時鐘。rst_nIN全局復(fù)位時鐘。bus_wr_0IN接收來自使能選擇模塊的寫使能信號?!瓀r_ackIN接收的寫反饋信號。wr_en[3:0]OUT仲裁的寫使能順序信號。表8,行/列控制單元中讀使能仲裁模塊電路(H_rd_en_arbiter)的輸入輸出接口說明:(其中bus_rd_共有4套端口,序號分別為0、1、2、3,表格中只列出了其中一套。)信號名稱信號說明含義clkIN全局工作時鐘。rst_nIN全局復(fù)位時鐘。bus_rd_0IN接收來自使能選擇模塊的讀使能信號?!璻d_ackIN接收的讀反饋信號。rd_en[3:0]OUT仲裁的讀使能順序信號。表9,行/列控制單元中寫通路選擇模塊電路(H_mux4to1_wr)的輸入輸出接口說明:(其中bus_wr_、bus_waddr_、bus_wdata_共有4套端口,序號分別為0、1、2、3,表格中只列出了其中一套。)信號名稱信號說明含義bus_wr_0IN來自使能選擇模塊的寫使能信號。bus_waddr_0[12:0]IN接收的寫地址信號。bus_wdata_0[31:0]IN接收的寫數(shù)據(jù)信號。………………wr_en[3:0]IN寫使能仲裁模塊輸出的寫使能順序信號。bus_wrOUT寫使能信號。bus_waddr[12:0]OUT寫地址信號。bus_wdata[31:0]OUT寫數(shù)據(jù)信號。表10,行/列控制單元中讀通路選擇模塊電路(H_mux4to1_rd)的輸入輸出接口說明:(其中bus_rd_、bus_raddr_共有4套端口,序號分別為0、1、2、3,表格中只列出了其中一套。)信號名稱信號說明含義bus_rd_0IN來自使能選擇模塊的讀使能信號。bus_raddr_0[12:0]IN接收的讀地址信號?!璻d_en[3:0]IN讀使能仲裁模塊輸出的讀使能順序信號。bus_rdOUT讀使能信號。bus_raddr[12:0]OUT讀地址信號。表11,行/列控制單元中讀數(shù)據(jù)選擇模塊電路(H_mux4to1_rdata)的輸入輸出接口說明:(其中bus_rdata_、rd_en、bus_rdata共有4套端口,序號分別為0、1、2、3,表格中只列出了其中一套。)信號名稱信號說明含義clkIN全局工作時鐘。rst_nIN全局復(fù)位時鐘。bus_rdata_0[31:0]IN接收的讀數(shù)據(jù)信號。rd_en0[3:0]IN讀使能仲裁模塊0輸出的讀使能順序信號。bus_rdata0[31:0]OUT讀數(shù)據(jù)信號?!?2,行/列控制單元中反饋模塊電路(H_mux4to1_rw_ack)的輸入輸出接口說明:(其中v_wr_ack、v_rd_ack、bus_wr_ack、bus_rd_ack共有4套端口,序號分別為0、1、2、3,表格中只列出了其中一套。)信號名稱信號說明含義clkIN全局工作時鐘。rst_nIN全局復(fù)位時鐘。wr_en0[3:0]IN寫使能仲裁模塊0輸出的寫使能順序信號。wr_en1[3:0]IN寫使能仲裁模塊1輸出的寫使能順序信號。wr_en2[3:0]IN寫使能仲裁模塊2輸出的寫使能順序信號。wr_en3[3:0]IN寫使能仲裁模塊3輸出的寫使能順序信號。rd_en0[3:0]IN讀使能仲裁模塊0輸出的讀使能順序信號。rd_en1[3:0]IN讀使能仲裁模塊1輸出的讀使能順序信號。rd_en2[3:0]IN讀使能仲裁模塊2輸出的讀使能順序信號。rd_en3[3:0]IN讀使能仲裁模塊3輸出的讀使能順序信號。v_wr_ack0IN接收的寫反饋信號。v_rd_ack0IN接收的讀反饋信號。bus_wr_ack0OUT寫反饋信號。bus_rd_ack0OUT讀反饋信號。………………電路的Verilog語言描述的核心代碼如下:(其中//后面為剩余端口的注釋說明)moduletop(clk,rst_n,idmu_data_en0,idmu_data_wr_en0,idmu_data_rd_en0,idmu_data_waddr0,idmu_data_raddr0,idmu_data_wdata0,idmu_data_rdata0,wr_ack0,rd_ack0,ram_en0,wr_enRAM0,rd_enRAM0,wr_addrRAM0,rd_addrRAM0,wr_dataRAM0,rd_dataRAM0,idmu_data_en15,idmu_data_wr_en15,idmu_data_rd_en15,idmu_data_waddr15,idmu_data_raddr15,idmu_data_wdata15,idmu_data_rdata15,wr_ack15,rd_ack15,ram_en15,wr_enRAM15,rd_enRAM15,wr_addrRAM15,rd_addrRAM15,wr_dataRAM15,rd_dataRAM15);……BUS_topBUS_top1_init(.clk(clk),.rst_n(rst_n),.b_wr_0(bus_wr0),.b_rd_0(bus_rd0),.b_waddr_0(bus_waddr0),.b_raddr_0(bus_raddr0),.b_wdata_0(bus_wdata0),.b_rdata_0(bus_rdata0),.b_wr_ack0(bus_wr_ack0),.b_rd_ack0(bus_rd_vld0),.R_wr_0(wr_enB0),.R_rd_0(rd_enB0),.R_waddr_0(wr_addrB0),.R_raddr_0(rd_addrB0),.R_wdata_0(wr_dataB0),.R_rdata_0(rd_dataB0),.R_wr_ack0(wr_ackB0),.R_rd_ack0(rd_ackB0));......//(此處省略的代碼為該模塊剩下的15組信號,接口分別為.b_wr_1~15(bus_wr1~15),.b_rd_1~15(bus_rd1~15),.b_waddr_1~14(bus_waddr1~15),.b_raddr_1~15(bus_raddr1~15),.b_wdata_1~15(bus_wdata1~15),.b_rdata_1~15(bus_rdata1~15),.b_wr_ack1~15(bus_wr_ack1~15),.b_rd_ack1~15(bus_rd_vld1~15),.R_wr_1~15(wr_enB1~15),.R_rd_0(rd_enB1~15),.R_waddr_1~15(wr_addrB1~15),.R_raddr_1~15(rd_addrB1~15),.R_wdata_1~15(wr_dataB1~15),.R_rdata_1~15(rd_dataB1~15),.R_wr_ack1~15(wr_ackB1~15),.R_rd_ack1~15(rd_ackB1~15).)……RAM_allot_top#(.id(4'd0))RAM_allot_top0_init(.clk(clk),.rst_n(rst_n),.wr_ack(wr_ack0),.rd_ack(rd_ack0),.idmu_data_en(idmu_data_en0),.idmu_data_wr_en(idmu_data_wr_en0),.idmu_data_rd_en(idmu_data_rd_en0),.idmu_data_waddr(idmu_data_waddr0),.idmu_data_raddr(idmu_data_raddr0),.idmu_data_wdata(idmu_data_wdata0),.idmu_data_rdata(idmu_data_rdata0),.bus_wr(bus_wr0),.bus_rd(bus_rd0),.bus_waddr(bus_waddr0),.bus_raddr(bus_raddr0),.bus_wdata(bus_wdata0),.bus_rdata(bus_rdata0),.bus_wr_ack(bus_wr_ack0),.bus_rd_vld(bus_rd_vld0),.wr_enB(wr_enB0),.rd_enB(rd_enB0),.wr_addrB(wr_addrB0),.rd_addrB(rd_addrB0),.wr_dataB(wr_dataB0),.rd_dataB(rd_dataB0),.wr_ackB(wr_ackB0),.rd_ackB(rd_ackB0),.ram_en(ram_en0),.wr_enRAM(wr_enRAM0),.rd_enRAM(rd_enRAM0),.wr_addrRAM(wr_addrRAM0),.rd_addrRAM(rd_addrRAM0),.wr_dataRAM(wr_dataRAM0),.rd_dataRAM(rd_dataRAM0));//(此處省略的代碼為剩下的15個實(shí)例化模塊信號,模塊編號分別為1~15,所傳參數(shù)分別為1~15,主要接口分別為.wr_ack(wr_ack1~15),.rd_ack(rd_ack1~15),.idmu_data_en(idmu_data_en1~15),.idmu_data_wr_en(idmu_data_wr_en1~15),.idmu_data_rd_en(idmu_data_rd_en1~15),.idmu_data_waddr(idmu_data_waddr1~15),.idmu_data_raddr(idmu_data_raddr1~15),.idmu_data_wdata(idmu_data_wdata1~15),.idmu_data_rdata(idmu_data_rdata1~15),.bus_wr(bus_wr1~15),.bus_rd(bus_rd1~15),.bus_waddr(bus_waddr1~15),.bus_raddr(bus_raddr1~15),.bus_wdata(bus_wdata1~15),.bus_rdata(bus_rdata1~15),.bus_wr_ack(bus_wr_ack1~15),.bus_rd_vld(bus_rd_vld1~15),.wr_enB(wr_enB1~15),.rd_enB(rd_enB1~15),.wr_addrB(wr_addrB1~15),.rd_addrB(rd_addrB1~15),.wr_dataB(wr_dataB1~15),.rd_dataB(rd_dataB1~15),.wr_ackB(wr_ackB1~15),.rd_ackB(rd_ackB1~15),.ram_en(ram_en1~15),.wr_enRAM(wr_enRAM1~15),.rd_enRAM(rd_enRAM1~15),.wr_addrRAM(wr_addrRAM1~15),.rd_addrRAM(rd_addrRAM1~15),.wr_dataRAM(wr_dataRAM1~15),.rd_dataRAM(rd_dataRAM1~15).)endmodulemoduleRAM_allot_top(clk,rst_n,idmu_data_en,idmu_data_wr_en,idmu_data_rd_en,idmu_data_waddr,idmu_data_raddr,idmu_data_wdata,idmu_data_rdata,wr_ack,rd_ack,bus_wr,bus_rd,bus_waddr,bus_raddr,bus_wdata,bus_rdata,bus_wr_ack,bus_rd_vld,wr_enB,rd_enB,wr_addrB,rd_addrB,wr_dataB,rd_dataB,wr_ackB,rd_ackB,ram_en,wr_enRAM,rd_enRAM,wr_addrRAM,rd_addrRAM,wr_dataRAM,rd_dataRAM);……parameterid=4'b0001;allot#(.local_id(id))allot_init(.clk(clk),.rst_n(rst_n),.idmu_data_en(idmu_data_en),.idmu_data_wr_en(idmu_data_wr_en),.idmu_data_rd_en(idmu_data_rd_en),.idmu_data_waddr(idmu_data_waddr),.idmu_data_raddr(idmu_data_raddr),.idmu_data_wdata(idmu_data_wdata),.idmu_data_rdata(idmu_data_rdata),.wr_ack(wr_ack),.rd_ack(rd_ack),.ram_wr(ram_wr),.ram_rd(ram_rd),.ram_waddr(ram_waddr),.ram_raddr(ram_raddr),.ram_wdata(ram_wdata),.ram_rdata(ram_rdata),.bus_wr(bus_wr),.bus_rd(bus_rd),.bus_waddr(bus_waddr),.bus_raddr(bus_raddr),.bus_wdata(bus_wdata),.bus_rdata(bus_rdata),.bus_wr_ack(bus_wr_ack),.bus_rd_vld(bus_rd_vld));RAM_arbiterram_arbiter_init(.clk(clk),.rst_n(rst_n),.ram_en(ram_en),.wr_enA(ram_wr),.wr_addrA(ram_waddr),.wr_dataA(ram_wdata),.rd_enA(ram_rd),.rd_addrA(ram_raddr),.rd_dataA(ram_rdata),.wr_enB(wr_enB),.wr_addrB(wr_addrB),.wr_dataB(wr_dataB),.wr_ackB(wr_ackB),.rd_enB(rd_enB),.rd_addrB(rd_addrB),.rd_dataB(rd_dataB),.rd_ackB(rd_ackB),.wr_enRAM(wr_enRAM),.wr_addrRAM(wr_addrRAM),.wr_dataRAM(wr_dataRAM),.rd_enRAM(rd_enRAM),.rd_addrRAM(rd_addrRAM),.rd_dataRAM(rd_dataRAM));endmodulemoduleallot(clk,rst_n,idmu_data_en,idmu_data_wr_en,idmu_data_rd_en,idmu_data_waddr,idmu_data_wdata,idmu_data_raddr,idmu_data_rdata,wr_ack,rd_ack,ram_wr,ram_rd,ram_waddr,ram_raddr,ram_wdata,ram_rdata,bus_wr,bus_rd,bus_waddr,bus_raddr,bus_wdata,bus_rdata,bus_wr_ack,bus_rd_vld);……parameterlocal_id=4'b0001;assigndata_wr=idmu_data_en&idmu_data_wr_en;assigndata_rd=idmu_data_en&idmu_data_rd_en;always@(posedgeclkornegedgerst_n)beginif(~rst_n)begindata_wr_flag<=1'b0;data_wdata<=32'd0;data_waddr<=16'd0;endelseif(wr_ack)begindata_wr_flag<=1'b0;data_wdata<=32'd0;data_waddr<=16'd0;endelseif(data_wr==1'b1)begindata_wr_flag<=1'b1;data_wdata<=idmu_data_wdata;data_waddr<=idmu_data_waddr;endelsebegindata_wr_flag<=data_wr_flag;data_wdata<=data_wdata;data_waddr<=data_waddr;endendalways@(posedgeclkornegedgerst_n)beginif(~rst_n)begindata_rd_flag<=1'b0;data_raddr<=16'd0;endelseif(rd_ack==1'b1)begindata_rd_flag<=1'b0;data_raddr<=16'd0;endelseif(data_rd==1'b1)begindata_rd_flag<=1'b1;data_raddr<=idmu_data_raddr;endelsebegindata_rd_flag<=data_rd_flag;data_raddr<=data_raddr;endendassignram_wr=data_wr&(idmu_data_waddr[12:9]==local_id);assignram_rd=data_rd&(idmu_data_raddr[12:9]==local_id);assignbus_wr=(data_wr&(idmu_data_waddr[12:9]!=local_id))||(data_wr_flag&(data_waddr[12:9]!=local_id));assignbus_rd=(data_rd&(idmu_data_raddr[12:9]!=local_id))||(data_rd_flag&(rd_ack==1'b0)&(data_raddr[12:9]!=local_id));assignram_wdata=idmu_data_wdata;assignbus_wdata=(data_wr==1'b1)?idmu_data_wdata:(data_wr_flag==1'b1)?data_wdata:32'd0;assignwr_ack=bus_wr_ack|ram_wr;assignram_waddr=idmu_data_waddr;assignram_raddr=idmu_data_raddr;assignbus_waddr=(data_wr==1'b1)?idmu_data_waddr:(data_wr_flag==1'b1)?data_waddr:16'd0;assignbus_raddr=(data_rd==1'b1)?idmu_data_raddr:(data_rd_flag==1'b1&(rd_ack==1'b0))?data_raddr:16'd0;always@(posedgeclkornegedgerst_n)beginif(~rst_n)ram_rd1<=1'd0;elseram_rd1<=ram_rd;endassignidmu_data_rdata=(ram_rd1==1'd1)?ram_rdata:((ram_rd1==1'd0)&(bus_rd_vld==1'd1))?bus_rdata:32'd0;assignrd_ack=ram_rd1|bus_rd_vld;endmodulemoduleRAM_arbiter(clk,rst_n,ram_en,wr_enA,wr_enB,wr_addrA,wr_addrB,wr_dataA,wr_dataB,wr_ackB,rd_enA,rd_enB,rd_addrA,rd_addrB,rd_dataA,rd_dataB,rd_ackB,wr_enRAM,rd_enRAM,wr_addrRAM,rd_addrRAM,wr_dataRAM,rd_dataRAM);……assignram_en=wr_enRAM|rd_enRAM;assignwr_enRAM=wr_enA|wr_enB;assignwr_ackB=~wr_enA&wr_enB;assignwr_addrRAM=wr_enA?wr_addrA[8:0]:wr_addrB[8:0];assignwr_dataRAM=wr_enA?wr_dataA:wr_dataB;assignrd_enRAM=rd_enA|rd_enB;assignrd_ackB=~rd_enA_reg&rd_enB_reg;always@(posedgeclkornegedgerst_n)if(~rst_n)beginrd_enA_reg<=1'b0;rd_enB_reg<=1'b0;endelsebeginrd_enA_reg<=rd_enA;rd_enB_reg<=rd_enB;endassignrd_addrRAM=rd_enA?rd_addrA[8:0]:rd_addrB[8:0];assignrd_dataB=rd_dataRAM;assignrd_dataA=rd_dataRAM;endmodulemoduleBUS_top(clk,rst_n,b_wr_0,b_rd_0,b_waddr_0,b_raddr_0,b_wdata_0,b_rdata_0,b_wr_ack0,b_rd_ack0,R_wr_0,R_rd_0,R_waddr_0,R_raddr_0,R_wdata_0,R_rdata_0,R_wr_ack0,R_rd_ack0,b_wr_15,b_rd_15,b_waddr_15,b_raddr_15,b_wdata_15,b_rdata_15,b_wr_ack15,b_rd_ack15,R_wr_15,R_rd_15,R_waddr_15,R_raddr_15,R_wdata_15,R_rdata_15,R_wr_ack15,R_rd_ack15);……H_topH_top0(.clk(clk),.rst_n(rst_n),.H_wr_0(b_wr_0),.H_rd_0(b_rd_0),.H_waddr_0(b_waddr_0),.H_raddr_0(b_raddr_0),.H_wdata_0(b_wdata_0),.H_rdata_0(b_rdata_0),.H_wr_ack0(b_wr_ack0),.H_rd_ack0(b_rd_ack0),.H_wr_1(b_wr_4),.H_rd_1(b_rd_4),.H_waddr_1(b_waddr_4),.H_raddr_1(b_raddr_4),.H_wdata_1(b_wdata_4),.H_rdata_1(b_rdata_4),.H_wr_ack1(b_wr_ack4),.H_rd_ack1(b_rd_ack4),.H_wr_2(b_wr_8),.H_rd_2(b_rd_8),.H_waddr_2(b_waddr_8),.H_raddr_2(b_raddr_8),.H_wdata_2(b_wdata_8),.H_rdata_2(b_rdata_8),.H_wr_ack2(b_wr_ack8),.H_rd_ack2(b_rd_ack8),.H_wr_3(b_wr_12),.H_rd_3(b_rd_12),.H_waddr_3(b_waddr_12),.H_raddr_3(b_raddr_12),.H_wdata_3(b_wdata_12),.H_rdata_3(b_rdata_12),.H_wr_ack3(b_wr_ack12),.H_rd_ack3(b_rd_ack12),.HV_wr0(HV_wr_0A),.HV_rd0(HV_rd_0A),.HV_waddr0(HV_waddr_0A),.HV_raddr0(HV_raddr_0A),.HV_wdata0(HV_wdata_0A),.HV_rdata0(HV_rdata_0A),.HV_wr_ack0(HV_wr_ack0A),.HV_rd_ack0(HV_rd_ack0A),.HV_wr1(HV_wr_1A),.HV_rd1(HV_rd_1A),.HV_waddr1(HV_waddr_1A),.HV_raddr1(HV_raddr_1A),.HV_wdata1(HV_wdata_1A),.HV_rdata1(HV_rdata_1A),.HV_wr_ack1(HV_wr_ack1A),.HV_rd_ack1(HV_rd_ack1A),.HV_wr2(HV_wr_2A),.HV_rd2(HV_rd_2A),.HV_waddr2(HV_waddr_2A),.HV_raddr2(HV_raddr_2A),.HV_wdata2(HV_wdata_2A),.HV_rdata2(HV_rdata_2A),.HV_wr_ack2(HV_wr_ack2A),.HV_rd_ack2(HV_rd_ack2A),.HV_wr3(HV_wr_3A),.HV_rd3(HV_rd_3A),.HV_waddr3(HV_waddr_3A),.HV_raddr3(HV_raddr_3A),.HV_wdata3(HV_wdata_3A),.HV_rdata3(HV_rdata_3A),.HV_wr_ack3(HV_wr_ack3A),.HV_rd_ack3(HV_rd_ack3A));......//(此處省略的代碼為剩下的3個實(shí)例化模塊信號,模塊編號分別為1、2、3,主要接口分別為.H_wr_0(b_wr_1、2、3),.H_rd_0(b_rd_1、2、3),.H_waddr_0(b_waddr_1、2、3),.H_raddr_0(b_raddr_1、2、3),.H_wdata_0(b_wdata_1、2、3),.H_rdata_0(b_rdata_1、2、3),.H_wr_ack0(b_wr_ack1、2、3),.H_rd_ack0(b_rd_ack1、2、3),.H_wr_1(b_wr_5、6、7),.H_rd_1(b_rd_5、6、7),.H_waddr_1(b_waddr_5、6、7),.H_raddr_1(b_raddr_5、6、7),.H_wdata_1(b_wdata_5、6、7),.H_rdata_1(b_rdata_5、6、7),.H_wr_ack1(b_wr_ack5、6、7),.H_rd_ack1(b_rd_ack5、6、7),.H_wr_2(b_wr_9、10、11),.H_rd_2(b_rd_9、10、11),.H_waddr_2(b_waddr_9、10、11),.H_raddr_2(b_raddr_9、10、11),.H_wdata_2(b_wdata_9、10、11),.H_rdata_2(b_rdata_9、10、11),.H_wr_ack2(b_wr_ack9、10、11),.H_rd_ack2(b_rd_ack9、10、11),.H_wr_3(b_wr_13、14、15),.H_rd_3(b_rd_13、14、15),.H_waddr_3(b_waddr_13、14、15),.H_raddr_3(b_raddr_13、14、15),.H_wdata_3(b_wdata_13、14、15),.H_rdata_3(b_rdata_13、14、15),.H_wr_ack3(b_wr_ack13、14、15),.H_rd_ack3(b_rd_ack13、14、15),.HV_wr0(HV_wr_0B、0C、0D),.HV_rd0(HV_rd_0B、0C、0D),.HV_waddr0(HV_waddr_0B、0C、0D),.HV_raddr0(HV_raddr_0B、0C、0D),.HV_wdata0(HV_wdata_0B、0C、0D),.HV_rdata0(HV_rdata_0B、0C、0D),.HV_wr_ack0(HV_wr_ack0B、0C、0D),.HV_rd_ack0(HV_rd_ack0B、0C、0D),.HV_wr1(HV_wr_1B、1C、1D),.HV_rd1(HV_rd_1B、1C、1D),.HV_waddr1(HV_waddr_1B、1C、1D),.HV_raddr1(HV_raddr_1B、1C、1D),.HV_wdata1(HV_wdata_1B、1C、1D),.HV_rdata1(HV_rdata_1B、1C、1D),.HV_wr_ack1(HV_wr_ack1B、1C、1D),.HV_rd_ack1(HV_rd_ack1B、1C、1D),.HV_wr2(HV_wr_2B、2C、2D),.HV_rd2(HV_rd_2B、2C、2D),.HV_waddr2(HV_waddr_2B、2C、2D),.HV_raddr2(HV_raddr_2B、2C、2D),.HV_wdata2(HV_wdata_2B、2C、2D),.HV_rdata2(HV_rdata_2B、2C、2D),.HV_wr_ack2(HV_wr_ack2B、2C、2D),.HV_rd_ack2(HV_rd_ack2B、2C、2D),.HV_wr3(HV_wr_3B、3C、3D),.HV_rd3(HV_rd_3B、3C、3D),.HV_waddr3(HV_waddr_3B、3C、3D),.HV_raddr3(HV_raddr_3B、3C、3D),.HV_wdata3(HV_wdata_3B、3C、3D),.HV_rdata3(HV_rdata_3B、3C、3D),.HV_wr_ack3(HV_wr_ack3B、3C、3D),.HV_rd_ack3(HV_rd_ack3B、3C、3D).)V_topV_top0(.clk(clk),.rst_n(rst_n),.HV_wr_0(HV_wr_0A),.HV_rd_0(HV_rd_0A),.HV_waddr_0(HV_waddr_0A),.HV_raddr_0(HV_raddr_0A),.HV_wdata_0(HV_wdata_0A),.HV_rdata_0(HV_rdata_0A),.HV_wr_ack0(HV_wr_ack0A),.HV_rd_ack0(HV_rd_ack0A),.HV_wr_1(HV_wr_0B),.HV_rd_1(HV_rd_0B),.HV_waddr_1(HV_waddr_0B),.HV_raddr_1(HV_raddr_0B),.HV_wdata_1(HV_wdata_0B),.HV_rdata_1(HV_rdata_0B),.HV_wr_ack1(HV_wr_ack0B),.HV_rd_ack1(HV_rd_ack0B),.HV_wr_2(HV_wr_0C),.HV_rd_2(HV_rd_0C),.HV_waddr_2(HV_waddr_0C),.HV_raddr_2(HV_raddr_0C),.HV_wdata_2(HV_wdata_0C),.HV_rdata_2(HV_rdata_0C),.HV_wr_ack2(HV_wr_ack0C),.HV_rd_ack2(HV_rd_ack0C),.HV_wr_3(HV_wr_0D),.HV_rd_3(HV_rd_0D),.HV_waddr_3(HV_waddr_0D),.HV_raddr_3(HV_raddr_0D),.HV_wdata_3(HV_wdata_0D),.HV_rdata_3(HV_rdata_0D),.HV_wr_ack3(HV_wr_ack0D),.HV_rd_ack3(HV_rd_ack0D),.R_wr0(R_wr_0),.R_rd0(R_rd_0),.R_waddr0(R_waddr_0),.R_raddr0(R_raddr_0),.R_wdata0(R_wdata_0),.R_rdata0(R_rdata_0),.R_wr_ack0(R_wr_ack0),.R_rd_ack0(R_rd_ack0),.R_wr1(R_wr_1),.R_rd1(R_rd_1),.R_waddr1(R_waddr_1),.R_raddr1(R_raddr_1),.R_wdata1(R_wdata_1),.R_rdata1(R_rdata_1),.R_wr_ack1(R_wr_ack1),.R_rd_ack1(R_rd_ack1),.R_wr2(R_wr_2),.R_rd2(R_rd_2),.R_waddr2(R_waddr_2),.R_raddr2(R_raddr_2),.R_wdata2(R_wdata_2),.R_rdata2(R_rdata_2),.R_wr_ack2(R_wr_ack2),.R_rd_ack2(R_rd_ack2),.R_wr3(R_wr_3),.R_rd3(R_rd_3),.R_waddr3(R_waddr_3),.R_raddr3(R_raddr_3),.R_wdata3(R_wdata_3),.R_rdata3(R_rdata_3),.R_wr_ack3(R_wr_ack3),.R_rd_ack3(R_rd_ack3));......//(此處省略的代碼為剩下的3個實(shí)例化模塊信號,模塊編號分別為1、2、3,主要接口分別為.HV_wr_0(HV_wr_1A、2A、3A),.HV_rd_0(HV_rd_1A、2A、3A),.HV_waddr_0(HV_waddr_1A、2A、3A),.HV_raddr_0(HV_raddr_1A、2A、3A),.HV_wdata_0(HV_wdata_1A、2A、3A),.HV_rdata_0(HV_rdata_1A、2A、3A),.HV_wr_ack0(HV_wr_ack1A、2A、3A),.HV_rd_ack0(HV_rd_ack1A、2A、3A),.HV_wr_1(HV_wr_1B、2B、3B),.HV_rd_1(HV_rd_1B、2B、3B),.HV_waddr_1(HV_waddr_1B、2B、3B),.HV_raddr_1(HV_raddr_1B、2B、3B),.HV_wdata_1(HV_wdata_1B、2B、3B),.HV_rdata_1(HV_rdata_1B、2B、3B),.HV_wr_ack1(HV_wr_ack1B、2B、3B),.HV_rd_ack1(HV_rd_ack1B、2B、3B),.HV_wr_2(HV_wr_1C、2C、3C),.HV_rd_2(HV_rd_1C、2C、3C),.HV_waddr_2(HV_waddr_1C、2C、3C),.HV_raddr_2(HV_raddr_1C、2C、3C),.HV_wdata_2(HV_wdata_1C、2C、3C),.HV_rdata_2(HV_rdata_1C、2C、3C),.HV_wr_ack2(HV_wr_ack1C、2C、3C),.HV_rd_ack2(HV_rd_ack1C、2C、3C),.HV_wr_3(HV_wr_1D、2D、3D),.HV_rd_3(HV_rd_1D、2D、3D),.HV_waddr_3(HV_waddr_1D、2D、3D),.HV_raddr_3(HV_raddr_1D、2D、3D),.HV_wdata_3(HV_wdata_1D、2D、3D),.HV_rdata_3(HV_rdata_1D、2D、3D),.HV_wr_ack3(HV_wr_ack1D、2D、3D),.HV_rd_ack3(HV_rd_ack1D、2D、3D),.R_wr0(R_wr_4、8、12),.R_rd0(R_rd_4、8、12),.R_waddr0(R_waddr_4、8、12),.R_raddr0(R_raddr_4、8、12),.R_wdata0(R_wdata_4、8、12),.R_rdata0(R_rdata_4、8、12),.R_wr_ack0(R_wr_ack4、8、12),.R_rd_ack0(R_rd_ack4、8、12),.R_wr1(R_wr_5、9、13),.R_rd1(R_rd_5、9、13),.R_waddr1(R_waddr_5、9、13),.R_raddr1(R_raddr_5、9、13),.R_wdata1(R_wdata_5、9、13),.R_rdata1(R_rdata_5、9、13),.R_wr_ack1(R_wr_ack5、9、13),.R_rd_ack1(R_rd_ack5、9、13),.R_wr2(R_wr_6、10、14),.R_rd2(R_rd_6、10、14),.R_waddr2(R_waddr_6、10、14),.R_raddr2(R_raddr_6、10、14),.R_wdata2(R_wdata_6、10、14),.R_rdata2(R_rdata_6、10、14),.R_wr_ack2(R_wr_ack6、10、14),.R_rd_ack2(R_rd_ack6、10、14),.R_wr3(R_wr_7、11、15),.R_rd3(R_rd_7、11、15),.R_waddr3(R_waddr_7、11、15),.R_raddr3(R_raddr_7、11、15),.R_wdata3(R_wdata_7、11、15),.R_rdata3(R_rdata_7、11、15),.R_wr_ack3(R_wr_ack7、11、15),.R_rd_ack3(R_rd_ack7、11、15).)endmodulemoduleH_top(clk,rst_n,H_wr_0,H_rd_0,H_waddr_0,H_raddr_0,H_wdata_0,H_rdata_0,H_wr_ack0,H_rd_ack0,HV_wr0,HV_rd0,HV_waddr0,HV_raddr0,HV_wdata0,HV_rdata0,HV_wr_ack0,HV_rd_ack0,……H_wr_3,H_rd_3,H_waddr_3,H_raddr_3,H_wdata_3,H_rdata_3,H_wr_ack3,H_rd_ack3,HV_wr3,HV_rd3,HV_waddr3,HV_raddr3,HV_wdata3,HV_rdata3,HV_wr_ack3,HV_rd_ack3);……H_en_selectH_en_select(.bus_wr_0(H_wr_0),.bus_rd_0(H_rd_0),.bus_waddr_0(H_waddr_0),.bus_raddr_0(H_raddr_0),.bus_wr_00(wr00),.bus_wr_01(wr01),.bus_wr_02(wr02),.bus_wr_03(wr03),.bus_rd_00(rd00),.bus_rd_01(rd01),.bus_rd_02(rd02),.bus_rd_03(rd03));......//(此處省略的代碼為該模塊剩下的3組信號,接口分別為.bus_wr_1(H_wr_1、2、3),.bus_rd_1(H_rd_1、2、3),.bus_waddr_1(H_waddr_1、2、3),.bus_raddr_1(H_raddr_1、2、3)..bus_wr_10(wr10),.bus_wr_11(wr11),.bus_wr_12(wr12),.bus_wr_13(wr13),.bus_wr_20(wr20),.bus_wr_21(wr21),.bus_wr_22(wr22),.bus_wr_23(wr23),.bus_wr_30(wr30),.bus_wr_31(wr31),.bus_wr_32(wr32),.bus_wr_33(wr33),.bus_rd_10(rd10),.bus_rd_11(rd11),.bus_rd_12(rd12),.bus_rd_13(rd13),.bus_rd_20(rd20),.bus_rd_21(rd21),.bus_rd_22(rd22),.bus_rd_23(rd23),.bus_rd_30(rd30),.bus_rd_31(rd31),.bus_rd_32(rd32),.bus_rd_33(rd33).)H_wr_en_arbiterH_wr_en_arbiter0(.wr_ack(HV_wr_ack0),.clk(clk),.rst_n(rst_n),.bus_wr_0(wr00),.bus_wr_1(wr10),.bus_wr_2(wr20),.bus_wr_3(wr30),.wr_en(wr0));......//(此處省略的代碼為該模塊剩下的3組信號,接口分別為.bus_wr_0(wr01、02、03),.bus_wr_1(wr11、12、13),.bus_wr_2(wr21、22、23),.bus_wr_3(wr31、32、33),.wr_en(wr1、2、3).)H_rd_en_arbiterH_rd_en_arbiter0(.rd_ack(HV_rd_ack0),.clk(clk),.rst_n(rst_n),.bus_rd_0(rd00),.bus_rd_1(rd10),.bus_rd_2(rd20),.bus_rd_3(rd30),.rd_en(rd0));......//(此處省略的代碼為該模塊剩下的3組信號,接口分別為.bus_rd_0(wr01、02、03),.bus_rd_1(wr11、12、13),.bus_rd_2(wr21、22、23),.bus_rd_3(wr31、32、33),.rd_en(wr1、2、3).)H_mux4to1_wrH_mux4to1_wr0(.bus_wr_0(H_wr_0),.bus_wr_1(H_wr_1),.bus_wr_2(H_wr_2),.bus_wr_3(H_wr_3),.bus_waddr_0(H_waddr_0),.bus_waddr_1(H_waddr_1),.bus_waddr_2(H_waddr_2),.bus_waddr_3(H_waddr_3),.bus_wdata_0(H_wdata_0),.bus_wdata_1(H_wdata_1),.bus_wdata_2(H_wdata_2),.bus_wdata_3(H_wdata_3),.wr_en(wr0),.bus_wr(HV_wr0),.bus_waddr(HV_waddr0),.bus_wdata(HV_wdata0));......//(此處省略的代碼為剩下的3個實(shí)例化模塊信號,模塊編號分別為1、2、3,主要接口分別為.bus_wr_0(H_wr_0),.bus_wr_1(H_wr_1),.bus_wr_2(H_wr_2),.bus_wr_3(H_wr_3),.bus_waddr_0(H_waddr_0),.bus_waddr_1(H_waddr_1),.bus_waddr_2(H_waddr_2),.bus_waddr_3(H_waddr_3),.bus_wdata_0(H_wdata_0),.bus_wdata_1(H_wdata_1),.bus_wdata_2(H_wdata_2),.bus_wdata_3(H_wdata_3),.wr_en(wr1、2、3),.bus_wr(HV_wr1、2、3),.bus_waddr(HV_waddr1、2、3),.bus_wdata(HV_wdata1、2、3).)H_mux4to1_rdH_mux4to1_rd0(.bus_rd_0(H_rd_0),.bus_rd_1(H_rd_1),.bus_rd_2(H_rd_2),.bus_rd_3(H_rd_3),.bus_raddr_0(H_raddr_0),.bus_raddr_1(H_raddr_1),.bus_raddr_2(H_raddr_2),.bus_raddr_3(H_raddr_3),.rd_en(rd0),.bus_rd(HV_rd0),.bus_raddr(HV_raddr0));......//(此處省略的代碼為剩下的3個實(shí)例化模塊信號,模塊編號分別為1、2、3,主要接口分別為.bus_rd_0(H_rd_0),.bus_rd_1(H_rd_1),.bus_rd_2(H_rd_2),.bus_rd_3(H_rd_3),.bus_raddr_0(H_raddr_0),.bus_raddr_1(H_raddr_1),.bus_raddr_2(H_raddr_2),.bus_raddr_3(H_raddr_3),.rd_en(rd1、2、3),.bus_rd(HV_rd1、2、3),.bus_raddr(HV_raddr1、2、3).)H_mux4to1_rdataH_mux4to1_rdata(.clk(clk),.rst_n(rst_n),.bus_rdata_0(HV_rdata0),.rd_en0(rd0),.bus_rdata0(H_rdata_0));......//(此處省略的代碼為該模塊剩下的3組信號,接口分別為.bus_rdata_1(HV_rdata1、2、3),.rd_en1(rd1、2、3),.bus_rdata1(H_rdata_1、2、3).)H_mux4to1_rw_ackH_mux4to1_rw_ack(.clk(clk),.rst_n(rst_n),.wr_en0(wr0),.rd_en0(rd0),.v_wr_ack0(HV_wr_ack0),.v_rd_ack0(HV_rd_ack0),.bus_wr_ack0(H_wr_ack0),.bus_rd_ack0(H_rd_ack0));......//(此處省略的代碼為該模塊剩下的3組信號,接口分別為.wr_en1(wr1、2、3),.rd_en1(rd1、2、3),.v_wr_ack1(HV_wr_ack1、2、3),.v_rd_ack1(HV_rd_ack1、2、3),.bus_wr_ack1(H_wr_ack1、2、3),.bus_rd_ack1(H_rd_ack1、2、3).)endmodulemoduleV_top(clk,rst_n,HV_wr_0,HV_rd_0,HV_waddr_0,HV_raddr_0,HV_wdata_0,HV_rdata_0,HV_wr_ack0,HV_rd_ack0,R_wr0,R_rd0,R_waddr0,R_raddr0,R_wdata0,R_rdata0,R_wr_ack0,R_rd_ack0,……HV_wr_3,HV_rd_3,HV_waddr_3,HV_raddr_3,HV_wdata_3,HV_rdata_3,HV_wr_ack3,HV_rd_ack3,R_wr3,R_rd3,R_waddr3,R_raddr3,R_wdata3,R_rdata3,R_wr_ack3,R_rd_ack3);……H_en_selectH_en_select(.bus_wr_0(HV_wr_0),.bus_rd_0(HV_rd_0),.bus_waddr_0(HV_waddr_0),.bus_raddr_0(HV_raddr_0),.bus_wr_00(wr00),.bus_wr_01(wr01),.bus_wr_02(wr02),.bus_wr_03(wr03),.bus_rd_00(rd00),.bus_rd_01(rd01),.bus_rd_02(rd02),.bus_rd_03(rd03),......//(此處省略的代碼為該模塊剩下的3組信號,接口分別為.bus_wr_1(HV_wr_1、2、3),.bus_rd_1(HV_rd_1、2、3),.bus_waddr_1(HV_waddr_1、2、3),.bus_raddr_1(HV_raddr_1、2、3)..bus_wr_10(wr10),.bus_wr_11(wr11),.bus_wr_12(wr12),.bus_wr_13(wr13),.bus_wr_20(wr20),.bus_wr_21(wr21),.bus_wr_22(wr22),.bus_wr_23(wr23),.bus_wr_30(wr30),.bus_wr_31(wr31),.bus_wr_32(wr32),.bus_wr_33(wr33),.bus_rd_10(rd10),.bus_rd_11(rd11),.bus_rd_12(rd12),.bus_rd_13(rd13),.bus_rd_20(rd20),.bus_rd_21(rd21),.bus_rd_22(rd22),.bus_rd_23(rd23),.bus_rd_30(rd30),.bus_rd_31(rd31),.bus_rd_32(rd32),.bus_rd_33(rd33).)H_wr_en_arbiterH_wr_en_arbiter0(.wr_ack(R_wr_ack0),.clk(clk),.rst_n(rst_n),.bus_wr_0(wr00),.bus_wr_1(wr10),.bus_wr_2(wr20),.bus_wr_3(wr30),.wr_en(wr0));......//(此處省略的代碼為剩下的3個實(shí)例化模塊信號,模塊編號分別為1、2、3,主要接口分別為.wr_ack(R_wr_ack1),.bus_wr_0(wr01),.bus_wr_1(wr11),.bus_wr_2(wr21),.bus_wr_3(wr31),.wr_en(wr1);.wr_ack(R_wr_ack2),.bus_wr_0(wr02),.bus_wr_1(wr12),.bus_wr_2(wr22),.bus_wr_3(wr32),.wr_en(wr2);.wr_ack(R_wr_ack3),.bus_wr_0(wr03),.bus_wr_1(wr13),.bus_wr_2(wr23),.bus_wr_3(wr33),.wr_en(wr3).)H_rd_en_arbiterH_rd_en_arbiter0(.rd_ack(R_rd_ack0),.clk(clk),.rst_n(rst_n),.bus_rd_0(rd00),.bus_rd_1(rd10),.bus_rd_2(rd20),.bus_rd_3(rd30),.rd_en(rd0));......//(此處省略的代碼為剩下的3個實(shí)例化模塊信號,模塊編號分別為1、2、3,主要接口分別為.rd_ack(R_rd_ack1),.bus_rd_0(rd01),.bus_rd_1(rd11),.bus_rd_2(rd21),.bus_rd_3(rd31),.rd_en(rd1);.rd_ack(R_rd_ack2),.bus_rd_0(rd02),.bus_rd_1(rd12),.bus_rd_2(rd22),.bus_rd_3(rd32),.rd_en(rd2);.rd_ack(R_rd_ack3),.bus_rd_0(rd03),.bus_rd_1(rd13),.bus_rd_2(rd23),.bus_rd_3(rd33),.rd_en(rd3).)H_mux4to1_wrH_mux4to1_wr0(.bus_wr_0(HV_wr_0),.bus_wr_1(HV_wr_1),.bus_wr_2(HV_wr_2),.bus_wr_3(HV_wr_3),.bus_waddr_0(HV_waddr_0),.bus_waddr_1(HV_waddr_1),.bus_waddr_2(HV_waddr_2),.bus_waddr_3(HV_waddr_3),.bus_wdata_0(HV_wdata_0),.bus_wdata_1(HV_wdata_1),.bus_wdata_2(HV_wdata_2),.bus_wdata_3(HV_wdata_3),.wr_en(wr0),.bus_wr(R_wr0),.bus_waddr(R_waddr0),.bus_wdata(R_wdata0));......//(此處省略的代碼為剩下的3個實(shí)例化模塊信號,模塊編號分別為1、2、3,主要接口分別為.bus_wr_0(HV_wr_0),.bus_wr_1(HV_wr_1),.bus_wr_2(HV_wr_2),.bus_wr_3(HV_wr_3),.bus_waddr_0(HV_waddr_0),.bus_waddr_1(HV_waddr_1),.bus_waddr_2(HV_waddr_2),.bus_waddr_3(HV_waddr_3),.bus_wdata_0(HV_wdata_0),.bus_wdata_1(HV_wdata_1),.bus_wdata_2(HV_wdata_2),.bus_wdata_3(HV_wdata_3),.wr_en(wr1、2、3),.bus_wr(R_wr1、2、3),.bus_waddr(R_waddr1、2、3),.bus_wdata(R_wdata1、2、3).)H_mux4to1_rdH_mux4to1_rd0(.bus_rd_0(HV_rd_0),.bus_rd_1(HV_rd_1),.bus_rd_2(HV_rd_2),.bus_rd_3(HV_rd_3),.bus_raddr_0(HV_raddr_0),.bus_raddr_1(HV_raddr_1),.bus_raddr_2(HV_raddr_2),.bus_raddr_3(HV_raddr_3),.rd_en(rd0),.bus_rd(R_rd0),.bus_raddr(R_raddr0));......//(此處省略的代碼為剩下的3個實(shí)例化模塊信號,模塊編號分別為1、2、3,主要接口分別為.bus_rd_0(HV_rd_0),.bus_rd_1(HV_rd_1),.bus_rd_2(HV_rd_2),.bus_rd_3(HV_rd_3),.bus_raddr_0(HV_raddr_0),.bus_raddr_1(HV_raddr_1),.bus_raddr_2(HV_raddr_2),.bus_raddr_3(HV_raddr_3),.rd_en(rd1、2、3),.bus_rd(R_rd1、2、3),.bus_raddr(R_raddr1、2、3).)H_mux4to1_rdataH_mux4to1_rdata(.clk(clk),.rst_n(rst_n),.bus_rdata_0(R_rdata0),.rd_en0(rd0),.bus_rdata0(HV_rdata_0));......//(此處省略的代碼為該模塊剩下的3組信號,接口分別為.bus_rdata_1(R_rdata1、2、3),.rd_en1(rd1、2、3),.bus_rdata1(HV_rdata_1、2、3).)H_mux4to1_rw_ackH_mux4to1_rw_ack(.clk(clk),.rst_n(rst_n),.wr_en0(wr0),.rd_en0(rd0),.v_wr_ack0(R_wr_ack0),.v_rd_ack0(R_rd_ack0),.bus_wr_ack0(HV_wr_ack0),.bus_rd_ack0(HV_rd_ack0));......//(此處省略的代碼為該模塊剩下的3組信號,接口分別為.wr_en1(wr1、2、3),.rd_en1(rd1、2、3),.v_wr_ack1(R_wr_ack1、2、3),.v_rd_ack1(R_rd_ack1、2、3),.bus_wr_ack1(HV_wr_ack1、2、3),.bus_rd_ack1(HV_rd_ack1、2、3).)endmodulemoduleH_en_select(bus_wr_0,bus_rd_0,bus_waddr_0,bus_raddr_0,bus_wr_00,bus_wr_01,bus_wr_02,bus_wr_03,bus_rd_00,bus_rd_01,bus_rd_02,bus_rd_03,……bus_wr_3,bus_rd_3,bus_waddr_3,bus_raddr_3,bus_wr_30,bus_wr_31,bus_wr_32,bus_wr_33,bus_rd_30,bus_rd_31,bus_rd_32,bus_rd_33);……parameteraddr0=2'b00,addr1=2'b01,addr2=2'b10,addr3=2'b11;assignwcmp_00=(bus_waddr_0[12:11]==addr0);assignwcmp_01=(bus_waddr_0[12:11]==addr1);assignwcmp_02=(bus_waddr_0[12:11]==addr2);assignwcmp_03=(bus_waddr_0[12:11]==addr3);assignbus_wr_00=wcmp_00&bus_wr_0;assignbus_wr_01=wcmp_01&bus_wr_0;assignbus_wr_02=wcmp_02&bus_wr_0;assignbus_wr_03=wcmp_03&bus_wr_0;assignwcmp_10=(bus_waddr_1[12:11]==addr0);assignwcmp_11=(bus_waddr_1[12:11]==addr1);assignwcmp_12=(bus_waddr_1[12:11]==addr2);assignwcmp_13=(bus_waddr_1[12:11]==addr3);assignbus_wr_10=wcmp_10&bus_wr_1;assignbus_wr_11=wcmp_11&bus_wr_1;assignbus_wr_12=wcmp_12&bus_wr_1;assignbus_wr_13=wcmp_13&bus_wr_1;assignwcmp_20=(bus_waddr_2[12:11]==addr0);assignwcmp_21=(bus_waddr_2[12:11]==addr1);assignwcmp_22=(bus_waddr_2[12:11]==addr2);assignwcmp_23=(bus_waddr_2[12:11]==addr3);assignbus_wr_20=wcmp_20&bus_wr_2;assignbus_wr_21=wcmp_21&bus_wr_2;assignbus_wr_22=wcmp_22&bus_wr_2;assignbus_wr_23=wcmp_23&bus_wr_2;assignwcmp_30=(bus_waddr_3[12:11]==addr0);assignwcmp_31=(bus_waddr_3[12:11]==addr1);assignwcmp_32=(bus_waddr_3[12:11]==addr2);assignwcmp_33=(bus_waddr_3[12:11]==addr3);assignbus_wr_30=wcmp_30&bus_wr_3;assignbus_wr_31=wcmp_31&bus_wr_3;assignbus_wr_32=wcmp_32&bus_wr_3;assignbus_wr_33=wcmp_33&bus_wr_3;assignrcmp_00=(bus_raddr_0[12:11]==addr0);assignrcmp_01=(bus_raddr_0[12:11]==addr1);assignrcmp_02=(bus_raddr_0[12:11]==addr2);assignrcmp_03=(bus_raddr_0[12:11]==addr3);assignbus_rd_00=rcmp_00&bus_rd_0;assignbus_rd_01=rcmp_01&bus_rd_0;assignbus_rd_02=rcmp_02&bus_rd_0;assignbus_rd_03=rcmp_03&bus_rd_0;assignrcmp_10=(bus_raddr_1[12:11]==addr0);assignrcmp_11=(bus_raddr_1[12:11]==addr1);assignrcmp_12=(bus_raddr_1[12:11]==addr2);assignrcmp_13=(bus_raddr_1[12:11]==addr3);assignbus_rd_10=rcmp_10&bus_rd_1;assignbus_rd_11=rcmp_11&bus_rd_1;assignbus_rd_12=rcmp_12&bus_rd_1;assignbus_rd_13=rcmp_13&bus_rd_1;assignrcmp_20=(bus_raddr_2[12:11]==addr0);assignrcmp_21=(bus_raddr_2[12:11]==addr1);assignrcmp_22=(bus_raddr_2[12:11]==addr2);assignrcmp_23=(bus_raddr_2[12:11]==addr3);assignbus_rd_20=rcmp_20&bus_rd_2;assignbus_rd_21=rcmp_21&bus_rd_2;assignbus_rd_22=rcmp_22&bus_rd_2;assignbus_rd_23=rcmp_23&bus_rd_2;assignrcmp_30=(bus_raddr_3[12:11]==addr0);assignrcmp_31=(bus_raddr_3[12:11]==addr1);assignrcmp_32=(bus_raddr_3[12:11]==addr2);assignrcmp_33=(bus_raddr_3[12:11]==addr3);assignbus_rd_30=rcmp_30&bus_rd_3;assignbus_rd_31=rcmp_31&bus_rd_3;assignbus_rd_32=rcmp_32&bus_rd_3;assignbus_rd_33=rcmp_33&bus_rd_3;endmodulemoduleH_wr_en_arbiter(wr_ack,clk,rst_n,bus_wr_0,bus_wr_1,bus_wr_2,bus_wr_3,wr_en);……always@(posedgeclkornegedgerst_n)beginif(~rst_n)beginreq1_reg2<=1'b0;req1_reg3<=1'b0;req1_reg4<=1'b0;req2_reg1<=1'b1;req2_reg3<=1'b0;req2_reg4<=1'b0;req3_reg1<=1'b1;req3_reg2<=1'b1;req3_reg4<=1'b0;req4_reg1<=1'b1;req4_reg2<=1'b1;req4_reg3<=1'b1;endelseif(wr_ack)begincase(counter)2'b00:beginreq1_reg2<=1'b1;req1_reg3<=1'b1;req1_reg4<=1'b1;req2_reg1<=1'b0;req2_reg3<=1'b0;req2_reg4<=1'b0;req3_reg1<=1'b0;req3_reg2<=1'b1;req3_reg4<=1'b0;req4_reg1<=1'b0;req4_reg2<=1'b1;req4_reg3<=1'b1;end2'b01:beginreq1_reg2<=1'b0;req1_reg3<=1'b1;req1_reg4<=1'b1;req2_reg1<=1'b1;req2_reg3<=1'b1;req2_reg4<=1'b1;req3_reg1<=1'b0;req3_reg2<=1'b0;req3_reg4<=1'b0;req4_reg1<=1'b0;req4_reg2<=1'b0;req4_reg3<=1'b1;end2'b10:beginreq1_reg2<=1'b0;req1_reg3<=1'b0;req1_reg4<=1'b1;req2_reg1<=1'b1;req2_reg3<=1'b0;req2_reg4<=1'b1;req3_reg1<=1'b1;req3_reg2<=1'b1;req3_reg4<=1'b1;req4_reg1<=1'b0;req4_reg2<=1'b0;req4_reg3<=1'b0;end2'b11:beginreq1_reg2<=1'b0;req1_reg3<=1'b0;req1_reg4<=1'b0;req2_reg1<=1'b1;req2_reg3<=1'b0;req2_reg4<=1'b0;req3_reg1<=1'b1;req3_reg2<=1'b1;req3_reg4<=1'b0;req4_reg1<=1'b1;req4_reg2<=1'b1;req4_reg3<=1'b1;enddefault:beginreq1_reg2<=1'b0;req1_reg3<=1'b0;req1_reg4<=1'b0;req2_reg1<=1'b1;req2_reg3<=1'b0;req2_reg4<=1'b0;req3_reg1<=1'b1;req3_reg2<=1'b1;req3_reg4<=1'b0;req4_reg1<=1'b1;req4_reg2<=1'b1;req4_reg3<=1'b1;endendcaseendendalways@(posedgeclkornegedgerst_n)beginif(~rst_n)counter<=2'b00;elsecounter<=counter+2'b01;endalways@(*)beginwr_en[0]=bus_wr_0&(~(req1_reg2&bus_wr_1))&(~(req1_reg3&bus_wr_2))&(~(req1_reg4&bus_wr_3));wr_en[1]=bus_wr_1&(~(req2_reg1&bus_wr_0))&(~(req2_reg3&bus_wr_2))&(~(req2_reg4&bus_wr_3));wr_en[2]=bus_wr_2&(~(req3_reg1&bus_wr_0))&(~(req3_reg2&bus_wr_1))&(~(req3_reg4&bus_wr_3));wr_en[3]=bus_wr_3&(~(req4_reg1&bus_wr_0))&(~(req4_reg2&bus_wr_1))&(~(req4_reg3&bus_wr_2));endendmodulemoduleH_rd_en_arbiter(rd_ack,clk,rst_n,bus_rd_0,bus_rd_1,bus_rd_2,bus_rd_3,rd_en);……always@(posedgeclkornegedgerst_n)beginif(~rst_n)beginreq1_reg2<=1'b0;req1_reg3<=1'b0;req1_reg4<=1'b0;req2_reg1<=1'b1;req2_reg3<=1'b0;req2_reg4<=1'b0;req3_reg1<=1'b1;req3_reg2<=1'b1;req3_reg4<=1'b0;req4_reg1<=1'b1;req4_reg2<=1'b1;req4_reg3<=1'b1;endelseif(rd_ack)begincase(counter)2'b00:beginreq1_reg2<=1'b1;req1_reg3<=1'b1;req1_reg4<=1'b1;req2_reg1<=1'b0;req2_reg3<=1'b0;req2_reg4<=1'b0;req3_reg1<=1'b0;req3_reg2<=1'b1;req3_reg4<=1'b0;req4_reg1<=1'b0;req4_reg2<=1'b1;req4_reg3<=1'b1;end2'b01:beginreq1_reg2<=1'b0;req1_reg3<=1'b1;req1_reg4<=1'b1;req2_reg1<=1'b1;req2_reg3<=1'b1;req2_reg4<=1'b1;req3_reg1<=1'b0;req3_reg2<=1'b0;req3_reg4<=1'b0;req4_reg1<=1'b0;req4_reg2<=1'b0;req4_reg3<=1'b1;end2'b10:beginreq1_reg2<=1'b0;req1_reg3<=1'b0;req1_reg4<=1'b1;req2_reg1<=1'b1;req2_reg3<=1'b0;req2_reg4<=1'b1;req3_reg1<=1'b1;req3_reg2<=1'b1;req3_reg4<=1'b1;req4_reg1<=1'b0;req4_reg2<=1'b0;req4_reg3<=1'b0;end2'b11:beginreq1_reg2<=1'b0;req1_reg3<=1'b0;req1_reg4<=1'b0;req2_reg1<=1'b1;req2_reg3<=1'b0;req2_reg4<=1'b0;req3_reg1<=1'b1;req3_reg2<=1'b1;req3_reg4<=1'b0;req4_reg1<=1'b1;req4_reg2<=1'b1;req4_reg3<=1'b1;enddefault:beginreq1_reg2<=1'b0;req1_reg3<=1'b0;req1_reg4<=1'b0;req2_reg1<=1'b1;req2_reg3<=1'b0;req2_reg4<=1'b0;req3_reg1<=1'b1;req3_reg2<=1'b1;req3_reg4<=1'b0;req4_reg1<=1'b1;req4_reg2<=1'b1;req4_reg3<=1'b1;endendcaseendendalways@(posedgeclkornegedgerst_n)beginif(~rst_n)counter<=2'b00;elsecounter<=counter+2'b01;endalways@(*)beginrd_en[0]=bus_rd_0&(~(req1_reg2&bus_rd_1))&(~(req1_reg3&bus_rd_2))&(~(req1_reg4&bus_rd_3));rd_en[1]=bus_rd_1&(~(req2_reg1&bus_rd_0))&(~(req2_reg3&bus_rd_2))&(~(req2_reg4&bus_rd_3));rd_en[2]=bus_rd_2&(~(req3_reg1&bus_rd_0))&(~(req3_reg2&bus_rd_1))&(~(req3_reg4&bus_rd_3));rd_en[3]=bus_rd_3&(~(req4_reg1&bus_rd_0))&(~(req4_reg2&bus_rd_1))&(~(req4_reg3&bus_rd_2));endendmodulemoduleH_mux4to1_wr(bus_wr_0,bus_waddr_0,bus_wdata_0,……bus_wr_3,bus_waddr_3,bus_wdata_3,wr_en,bus_wr,bus_waddr,bus_wdata);……always@(*)begincase(wr_en)4'b0001:beginbus_wdata=bus_wdata_0;bus_waddr=bus_waddr_0;bus_wr=bus_wr_0;end4'b0010:beginbus_wdata=bus_wdata_1;bus_waddr=bus_waddr_1;bus_wr=bus_wr_1;end4'b0100:beginbus_wdata=bus_wdata_2;bus_waddr=bus_waddr_2;bus_wr=bus_wr_2;end4'b1000:beginbus_wdata=bus_wdata_3;bus_waddr=bus_waddr_3;bus_wr=bus_wr_3;enddefault:beginbus_wdata=32'd0;bus_waddr=16'd0;bus_wr=1'b0;endendcaseendendmodulemoduleH_mux4to1_rd(bus_rd_0,bus_rd_1,bus_rd_2,bus_rd_3,bus_raddr_0,bus_raddr_1,bus_raddr_2,bus_raddr_3,rd_en,bus_rd,bus_raddr);……always@(*)begincase(rd_en)4'b0001:beginbus_raddr=bus_raddr_0;bus_rd=bus_rd_0;end4'b0010:beginbus_raddr=bus_raddr_1;bus_rd=bus_rd_1;end4'b0100:beginbus_raddr=bus_raddr_2;bus_rd=bus_rd_2;end4'b1000:beginbus_raddr=bus_raddr_3;bus_rd=bus_rd_3;enddefault:beginbus_raddr=16'd0;bus_rd=1'b0;endendcaseendendmodulemoduleH_mux4to1_rdata(clk,rst_n,bus_rdata_0,bus_rdata_1,bus_rdata_2,bus_rdata_3,rd_en0,rd_en1,rd_en2,rd_en3,bus_rdata0,bus_rdata1,bus_rdata2,bus_rdata3);……always@(posedgeclkornegedgerst_n)beginif(~rst_n)beginrd0_0<=4'd0;rd1_1<=4'd0;rd2_2<=4'd0;rd3_3<=4'd0;endelsebeginrd0_0<=rd_en0;rd1_1<=rd_en1;rd2_2<=rd_en2;rd3_3<=rd_en3;endendalways@(*)beginif(rd0_0==4'b0001)bus_rdata0=bus_rdata_0;elseif(rd1_1==4'b0001)bus_rdata0=bus_rdata_1;elseif(rd2_2==4'b0001)bus_rdata0=bus_rdata_2;elseif(rd3_3==4'b0001)bus_rdata0=bus_rdata_3;elsebus_rdata0=16'd0;endalways@(*)beginif(rd0_0==4'b0010)bus_rdata1=bus_rdata_0;elseif(rd1_1==4'b0010)bus_rdata1=bus_rdata_1;elseif(rd2_2==4'b0010)bus_rdata1=bus_rdata_2;elseif(rd3_3==4'b0010)bus_rdata1=bus_rdata_3;elsebus_rdata1=16'd0;endalways@(*)beginif(rd0_0==4'b0100)bus_rdata2=bus_rdata_0;elseif(rd1_1==4'b0100)bus_rdata2=bus_rdata_1;elseif(rd2_2==4'b0100)bus_rdata2=bus_rdata_2;elseif(rd3_3==4'b0100)bus_rdata2=bus_rdata_3;elsebus_rdata2=16'd0;endalways@(*)beginif(rd0_0==4'b1000)bus_rdata3=bus_rdata_0;elseif(rd1_1==4'b1000)bus_rdata3=bus_rdata_1;elseif(rd2_2==4'b1000)bus_rdata3=bus_rdata_2;elseif(rd3_3==4'b1000)bus_rdata3=bus_rdata_3;elsebus_rdata3=16'd0;endendmodulemoduleH_mux4to1_rw_ack(clk,rst_n,wr_en0,rd_en0,v_wr_ack0,v_rd_ack0,bus_wr_ack0,bus_rd_ack0,……wr_en3,rd_en3,v_wr_ack3,v_rd_ack3,bus_wr_ack3,bus_rd_ack3);……assignbus_wr_ack0=(wr_en0[0]&v_wr_ack0)|(wr_en1[0]&v_wr_ack1)|(wr_en2[0]&v_wr_ack2)|(wr_en3[0]&v_wr_ack3);assignbus_wr_ack1=(wr_en0[1]&v_wr_ack0)|(wr_en1[1]&v_wr_ack1)|(wr_en2[1]&v_wr_ack2)|(wr_en3[1]&v_wr_ack3);assignbus_wr_ack2=(wr_en0[2]&v_wr_ack0)|(wr_en1[2]&v_wr_ack1)|(wr_en2[2]&v_wr_ack2)|(wr_en3[2]&v_wr_ack3);assignbus_wr_ack3=(wr_en0[3]&v_wr_ack0)|(wr_en1[3]&v_wr_ack1)|(wr_en2[3]&v_wr_ack2)|(wr_en3[3]&v_wr_ack3);always@(posedgeclkornegedgerst_n)beginif(~rst_n)beginrd0_0<=4'd0;rd1_1<=4'd0;rd2_2<=4'd0;rd3_3<=4'd0;endelsebeginrd0_0<=rd_en0;rd1_1<=rd_en1;rd2_2<=rd_en2;rd3_3<=rd_en3;endendassignbus_rd_ack0=(rd0_0[0]&v_rd_ack0)|(rd1_1[0]&v_rd_ack1)|(rd2_2[0]&v_rd_ack2)|(rd3_3[0]&v_rd_ack3);assignbus_rd_ack1=(rd0_0[1]&v_rd_ack0)|(rd1_1[1]&v_rd_ack1)|(rd2_2[1]&v_rd_ack2)|(rd3_3[1]&v_rd_ack3);assignbus_rd_ack2=(rd0_0[2]&v_rd_ack0)|(rd1_1[2]&v_rd_ack1)|(rd2_2[2]&v_rd_ack2)|(rd3_3[2]&v_rd_ack3);assignbus_rd_ack3=(rd0_0[3]&v_rd_ack0)|(rd1_1[3]&v_rd_ack1)|(rd2_2[3]&v_rd_ack2)|(rd3_3[3]&v_rd_ack3);endmodule本設(shè)計已經(jīng)在“三維視頻處理系統(tǒng)芯片動態(tài)可重構(gòu)可編程體系結(jié)構(gòu)研究”項目中加以采用,經(jīng)過了FPGA開發(fā)的實(shí)際測試,測試結(jié)果表明該設(shè)計電路的功能完全正確,可以可靠工作,各項功能及性能指標(biāo)均符合要求,實(shí)現(xiàn)了發(fā)明的目的。當(dāng)前第1頁1 2 3