色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > EDA/PCB > 設(shè)計(jì)應(yīng)用 > Verilog HDL設(shè)計(jì)進(jìn)階:有限狀態(tài)機(jī)的設(shè)計(jì)原理及其代

          Verilog HDL設(shè)計(jì)進(jìn)階:有限狀態(tài)機(jī)的設(shè)計(jì)原理及其代

          作者: 時間:2013-08-27 來源:網(wǎng)絡(luò) 收藏

          由于 和 V 行為描述用于綜合的歷史還只有短短的幾年,可綜合風(fēng)格的 和VHDL的語法只是它們各自語言的一個子集。又由于HDL的可綜合性研究近年來非?;钴S,可綜合子集的國際標(biāo)準(zhǔn)目前尚未最后形成,因此各廠商的綜合器所支持的HDL子集也略有所不同。

          本文引用地址:http://cafeforensic.com/article/189516.htm

          本書中有關(guān)可綜合風(fēng)格的 HDL的內(nèi)容,我們只著重介紹RTL級、算法級和門級邏輯結(jié)構(gòu)的描述,而系統(tǒng)級(數(shù)據(jù)流級)的綜合由于還不太成熟,暫不作介紹。

          由于寄存器傳輸級(RTL)描述是以時序邏輯抽象所得到的有限狀態(tài)機(jī)為依據(jù)的,所以把一個時序邏輯抽象成一個同步有限狀態(tài)機(jī)是設(shè)計(jì)可綜合風(fēng)格的Verilog HDL模塊的關(guān)鍵。

          在本章中我們將通過各種實(shí)例由淺入深地來介紹各種可綜合風(fēng)格的Verilog HDL模塊,并把重點(diǎn)放在時序邏輯的可綜合有限狀態(tài)機(jī)的Verilog HDL設(shè)計(jì)要點(diǎn)。至于組合邏輯,因?yàn)楸容^簡單,只需閱讀典型的用Verilog HDL描述的可綜合的組合邏輯的例子就可以掌握。

          為了更好地掌握可綜合風(fēng)格,還需要較深入地了解阻塞和非阻塞賦值的差別和在不同的情況下正確使用這兩種賦值的方法。只有深入地理解阻塞和非阻塞賦值語句的細(xì)微不同,才有可能寫出不僅可以仿真也可以綜合的Verilog HDL模塊。

          只要按照一定的原則來編寫就可以保證Verilog模塊綜合前和綜合后仿真的一致性。符合這樣條件的可綜合模塊是我們設(shè)計(jì)的目標(biāo),因?yàn)檫@種是可移植的,可綜合到不同的FPGA和不同工藝的ASIC中,是具有知識產(chǎn)權(quán)價值的軟核。

          4.4.1 有限狀態(tài)機(jī)(FSM)設(shè)計(jì)原理

          有限狀態(tài)機(jī)是由寄存器組和組合邏輯構(gòu)成的硬件時序電路。有限狀態(tài)機(jī)的狀態(tài)(即由寄存器組的1和0的組合狀態(tài)所構(gòu)成的有限個狀態(tài))只可能在同一時鐘跳變沿的情況下才能從一個狀態(tài)轉(zhuǎn)向另一個狀態(tài)。

          有限狀態(tài)機(jī)的下一個狀態(tài)不但取決于各個輸入值,還取決于當(dāng)前所在狀態(tài)。這里指的是米里Mealy型有限狀態(tài)機(jī),而莫爾Moore型有限狀態(tài)機(jī)的下一個狀態(tài)只決于當(dāng)前狀態(tài)。

          Verilog HDL中可以用許多種方法來描述有限狀態(tài)機(jī),最常用的方法是用always語句和case語句。如圖4.1所示的狀態(tài)轉(zhuǎn)移圖表示了一個有限狀態(tài)機(jī),例4.1的程序就是該有限狀態(tài)機(jī)的多種Verilog HDL模型之一。

          圖4.1的狀態(tài)轉(zhuǎn)移圖表示了一個四狀態(tài)的有限狀態(tài)機(jī)。它的同步時鐘是Clock,輸入信號是A和Reset,輸出信號是F和G。

          狀態(tài)的轉(zhuǎn)移只能在同步時鐘(Clock)的上升沿時發(fā)生,往哪個狀態(tài)的轉(zhuǎn)移則取決于目前所在的狀態(tài)和輸入的信號(Reset和A)。下面的例子是該有限狀態(tài)機(jī)的Verilog HDL模型之一。

          例4.1:Gray碼有限狀態(tài)機(jī)模型1。

          module fsm (Clock, Reset, A, F, G); //模塊聲明
          input Clock, Reset, A;
          output F,G;
          reg F,G;
          reg [1:0] state ;

          parameter //狀態(tài)聲明
          Idle = 2’b00, Start = 2’b01,
          Stop = 2’b10, Clear = 2’b11;

          always @(posedge Clock)
          if (!Reset) begin
          state = Idle; F=0; G=0; //默認(rèn)狀態(tài)
          end
          else case (state)
          idle: begin //Idle狀態(tài)
          if (A) begin
          state = Start;
          G=0;
          end
          elsestate = idle;
          end
          start: //Start狀態(tài)
          if (!A) state = Stop;
          else state = start;
          Stop: begin //Stop狀態(tài)
          if (A) begin
          state = Clear;
          F = 1;
          end
          else state = Stop;
          end
          Clear: begin //Clear狀態(tài)
          if (!A) begin
          state =Idle;
          F =0; G =1;
          end
          else state = Clear;
          end
          endcase
          endmodule

          也可以用下面的Verilog HDL模型來表示同一個有限狀態(tài)。


          例4.2:獨(dú)熱碼有限狀態(tài)和模型。

          module fsm (Clock, Reset, A, F, G); //模塊聲明
          input Clock, Reset, A;
          output F,G;
          reg F,G;
          reg [3:0] state ;

          parameter //狀態(tài)聲明
          Idle = 4’b1000,
          Start = 4’b0100,
          Stop = 4’b0010,
          Clear = 4’b0001;

          always @(posedge clock)
          if (!Reset) begin
          state = Idle; F=0; G=0; //默認(rèn)狀態(tài)
          end
          else case (state)
          Idle: begin //Idel狀態(tài)
          if (A) begin
          state = Start;
          G=0;
          end
          else state = Idle;
          end
          Start: //Start狀態(tài)
          if (!A) state = Stop;
          else state = Start;
          Stop: begin //Stop狀態(tài)
          if (A) begin
          state = Clear;
          F = 1;
          end
          else state = Stop;
          end
          Clear: begin //Clear狀態(tài)
          if (!A) begin
          state =Idle;
          F=0; G=1;
          end
          else state = Clear;
          end
          default: state =Idle; //默認(rèn)狀態(tài)
          endcase
          endmodule


          例4.2與例4.1的主要不同點(diǎn)是狀態(tài)編碼方式。例4.2采用了獨(dú)熱編碼,而例4.1則采用Gray碼,究竟采用哪一種編碼好要看具體情況而定。


          上一頁 1 2 3 下一頁

          關(guān)鍵詞: Verilog HDL 進(jìn)階 代碼

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