《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計應(yīng)用 > C程序的Verilog HDL實現(xiàn)
C程序的Verilog HDL實現(xiàn)
2015年微型機與應(yīng)用第1期
汪 沁,俞建定,李向如,王新彪
(寧波大學(xué) 信息科學(xué)與工程學(xué)院,浙江 寧波 315211)
摘要: 隨著電子信息技術(shù)的不斷發(fā)展,電子系統(tǒng)模塊化的設(shè)計思想已經(jīng)深入人心。因此,加強軟件和硬件模塊設(shè)計經(jīng)驗的相互借鑒意義重大。針對這種情況,借助于有限狀態(tài)機理論,提出了一種將C程序轉(zhuǎn)化成Verilog HDL描述的具體方法。同時,詳細(xì)介紹了有限狀態(tài)機理論,分析了在利用有限狀態(tài)機進行設(shè)計時應(yīng)該遵循的準(zhǔn)則,并給出了一個具體的轉(zhuǎn)化實例和最終的仿真結(jié)果。從仿真結(jié)果可以看出此方法是可行的。
Abstract:
Key words :

  摘  要: 隨著電子信息技術(shù)的不斷發(fā)展,電子系統(tǒng)模塊化的設(shè)計思想已經(jīng)深入人心。因此,加強軟件和硬件模塊設(shè)計經(jīng)驗的相互借鑒意義重大。針對這種情況,借助于有限狀態(tài)機理論,提出了一種將C程序轉(zhuǎn)化成Verilog HDL描述的具體方法。同時,詳細(xì)介紹了有限狀態(tài)機理論,分析了在利用有限狀態(tài)機進行設(shè)計時應(yīng)該遵循的準(zhǔn)則,并給出了一個具體的轉(zhuǎn)化實例和最終的仿真結(jié)果。從仿真結(jié)果可以看出此方法是可行的。

  關(guān)鍵詞: 有限狀態(tài)機(FSM);Verilog HDL;硬件設(shè)計;C程序

0 引言

  近年來,電子系統(tǒng)的模塊化設(shè)計思想越來越成熟,在一些實際的電子系統(tǒng)設(shè)計過程中,通常將整個系統(tǒng)分成軟件和硬件兩個系統(tǒng)分別進行設(shè)計,然后再進行整合,而一些比較成熟的綜合開發(fā)工具使得軟件和硬件的設(shè)計流程更加統(tǒng)一。在硬件設(shè)計過程中主要使用可編程邏輯器件(PLD),形成電路網(wǎng)表結(jié)構(gòu),實現(xiàn)具體的邏輯,這樣的配置可以實現(xiàn)用于軟件用途的硬件[1]。

  但是,軟件設(shè)計的思想和硬件設(shè)計的思想是截然不同的。軟件設(shè)計過程中首先是通過具體的算法描述實際的問題,再通過一些具體的編程語言去編寫程序,然后通過相應(yīng)的編譯器編譯連接,生成機器可以識別的二進制代碼,最后這些代碼在具體的微處理器上執(zhí)行[2]。而對于硬件的設(shè)計則是通過一些比較成熟的綜合工具將HDL編寫的代碼綜合成實際的電路網(wǎng)表結(jié)構(gòu),最終形成具體的電路結(jié)構(gòu)。圖1和圖2分別表示了兩者設(shè)計思想之間的區(qū)別。

001.jpg

  因此,如何實現(xiàn)C程序和Verilog HDL之間的轉(zhuǎn)化就尤為重要。下文將重點論述如何借助于有限狀態(tài)機,將C程序轉(zhuǎn)化為Verilog HDL,并給出了其理論依據(jù)和具體的實現(xiàn)步驟。

