自己動手寫處理器之第二階段(4)——電路設計舉例

來源:互聯網
上載者:User

標籤:自己動手寫處理器   開源   mips   處理器   軟核   

將陸續上傳本人寫的新書《自己動手寫處理器》(尚未出版),今天是第八篇,我盡量每周四篇

2.7電路設計舉例

      本節將設計一個簡化的處理器取指令電路,通過這個例子體會Verilog HDL的使用。

      處理器內部一般有一個PC寄存器,其中儲存指令地址,正常運行過程中,PC的值會隨時間增加,同時從指令儲存空間中取出對應地址的指令。所以,本節實現的處理器取指令電路,包含兩部分:PC模組、指令儲存空間。

      1、PC模組的設計與實現

      PC模組的功能就是給出取指令地址,同時每個刻度取指令地址遞增。其介面設計2-13所示。採用左邊是輸入介面,右邊是輸出介面的方式繪製,這樣便於理解。介面作用描述如表2-5所示。



      此處定義指令地址pc的寬度為6,PC模組的主要代碼如下,可以參考本書光碟片Code\Chapter2目錄下的pc_reg.v檔案。

module pc_reg(inputwire     clk,input  wire     rst,output reg[5:0]    pc,output reg         ce);always @ (posedge clk) begin  //在時鐘訊號上升沿觸發   if (rst == 1'b1) begince <= 1'b0;      //複位訊號有效時候,指令儲存空間使能訊號無效   end else begince <= 1'b1;      //複位訊號無效的時候,指令儲存空間使能訊號有效   endendalways @ (posedge clk) begin  //在時鐘訊號上升沿觸發   if (ce == 1'b0) beginpc <= 6'h00;     //指令儲存空間使能訊號無效的時候,pc保持為0   end else begin pc <= pc + 1'b1; //指令儲存空間使能訊號有效時候,pc在每個時鐘加1   endendendmodule

      2、指令儲存空間ROM的設計與實現

      指令儲存空間ROM的作用是儲存指令,並依據輸入的地址,給出對應地址的指令。其介面2-14所示,還是採用左邊是輸入介面,右邊是輸出介面的方式繪製,這樣便於理解。介面描述如表2-6所示。


      此處定義指令的寬度為32,指令儲存空間ROM的主要代碼如下,可以參考在本書光碟片Code\Chapter2目錄下的rom.v檔案。

module rom(input  wire          ce,input  wire[5:0] addr,output reg[31:0] inst);reg[31:0]  rom[63:0];      //使用二維向量定義儲存空間always @ (*) begin   if (ce == 1'b0) begininst <= 32'h0;      //使能訊號無效時,給出的資料是0   end else begin       inst <= rom[addr];  //使能訊號有效時,給出地址addr對應的指令   endendendmodule

      其中使用了一個二維向量定義儲存空間,深度是64,每個元素的寬度是32,這也是使用6位地址即可的原因。

      3、頂層檔案

      先介紹元件例化的知識,在一個複雜電路的實現過程中,可以將其分割成多個功能單元分別實現,然後在一個頂層檔案中通過調用各個功能單元,將其按照一定方式串連在一起,從而實現最終電路。其中調用功能單元的過程就稱為元件例化。元件例化的格式2-15所示。


      經過上面兩步,我們分別實現了PC模組、指令儲存空間ROM,現在可以編寫頂層檔案將兩者串連起來。串連方式2-16所示。

     


      PC模組的輸出pc串連到指令儲存空間ROM的地址介面addr,PC模組輸出的使能訊號ce串連到ROM的使能訊號介面ce。頂層模組對應的模組名為inst_fetch,有三個介面,介面描述如表2-7所示。


      inst_fetch模組的主要代碼如下,其中例化了PC模組、指令儲存空間ROM。可以參考本書光碟片Code\Chapter2目錄下的inst_fetch.v檔案。

module inst_fetch(inputwireclk,input  wirerst,output wire[31:0]   inst_o);wire[5:0] pc;wire      rom_ce;        //PC模組的例化pc_reg pc_reg0(.clk(clk),.rst(rst),        .pc(pc),.ce(rom_ce));       //指令儲存空間ROM的例化       rom rom0( .ce(rom_ce),   .addr(pc),  .inst(inst_o));endmodule

      PC模組的輸出pc、ROM模組的輸入addr都串連到變數pc,所以兩者串連在一起;PC模組的輸出ce、ROM模組的輸入ce都串連到rom_ce,所以兩者串連在一起。這樣就實現了圖2-16所示的串連關係。


下一次將介紹如何模擬,未完待續!




自己動手寫處理器之第二階段(4)——電路設計舉例

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.