加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
    • 4.7  典型實(shí)例7:自動(dòng)轉(zhuǎn)換量程頻率計(jì)控制器
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

硬件描述語(yǔ)言Verilog HDL設(shè)計(jì)進(jìn)階之:自動(dòng)轉(zhuǎn)換量程頻率計(jì)控制器

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

4.7  典型實(shí)例7:自動(dòng)轉(zhuǎn)換量程頻率計(jì)控制器

4.7.1  實(shí)例內(nèi)容及目標(biāo)

1.實(shí)例內(nèi)容

本實(shí)例使用Verilog HDL設(shè)計(jì)一個(gè)可自動(dòng)轉(zhuǎn)換量程的頻率計(jì)控制器。在設(shè)計(jì)過(guò)程中,使用了狀態(tài)機(jī)的設(shè)計(jì)方法,讀者可根據(jù)綜合實(shí)例6的流程將本實(shí)例的語(yǔ)言設(shè)計(jì)模塊添加到自己的工程中。

2.實(shí)例目標(biāo)

通過(guò)本實(shí)例,讀者應(yīng)達(dá)到下面的目的。

·  掌握使用Verilog設(shè)計(jì)狀態(tài)機(jī)的方法。

·  掌握Verilog設(shè)計(jì)的一般方法。

4.7.2  原理簡(jiǎn)介

頻率計(jì)是電路調(diào)試?yán)锩娉3S玫降囊环N儀器。本實(shí)例提到的自動(dòng)轉(zhuǎn)換量程頻率計(jì)控制器并不是講解如何設(shè)計(jì)一個(gè)頻率計(jì),而是講解如何設(shè)計(jì)這個(gè)頻率計(jì)的量程轉(zhuǎn)換機(jī)制。通過(guò)Verilog語(yǔ)言設(shè)計(jì)將量程轉(zhuǎn)換變成自動(dòng)化,自適應(yīng)地將輸入反映至量程上。

此自動(dòng)轉(zhuǎn)換量程頻率計(jì)需要外部提供一個(gè)超量程信號(hào)和一個(gè)欠量程信號(hào),代表輸入比當(dāng)前量程的狀態(tài)。這兩個(gè)信號(hào)可以通過(guò)其他的模塊或者裝置獲得,讀者可自行分析。

同時(shí),該頻率計(jì)還向外部提供一個(gè)用于選擇標(biāo)準(zhǔn)時(shí)基的信號(hào)。通過(guò)該信號(hào),頻率計(jì)可以完成量程的切換和顯示。讀者可根據(jù)頻率計(jì)其他模塊的需要調(diào)整輸出信號(hào)的設(shè)計(jì)。

4.7.3  代碼分析

下面給出自動(dòng)轉(zhuǎn)換量程頻率計(jì)控制器的Verilog源代碼,首先介紹端口信號(hào)的定義及說(shuō)明,讀者可以通過(guò)這些端口將此控制器模塊實(shí)例化至自己的工程設(shè)計(jì)中。

·  clk:輸入時(shí)鐘。

·  clear:異步復(fù)位信號(hào)。

·  reset:用來(lái)在量程轉(zhuǎn)換開(kāi)始時(shí)復(fù)位計(jì)數(shù)器

·  std_f_sel:用來(lái)選擇標(biāo)準(zhǔn)時(shí)基。

·  cntover:代表超量程。

·  cntlow:代表欠量程。