1 有限狀態(tài)機理論

  有限狀態(tài)機(Finite State Machine,F(xiàn)SM)是表示有限個狀態(tài)以及在這些狀態(tài)之間的轉(zhuǎn)移和動作等行為的數(shù)學(xué)模型,狀態(tài)機用來描述發(fā)生有先后順序或者有邏輯規(guī)律的事情。狀態(tài)機是對一些具有邏輯順序或具有時序規(guī)律的事件進行描述的一種方法。

  利用有限狀態(tài)機進行設(shè)計有以下幾個優(yōu)點:綜合器易于進行優(yōu)化;較容易構(gòu)成性能良好的時序邏輯模塊;整個結(jié)構(gòu)模式簡單,層次分明,易讀易懂,而且容易進行排錯;運行模式類似于CPU的運行模式,可以進行順序控制;系統(tǒng)的可靠性高,運行狀態(tài)穩(wěn)定。

  有限狀態(tài)機設(shè)計的重點在于狀態(tài)的劃分、過程的描述方式和狀態(tài)的編碼方式。在狀態(tài)的劃分過程中要明確每個狀態(tài)的輸入輸出和狀態(tài)之間的轉(zhuǎn)移條件。

  有限狀態(tài)機的過程描述方式可分為單過程描述、雙過程描述和三過程描述。在實際的有限狀態(tài)機設(shè)計時更多的是采用雙過程和三過程進行描述。雙過程的描述有利于綜合器優(yōu)化代碼,也便于閱讀和維護,缺點是組合邏輯的輸出可能會產(chǎn)生毛刺[3];三過程的描述與雙過程描述相比,雖然代碼的結(jié)構(gòu)較復(fù)雜,但是沒有毛刺的輸出,而且有利于綜合;單過程的描述會使得代碼相對比較冗長,難以修改和調(diào)試,不利于代碼的長期性維護,不利于附加約束,優(yōu)化綜合效果差,會導(dǎo)致邏輯速度變慢,資源消耗增多,一般情況下不采用這種過程描述方式[4-5]。

  通常對于FPGA器件來說,采用一位熱碼編碼可以有效提高電路的速度和可靠性,也有利于提高器件資源的利用率。在實際的設(shè)計過程中,更多的是采用One-Hot編碼方式進行編碼[6]。

2 理論依據(jù)和具體實現(xiàn)步驟

  C語言作為一種面向過程的程序設(shè)計語言,在程序設(shè)計的過程中首先要分析出解決問題所需要的步驟,然后用函數(shù)把這些步驟一步一步地實現(xiàn),在使用時逐步去調(diào)用這些函數(shù),從而解決這些問題[7]。有限狀態(tài)機正是將一個Verilog HDL程序中要表述的問題劃分成不同的狀態(tài)進行解決,通過狀態(tài)的不斷轉(zhuǎn)換從而實現(xiàn)分步解決問題的目的,這與C程序的語句執(zhí)行方式是相同的。因此,可以借助于有限狀態(tài)機,用Verilog HDL去實現(xiàn)C程序。下面是將C程序轉(zhuǎn)化為Verilog HDL進行描述的具體步驟:

  (1)對于一個完整的C程序,先用算法流程圖將其整個程序流程詳細(xì)表述出來;

  (2)根據(jù)程序的實際要求,將整個算法流程分成若干個狀態(tài),確定好每個狀態(tài)的輸入輸出和狀態(tài)之間的轉(zhuǎn)換條件,用狀態(tài)轉(zhuǎn)移圖描述整個算法流程圖;

  (3)用Verilog HDL描述其狀態(tài)轉(zhuǎn)移圖,然后進行綜合,最后進行仿真驗證;

  (4)在劃分狀態(tài)時應(yīng)注意相同狀態(tài)的合并,減少不必要的狀態(tài),簡化程序。

002.jpg

  可以根據(jù)下面的基本單元模塊用狀態(tài)轉(zhuǎn)移圖描述算法流程圖。圖3所示的順序語句、選擇語句和循環(huán)語句是構(gòu)成一個C算法流程圖的基本單元,圖4是其基本單元的狀態(tài)轉(zhuǎn)移圖。

3 設(shè)計舉例及其C程序表示

  下面講述一個利用C語言編寫的、以51單片機作為微處理器實現(xiàn)的一個汽車尾燈控制程序,已知汽車左右兩側(cè)各有4個尾燈。要求:(1)當(dāng)汽車正常行駛時所有的燈全滅;(2)剎車時所有的燈全亮;(3)左拐彎時,只有左側(cè)四個燈閃爍;(4)右拐彎時,只有右側(cè)的四個燈閃爍。先畫出整個程序的算法流程圖如圖5所示,其中S1用來檢測剎車信號,S2用來檢測左拐彎信號,S3用來檢測右拐彎信號。

