摘 要:應用FPGA中的D觸發器,采用自下而上的方法設計存儲器各功能模塊,逐步構建出具有讀出仲裁的兩讀出一寫入存儲器。論文主要研究和設計4K×16位兩讀出一寫入存儲器,設計的存儲器能夠同時進行讀操作,也能夠對同一個存儲單元進行并行的讀操作,當存儲器同時對某個存儲單元進行讀寫操作時,存儲器還具有讀出仲裁的功能。最后,經過分析與測試可知,設計的存儲器滿足設計要求。兩讀出一寫入存儲器簡化了運算類指令分時傳輸兩個源操作數的尋址過程,提高了微處理器的運行速度。
關鍵詞:讀出仲裁;兩讀出一寫入;存儲器
引言
運算類的指令基本上有兩個源操作數和一個目的操作數,目的操作數和一個源操作數可以是同一個寄存器,也可以是不同的寄存器或一個是寄存器,一個是存儲器的存儲單元;對于目的操作數和一個源操作數不是同一個寄存器的情況,執行指令時需要分時尋址和讀出兩個源操作數;對于目的操作數和一個源操作數是同一個寄存器時有兩種情況,一種是一個源操作數來自于執行上一條指令的運算結果,這個源操作數本身就直接在該運算指令的一個源操作數的寄存器中,執行時只需要一個尋址和讀出另一個操作數;第二種情況是兩個操作數都不是來自于執行上一條指令的運算結果,需要分時尋址和讀出兩個源操作數;分時尋址和讀出兩個源操作數是影響CPU執行運算類指令速度的主要因素。
1 功能需求
設計的兩讀出一寫入存儲器具有一個獨立的數據讀寫端口和一個獨立的數據讀出端口,每個口都有數據、地址總線和片選。兩個端口能夠同時進行讀操作,也能夠對同一個存儲單元進行并行的讀操作。當讀寫端口的寫入口和獨立的讀出端口同時對某個存儲單元進行寫讀操作時,通過仲裁電路發出中斷信號,使獨立的數據讀出端口執行的讀操作無效,保證讀出的信息正確。
2 設計的方案
主要研究和設計具有讀寫仲裁的4K×16位兩讀出一寫入存儲器,首先設計1×16位兩讀出一寫入存儲單元,在此基礎上通過擴展存儲單元的容量逐步構建256×16位兩讀出一寫入模塊和4K×16位兩讀出一寫入存儲器,最后通過設計仲裁電路,構建具有讀寫仲裁的4K×16位兩讀出一寫入存儲器。
3 各模塊設計
3.1 1×16位兩讀出一寫入存儲單元
存儲單元的左邊具有讀寫功能:根據地址值ab_1選中相對應的D觸發器,在rd_1或wr_1信號的作用下,將該D觸發器輸出端Qn+1輸出的數據傳輸到數據總線db_1上,或將數據總線db_1上的數據寫入到D觸發器的D端口。
存儲單元的右邊具有讀出功能:根據地址值ab_2選中相對應的D觸發器,則在rd_2信號的作用下,將D觸發器輸出端Qn+1輸出的數據傳輸到數據總線db_2上。
3.2 256×16位兩讀出一寫入模塊
在1×16位兩讀出一寫入存儲單元的基礎上,將256個1×16位兩讀出一寫入存儲單元并聯構建256×16位兩讀出一寫入模塊,其結構圖如圖2所示。該模塊由256個存儲單元和兩個8-256譯碼器組成,兩個譯碼器的256個輸出分別與256個1×16存儲單元左右兩邊的地址線ab_1 與ab_2連接。
模塊的左邊為一個獨立的數據讀寫端口,具有普通存儲器的讀寫功能:片選CS_1_1有效,根據地址值AB_1_0~AB_1_7選中相對應的存儲單元,在讀信號RD_1_1或寫信號WR_1_1的作用下,將該存儲單元中的數據傳輸到數據總線DB_1_1上,或將數據總線DB_1_1上的數據寫入到該存儲單元中。
模塊的右邊為一個獨立的數據讀出端口,具有讀出功能:片選CS_2_2有效,根據地址值AB_2_0~AB_2_7選中相對應的存儲單元,則在讀信號RD_2_2的作用下,將該存儲單元中的數據傳輸到數據總線DB_2_2上。256×16位兩讀出一寫入模塊封裝圖如圖3所示。
3.3 4K×16位兩讀出一寫入存儲器設計
在256×16位兩讀出一寫入模塊的基礎上,將16個256×16位兩讀出一寫入模塊并聯進行存儲器的字擴展,擴大存儲器的容量構建4K×16位兩讀出一寫入存儲器,其結構圖如圖4所示。4K×16位兩讀出一寫入存儲器由16個256×16位兩讀出一寫入模塊和兩個4-16譯碼器組成,兩個譯碼器的輸出值分別與16個256×16位兩讀出一寫入存儲器左右兩邊的片選信號連接。
存儲器的左邊是一個獨立的數據讀寫端口,具有普通存儲器的讀寫功能:片選CS_1有效,根據地址值AB_1(A0~A11)選中相對應的存儲單元,在讀信號RD_1或寫信號WR_1的作用下,將該存儲單元中的數據傳輸到數據總線DB_1上,或將數據總線DB_1上的數據寫入到該存儲單元中。
存儲器的右邊為一個獨立的數據讀出端口,具有讀出功能:片選CS_2有效,根據地址值AB_2(B0~B11)選中相對應的存儲單元,則在讀信號RD_21的作用下,將該存儲單元中的數據傳輸到數據總線DB_2上。4K×16位兩讀出一寫入存儲器封裝圖如5所示。
3.4 具有讀出仲裁的4K×16位兩讀出一寫入存儲器設計
設計的4K×16位兩讀出一寫入存儲器,默認存儲器數據讀寫端口為主控,獨立的數據讀端口為從控,圖4所示的4K×16位兩讀出一寫入存儲器不具有讀出仲裁功能。當存儲器主控的寫操作和從控的讀操作同時對一個存儲單元進行讀寫操作時,必須設計一個讀出仲裁,確保獨立的讀端口讀出的信息準確。為解決上述問題,在4K×16位兩讀出一寫入存儲器基礎上增加一個地址比較器,一個或門和一個非門來實現讀出仲裁的功能,其結構框圖如圖6所示。
4 仿真驗證
采用Actel公司的集成開發軟件Libero IDE v8.3,應用Verilog編制程序,通過ModeSim軟件對具有讀出仲裁的4K×16位兩讀出一寫入存儲器進行仿真,編寫相應的testbench.v文件用于模擬系統輸入信號并控制器的輸出狀態,其仿真圖如圖7所示。
從仿真圖可看出對具有讀出仲裁的4K×16位兩讀出一寫入存儲器的測試分為三種情況:
4.1 主控進行讀寫操作
寫信號WR_1和主控片選信號CS_1作用時主控執行寫命令,將主控數據總線上的數據16'h1111寫入主控地址指定的存儲單元12'h0001;60ns后,將主控數據總線上的數據16'h2222,寫入主控地址指定的存儲單元12'b0005;60ns后,主控讀信號RD_1和主控片選信號CS_1作用,主控執行讀操作,把主控地址指定的存儲單元12'h0001中的值讀出去,此時DB_1為16'h0111;
4.2 從控進行讀操作
60ns后,從控讀信號RD_2和從控片選信號CS_2作用,從控執行讀操作,將從控地址指定的存儲單元12'h0001的值讀出去,此時從控數據總線DB_2為16'h0111;
4.3 同時進行主控的寫和從控的讀操作
當主控的寫信號WR_1、選信號CS_1和從控的讀信號RD_2、選信號CS_2同時作用,且主控地址線AB_1和從控地址線AB_2為同一值12'h0001,表明主控和從控同時對同一存儲單元進行讀寫操作,此時存儲器發出中斷信號P=0,中斷從控的讀操作,待主控的寫操作執行完后,從控再次傳輸新的指令和命令時才可以進行讀操作,從仿真圖可看出滿足設計的要求。
5 結束語
設計的4K×16位兩讀出一寫入存儲器具有一個獨立的讀出端口和一個獨立的讀寫端口,兩個端口能夠同時進行讀操作,也能夠對同一個存儲單元進行并行的讀操作,針對寫入端口和一個讀出端口同時對存儲單元進行讀寫操作的情況,設計其讀寫仲裁電路,保證讀出信息準確。簡化了執行運算類指令時需要分時執行傳輸兩個源操作數指令和每條傳輸指令的尋址過程,提高微處理器的運行速度。
參考文獻
[1]鄭緯民,湯志忠.計算機系統結構(第2版)[M].北京:清華大學出版社,1998.09.
[2]馬秦生,曹陽,楊 ,等.多端口存儲器控制器IP核的研究[J].西安電子科技大學學報(自然科學版),2010,37(1):p142-147.
[3]陳圍,莫堯平,陳庶樵.基于三態內容尋址存儲器的多模式匹配算法[J].計算機工程,2011.37(13): p52-54.
[4]余慧,王健.一種專用可重配置的FPGA嵌入式存儲器模塊的設計和實現[J].電子學報,2012. 40(2): p215-222.
[5]Hushiliang,Kim I,Mikko H, etal.An apprimplementing efficient superscalar CISC[C] //Proceedingsof the Twelfth International Symposium on High-Performance Computer Architecture.Austin,Texas,USA\"IEEE,2006:P41-52.
[6]Young-Su Kwon, Chong-Min Kyung. Performance driven event-based synchronization for milti-FPGA simulation accelerator with event time-multiplexing bus[J]. IEEE transactions on Computer-Aided Design of Integrated Circuits and Systems, 2005, 24(9): 1444 ~1449.
[7]Tessier, R.Betz, V.Neto, D.Egier, et al. Power-Efficient RAM Mapping Algorithms for FPGAEmbedded Memory Blocks [J]. IEEE transactions on Computer-Aided Design of Integrated Circuits and Systems, 2007, 26(2): p278~283.