加入星計劃,您可以享受以下權益:

  • 創(chuàng)作內容快速變現
  • 行業(yè)影響力擴散
  • 作品版權保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • 4.8  典型實例8:使用函數實現簡單的處理器
  • 相關推薦
  • 電子產業(yè)圖譜
申請入駐 產業(yè)圖譜

硬件描述語言Verilog HDL設計進階之:使用函數實現簡單的處理器

2013/08/26
閱讀需 8 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

4.8  典型實例8:使用函數實現簡單的處理器

4.8.1  實例的內容及目標

1.實例內容

本實例使用Verilog HDL設計一個簡單8位處理器,可以實現兩個8位操作數的4種操作。在設計過程中,使用了函數調用的設計方法。

2.實例目標

通過本實例,讀者應達到下面的一些目的。

·  掌握使用Verilog函數設計的方法。

·  掌握Verilog設計的一般方法。

4.8.2  原理簡介

處理器發(fā)展到現在,已經變成一個功能極其強大,設計也極為復雜的單元。現在一顆小小的CPU的運算能力遠遠的超過了以前的超級計算機的能力。雖然處理器處理能力的提高和很多方面的因素有關,可是處理器最終要完成的目標還是早期CPU設計時的那個目標,那就是使用操作碼實現對操作數的控制和計算。

在本實例中,實現的處理器是一個8位處理器,只實現簡單的4種操作:相加、相減、操作數減1和操作數加1。通過這4種操作向讀者展示如何使用Verilog語言設計看似復雜的CPU單元。

當然,這個處理器只是一個算術單元,處理器還包括很多其他的功能,在此不進行介紹,感興趣的讀者可以查閱相關的書籍,按照本實例提供的設計方向補充和完善這個處理器。

4.8.3  代碼分析 

下面給出這個處理器的Verilog源代碼,讀者可以將此處理器模塊實例化至自己的工程設計中。

module mpc(instr,out);
          //端口說明
          input[17:0] instr;               //輸入指令
          output[8:0] out;           //輸出結果
          //內部信號說明
          reg[8:0] out;
          reg func;                     //指令中提取出的操作碼的內部變量
          reg[7:0] op1,op2;        //從指令中提取的兩個操作數
          //函數聲明
          function[16:0] code_add;  //函數的定義,返回一個17位的指令
            input[17:0] instr;       //函數的輸入,采用與模塊輸入同樣的命名,可不同
            //函數內部信號說明
            reg add_func;             //函數內部的操作碼變量
            reg[2:0] code;          //操作碼
            reg[7:0] opr1,opr2;    //兩個操作數
           
            begin
                 code=instr[17:16]; //輸入指令instr的高2位為操作碼code
                 opr1=instr[7:0];   //輸入指令instr的低8位為操作數opr1
                 //通過case語句判斷操作碼的類型,獲得操作數opr2
                 case(code)
                       2'b00: begin
                             add_func=1;
                             opr2=instr[15:8]; //從instr中取第二個操作數
                             end
                       2'b01: begin
                             add_func=0;
                             opr2=instr[15:8]; //從instr中取第二個操作數
                             end
                       2'b10: begin
                             add_func=1;
                             opr2=8'd1;           //第二個操作數取為1,實現+1操作
                             end
                       2'b11: begin
                             add_func=0;
                             opr2=8'd1;           //實現-1操作
                             end
                       endcase
                       code_add={add_func,opr2,opr1}; //函數的返回值
            end
            endfunction
            //函數調用模塊
            always @(instr) begin
              {func,op2,op1}=code_add(instr);   //調用函數
              if(func==1)
                      out=op1+op2;                  //實現兩數相加或操作數1加1操作
              else
                      out=op1-op2;                  //實現兩數相減或操作數1減1操作
              end
endmodule

相關推薦

電子產業(yè)圖譜

華清遠見(www.farsight.com.cn)是國內領先嵌入師培訓機構,2004年注冊于中國北京海淀高科技園區(qū),除北京總部外,上海、深圳、成都、南京、武漢、西安、廣州均有直營分公司。華清遠見除提供嵌入式相關的長期就業(yè)培訓、短期高端培訓、師資培訓及企業(yè)員工內訓等業(yè)務外,其下屬研發(fā)中心還負責嵌入式、Android及物聯網方向的教學實驗平臺的研發(fā)及培訓教材的出版,截止目前為止已公開出版70余本嵌入式/移動開發(fā)/物聯網相關圖書。企業(yè)理念:專業(yè)始于專注 卓識源于遠見。企業(yè)價值觀:做良心教育、做專業(yè)教育,更要做受人尊敬的職業(yè)教育。