003.jpg

  如下是用偽代碼表示的為51單片機編寫的C程序:

  #include<reg52.h>//頭文件

  /*用開關(guān)S1產(chǎn)生剎車信號,開關(guān)S2產(chǎn)生左拐彎信號,開關(guān)S3產(chǎn)生右拐彎信號*/

  sbit S1=P2^0;//開關(guān)S1按下表示產(chǎn)生剎車信號

  sbit S2=P2^2;//開關(guān)S2按下表示產(chǎn)生左拐彎信號

  sbit S3=P2^4;//開關(guān)S3按下表示產(chǎn)生右拐彎信號

  void keyscan();//按鍵信號檢測

  void main()

  {

  while(1)//循環(huán)檢測

  {

  keyscan();//不斷掃描按鍵,檢測是否有信號產(chǎn)生

  switch(k)//判斷檢測到的信號類型

  {

  /*P1口的低四位表示左側(cè)的四個燈,高四位表示右側(cè)的四個燈,低電平點亮*/

  case1:P1=0x00;break;//剎車信號,所有燈全亮

  case2:P1=0xF0;break;//左拐彎信號,左側(cè)燈閃爍

  case3:P1=0x0F;break;//右拐彎信號,右側(cè)燈閃爍

  default:P1=0xFF;break;//正常行駛,所有燈全滅

  }}}

4 Verilog HDL描述及其仿真

  下面用Verilog HDL來描述上述C程序。首先根據(jù)圖5的算法流程圖畫出狀態(tài)轉(zhuǎn)移圖,如圖6所示。將其整個算法流程分成S0~S5共6個狀態(tài),其中S0為初始狀態(tài),檢測信號的產(chǎn)生;S1狀態(tài)用來處理剎車信號;S2、S3狀態(tài)用來處理左拐彎信號;S4、S5用來處理右拐彎信號。

  用Verilog HDL描述圖6的狀態(tài)轉(zhuǎn)移圖,其完整代碼如下所示:

004.jpg

  module ex(clk,qout,a,b,c);

  /*輸入信號a,b,c為高電平時分別表示剎車信號,左拐彎信號和右拐彎信號*/

  input clk,a,b,c;

  /*輸出信號qout的低四位表示左側(cè)的四個燈,高四位表示右側(cè)的四個燈,其中低電平有效*/

  output reg[7:0]qout;

  reg[4:0]current_state,next_state;

  /*采用One-Hot編碼方式進行編碼*/

  parameter s0=5′b00000,s1=5′b00001,

  s2=5′b00010,s3=5′b00100,

  s4=5′b01000,s5=5′b10000;

  always@(posedge clk)

  current_state<=next_state;

  always @(posedge clk)

  begin

  case(current_state)

  s0:begin if(a)next_state<=s1;else if(b)

  next_state<=s2;else if(c)

  next_state<=s4;

  end

  s1:next_state<=s0;s2:next_state<=s3;

  s3:next_state<=s0;s4:next_state<=s5;

  s5:next_state<=s0;default:next_state<=s0;

  endcase

  end

  always@(current_state)

  begin

  case(current_state)

  s0:qout<=8′b11111111;

  s1:qout<=8′b00000000;

  s2:qout<=8′b11110000;

  s3:qout<=8′b11111111;

  s4:qout<=8′b11111111;

  s5:qout<=8′b00001111;

  default:qout<=8′bzzzzzzzz;

  endcase

  end

  endmodule

005.jpg

  圖7為波形仿真圖,從圖中可以看出:(1)當(dāng)a為高電平時,產(chǎn)生剎車信號,qout信號在S1狀態(tài)輸出低電平;(2)當(dāng)b為高電平時,產(chǎn)生左拐彎信號,qout信號的低4位在S2、S3狀態(tài)分別輸出低電平和高電平,產(chǎn)生閃爍信號;(3)當(dāng)c為高電平時,產(chǎn)生右拐彎信號,qout信號的高4位在S4、S5狀態(tài)分別輸出低電平和高電平,產(chǎn)生閃爍信號;(4)從(1)~(3)可以看出其仿真結(jié)果是正確的,符合程序的基本要求,文中的方法是可行的;(5)用三過程進行描述時,無毛刺的輸出,而且容易進行綜合,采用One-Hot編碼方式可以提高電路的速度和可靠性,同時也可以提高器件資源的利用率。