module control(std_f_sel,reset,clk,clear,cntover,cntlow);
          //端口說(shuō)明
          output[1:0] std_f_sel;
          output reset;
          input clk,clear,cntover,cntlow;
         
          //內(nèi)部信號(hào)說(shuō)明
          reg[1:0] std_f_sel;
          reg reset;
          reg[5:0] present,next;                //用于保存當(dāng)前狀態(tài)和次態(tài)的中間變量
         
          //狀態(tài)編碼,采用獨(dú)熱碼
          parameter   start_fl00k =   6'b000001,    //狀態(tài)A
                     fl00k_cnt      =  6'b000010,     //狀態(tài)B
                     start_fl0k  =  6'b000100,        //狀態(tài)C
                     fl0k_cn      = 6'b001000,         //狀態(tài)D
                     start_flk    =   6'b010000,      //狀態(tài)E
                     flk_cnt     =    6'b100000;      //狀態(tài)F

          always @(posedge clk or posedge clear) begin
           if(clear)
                present<=start_fl0k;                  //異步復(fù)位至start_fl0k狀態(tài)
           else
                present<=next;                         //狀態(tài)轉(zhuǎn)換
          end

          always @(present or cntover or cntlow) begin  //狀態(tài)轉(zhuǎn)換的觸發(fā)信號(hào)列表
           case(present)                               //用case語(yǔ)句描述狀態(tài)轉(zhuǎn)換
                 start_fl00k:                          //100k量程狀態(tài)
                       next<=fl00k_cnt;
                 fl00k_cnt: begin                     //100k量程控制狀態(tài)
                       if(cntlow)                      //欠量程
                            next<=start_fl0k;         //進(jìn)入10k量程狀態(tài)
                       else
                            next<=fl00k_cnt;          //保持100k量程控制狀態(tài)
                 end
                 start_fl0k:                           //10k量程狀態(tài)
                       next<=fl0k_cnt;
                 fl0k_cnt: begin                      //10k量程控制狀態(tài)
                       if(cntlow)                      //欠量程
                            next<=start_flk;          //進(jìn)入1k量程狀態(tài)
                       else if(cntover)               //過(guò)量程
                            next<=start_fl00k;        //進(jìn)入100k量程狀態(tài)
                       else
                            next<=fl0k_cnt;           //保持1k量程控制狀態(tài)
                 end
                 start_flk:                            //1k量程狀態(tài)
                       next<=flk_cnt;
                 flk_cnt: begin                       //1k量程控制狀態(tài)
                       if(cntover)                     //過(guò)量程
                            next<=start_fl0k;        //進(jìn)入10k量程狀態(tài)
                       else
                            next<=flk_cnt;            //保持1k量程控制狀態(tài)
                 end
                 default:
                       next<=start_fl0k;             //缺省狀態(tài)為10k量程狀態(tài)
          endcase
         end
         
         //各狀態(tài)的輸出控制模塊
         always @(present) begin
          case(present)
                start_fl00k: begin                   //100k量程狀態(tài)輸出控制
                      reset=1;
                      std_f_sel=2'b00;
                end
                fl00k_cnt: begin                     //100k量程控制狀態(tài)輸出控制
                      reset=0;
                      std_f_sel=2'b00;
                end
                start_fl0k: begin                    //10k量程狀態(tài)輸出控制
                      reset=1;
                      std_f_sel=2'b01;
                end
                fl0k_cnt: begin                      //10k量程控制狀態(tài)輸出控制
                      reset=0;
                      std_f_sel=2'b01;
                end
                start_flk: begin                     //1k量程狀態(tài)輸出控制
                      reset=1;
                      std_f_sel=2'b11;
                end
                flk_cnt: begin                       //1k量程控制狀態(tài)輸出控制
                      reset=0;
                      std_f_sel=2'b11;
                end
                default: begin                       //默認(rèn)(10k量程)狀態(tài)輸出控制
                      reset=1;
                      std_f_sel=2'b01;
                end
           endcase
          end
endmodule

在狀態(tài)機(jī)設(shè)計(jì)中,常常將狀態(tài)轉(zhuǎn)換和狀態(tài)輸出控制分為兩個(gè)部分進(jìn)行設(shè)計(jì),方便語(yǔ)言的編寫(xiě)修改和讀寫(xiě)規(guī)則。在下面的源代碼中讀者應(yīng)該注意這個(gè)設(shè)計(jì)的特點(diǎn)。

4.7.4  參考設(shè)計(jì)

本實(shí)例相關(guān)參考設(shè)計(jì)文件在本書(shū)實(shí)例代碼的“典型實(shí)例7”文件夾。

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

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