5 結(jié)論

  通過上文的表述,借助于有限狀態(tài)機,可以參考文中的方法實現(xiàn)用Verilog HDL描述C程序,從而可以通過實際的電路結(jié)構(gòu)來實現(xiàn)軟件程序的功能,這種方法也可以實現(xiàn)Verilog HDL程序和C程序之間的相互轉(zhuǎn)換。同時,文中也歸納出在利用有限狀態(tài)機進行設(shè)計時應(yīng)該遵循的原則。

參考文獻

  [1] 楊海鋼,孫嘉斌,王慰.FPGA器件設(shè)計技術(shù)發(fā)展綜述[J].電子與信息學(xué)報,2010,32(3):714-723.

  [2] 范華,秦茂玲,張俊.透視C程序設(shè)計語言[J].計算機技術(shù)與發(fā)展,2008,16(6):64-66.

  [3] 王春旭,周曉平,王黎黎.基于FPGA的Verilog HDL語言設(shè)計優(yōu)化[J].電子元器件應(yīng)用,2009,10(11):45-47.

  [4] 魏芳,劉志軍,王立華.基于Verilog HDL的可綜合有限狀態(tài)機設(shè)計[J].電子工程師,2006,32(6):8-10.

  [5] 劉小平,何云斌,董懷國.基于Verilog HDL的有限狀態(tài)機設(shè)計與描述[J].計算機工程與設(shè)計,2008,29(4):958-960.

  [6] 龔書濤,呂國強,彭良清.在FPGA中狀態(tài)機的編碼方式[J].電子工程師,2005,31(11):51-52.

  [7] 丁亞濤.C語言程序設(shè)計(第二版)[M].北京:高等教育出版社,2006.


此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
狠狠色综合网站久久久久久久| 亚洲在线成人| 国产欧美亚洲精品| 欧美亚洲不卡| 欧美日韩在线视频一区二区| 欧美激情在线观看| 欧美顶级艳妇交换群宴| 免费的成人av| 美女亚洲精品| 欧美大片18| 欧美第一黄色网| 欧美激情欧美激情在线五月| 欧美激情bt| 欧美日韩国产精品一区| 欧美区日韩区| 欧美日韩国产片| 欧美日韩视频在线| 欧美视频三区在线播放| 欧美视频福利| 国产精品女主播| 国产日韩欧美一区| 国产一区二区高清| 极品日韩久久| 亚洲人精品午夜| 99这里只有久久精品视频| 一本色道久久加勒比88综合| 99这里只有精品| 亚洲一区二区在| 欧美一区二区视频网站| 亚洲国产精品电影| 亚洲精品在线免费| 亚洲一级在线观看| 欧美一区免费| 久久综合一区| 欧美日韩精品免费观看视频| 国产精品成人观看视频免费| 国产伦精品一区二区三区免费迷| 韩国三级电影久久久久久| 亚洲国产精品久久久久婷婷884| 亚洲欧洲在线一区| 亚洲小视频在线观看| 午夜国产精品视频| 亚洲国产天堂久久国产91| 亚洲六月丁香色婷婷综合久久| 中文在线资源观看视频网站免费不卡| 亚洲专区在线| 久久蜜桃香蕉精品一区二区三区| 欧美成人四级电影| 国产精品ⅴa在线观看h| 国产一区二区久久| 亚洲激情视频| 亚洲免费在线电影| 亚洲三级性片| 午夜精品视频| 欧美岛国激情| 国产伦精品一区二区三区高清版| 尤物视频一区二区| 中国成人亚色综合网站| 久久国产一二区| 亚洲视频一区二区| 久久综合中文色婷婷| 欧美日韩亚洲一区二区三区| 国产欧美日韩一区二区三区| 亚洲黄色在线观看| 亚洲欧美国产日韩天堂区| 亚洲欧洲在线看| 欧美在线观看一区二区| 欧美极品色图| 国产三级欧美三级| 日韩视频中午一区| 久久不射中文字幕| 亚洲一区二区影院| 欧美.com| 国产丝袜一区二区| 日韩午夜av| 亚洲国产精品一区二区久| 亚洲综合久久久久| 欧美成人资源网| 国产手机视频精品| 99精品99久久久久久宅男| 亚洲第一在线综合网站| 亚洲欧美乱综合| 欧美刺激性大交免费视频| 国产视频一区欧美| 一区二区精品在线观看| 亚洲精品国产日韩| 久久精品国产亚洲一区二区| 欧美视频三区在线播放| 亚洲国产1区| 欧美一区二视频| 亚洲男人影院| 欧美日韩成人在线观看| 影音先锋成人资源站| 性欧美18~19sex高清播放| 中文一区字幕| 欧美国产日本在线| 伊甸园精品99久久久久久| 亚洲综合第一| 亚洲免费视频观看| 欧美日韩影院| 91久久亚洲| 亚洲激情网址| 久久一区二区视频| 国产三级欧美三级日产三级99| 中文精品99久久国产香蕉| 夜夜嗨av色综合久久久综合网| 欧美不卡福利| 亚洲国产成人av好男人在线观看| 性做久久久久久久免费看| 亚洲欧美精品| 国产精品久久久久9999| 一本一本久久a久久精品牛牛影视| 亚洲精选中文字幕| 欧美成人自拍| 亚洲国产综合视频在线观看| 亚洲国产成人久久综合一区| 久久午夜精品| 国内精品久久久久久久果冻传媒| 亚洲欧美日韩国产精品| 性久久久久久久久久久久| 国产精品免费视频观看| 亚洲欧美国内爽妇网| 欧美亚洲视频一区二区| 国产乱码精品一区二区三区不卡 | 国产伦精品一区二区三| 亚洲一区二三| 久久国产精品99精品国产| 国产一区二区按摩在线观看| 久久精品国产2020观看福利| 久久在线免费视频| 亚洲高清一二三区| 一区二区三区久久久| 欧美午夜在线观看| 亚洲自拍偷拍视频| 久久久久久久久岛国免费| 精品粉嫩aⅴ一区二区三区四区| 最新国产成人在线观看| 欧美精品导航| 宅男噜噜噜66国产日韩在线观看| 亚洲综合国产| 国产一区二区三区丝袜| 亚洲国产精品久久久久秋霞影院 | 99re6这里只有精品视频在线观看| 欧美日韩黄视频| 亚洲影院色无极综合| 久久久久久久久蜜桃| 亚洲国产二区| 亚洲天堂免费在线观看视频| 国产欧美日韩亚洲| 91久久亚洲| 国产精品啊啊啊| 欧美一区二区三区婷婷月色 | 91久久精品一区| 一区二区激情| 国产女同一区二区| 亚洲经典自拍| 国产精品成人免费| 久久精品99国产精品酒店日本| 欧美国产精品人人做人人爱| 亚洲图片欧美午夜| 久久一区二区三区四区| 亚洲美女淫视频| 久久国产精品网站| 亚洲欧洲一区二区三区久久| 性欧美videos另类喷潮| 一区在线视频| 亚洲一区免费看| 激情久久综合| 亚洲欧美国产高清va在线播| 激情婷婷欧美| 亚洲欧美国产精品专区久久| 激情欧美一区二区三区| 亚洲一区久久久| 在线观看三级视频欧美| 亚洲在线中文字幕| 亚洲风情亚aⅴ在线发布| 亚洲欧美综合| 亚洲高清自拍| 久久国产精品黑丝| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 免费在线观看日韩欧美| 亚洲素人在线| 欧美黑人国产人伦爽爽爽| 亚洲综合清纯丝袜自拍| 欧美激情综合色| 久久aⅴ国产欧美74aaa| 国产精品成人在线| 亚洲日本欧美| 国产一区二区丝袜高跟鞋图片| 一区二区三区精品视频| 在线成人免费视频| 欧美在线亚洲在线| 夜夜夜久久久| 欧美粗暴jizz性欧美20| 性欧美8khd高清极品| 国产精品成人播放| 99亚洲一区二区| 激情婷婷亚洲| 久久不见久久见免费视频1| 在线一区二区视频|