FPGA基礎篇:Verilog基礎語法

2020-11-29 電子發燒友

FPGA基礎篇:Verilog基礎語法

佚名 發表於 2020-11-27 14:27:27

Verilog基礎語法

1.1 可綜合模塊

以module為單元,具體實現如下

1.1.1 時序邏輯

以異步觸發的D觸發器為例,時序邏輯在always塊裡實現

主要注意點:

1. 聲明模塊時,輸入變量一定是wire類型

2. 聲明模塊時,輸出變量可以是wire,也可以是reg, reg變量只能在always塊中賦值

3. 敏感列表既可以是邊沿觸發,也可以是電平觸發

4. 沿觸發的邏輯裡,一定採用的是非阻塞觸發《=

1.1.2 組合邏輯

以數據選擇器為例,組合邏輯通常使用assign語句賦值

主要注意點:

1. sel = 0時,c = a;sel = 1時,c =b,即二選一數據選擇器。四選一則有兩個選擇端,四個輸入端,八選一則是三個選擇端,八個輸入端。

2. wire 變量一定要用連續賦值語句賦值,而且必須用阻塞賦值

1.2 仿真模塊

仿真模塊和可綜合模塊的區別:

可綜合模塊最終生成的bit文件會燒錄進晶片運行,而仿真模塊編譯過後是在仿真軟體(例如modelsim)上運行的。仿真模塊是基於可綜合模塊進行例化,並通過仿真軟體的模擬,可以初步驗證我們寫的可綜合模塊的實現現象。

以計數器為例,可綜合模塊如下:

基於以上可綜合模塊的仿真模塊如下:

1. 仿真的模塊聲明不需要輸入列表

2. initial塊只能對【寄存器】量進行賦值

3. 例化模塊時,如果原始模塊是輸出變量,則括號內必須【wire變量】

HDL常見例子

2.1 解碼器

2.1.1 可綜合模塊(case語句)

此模塊用case實現了一個數據選擇的功能,先產生了一個8位計數器,通過判斷計數器的值來輸出不同的取值,當計數器計數到1時,o_data和o_dv分別輸出5和1,當計數器為2時,輸出7和1,其餘均輸出0。(Note:Case語句常常運用於狀態機中狀態的判斷)

Case語句注意點:

必須有default語句,否則會形成鎖存器

2.1.2 仿真模塊

2.2 狀態機

由於FPGA內部語句塊都是並行運行的,當我們希望FPGA按照順序執行我們的語句時,就會用到狀態機。

下面例子是使用狀態機模擬的一個簡單的自動售貨機,該售貨機中的商品 2.5 元一件,每次投幣既能投入 1 元, 也能投入 0.5 元,當投入 3 元時,需要設定找零。

2.2.1 狀態圖

2.2.2 可綜合模塊(2段式狀態機)

2.2.3 仿真模塊

2.2.4 仿真腳本

仿真腳本可以省去人工操作modelsim軟體圖形頁面的步驟,運行腳本,modelsim可以根據腳本命令自動運行包括創建工作目錄,編譯文件,啟動仿真等步驟,以下是本例中的仿真腳本。

仿真腳本編寫好後,只需要進入仿真軟體(本例使用的是modelsim),改變當前路逕到腳本保存的路徑,然後在modelsim命令行輸入 do [腳本文件名]即可。

仿真結果:

2.2.5 上板測試

上板測試對原來的條件做了一定改動更方便觀測結果,輸入和輸出分別使用的按鍵和LED燈,測試版使用的是Anlogic的EF3L40CG332B_DEV,實現的功能如下:

① 在開發板上完成自動售貨機的實驗,投幣的動作通過按鍵實現, 當按一次按鍵(按下到抬起算一次),算作投幣一次;

② 按鍵有兩個,按下分別代表 5 毛和 1 元,可樂售價 2.5 元;

③ 當投入總金額為 5 毛時, led 燈亮一個,投入總金額為 1 元時, led 燈亮兩個, 投入總金額為 1.5 元時, led 燈亮三個, 投入總金額為 2 元時, led 亮四個, 用單向流水燈效果充當出可樂並且不找零的情況,用雙向流水燈效果充當既出可樂又找零的情況。流水燈持續十秒後熄滅,狀態回到初始狀態。

重新設計狀態圖如下:

代碼詳見工程fsm_key,筆記不再贅述,此次筆記主要記錄關於頂層模塊和例化的相關知識點:

工程目錄如下所示:

各模塊之間的關係是:

頂層文件是fsm.v,在fsm.v中調用了模塊led_water_single,led_Water_double和key_debounce,這三個模塊的功能分別是單向流水燈,雙向流水燈和按鍵消抖。想在頂層文件中調用對應的模塊需要在頂層文件中對相應的模塊進行例化,以單向流水燈為例。

單向流水燈的聲明如下:

(具體功能實現代碼略,如有需要,請登錄www.fortune-co.com留言)

那麼在fsm.v中例化方法如下:

括號外的信號是對應的聲明信號;括號內的信號是從fsm模塊中傳入的信號,該信號名稱可以自定義。

整個工程的框架如下:(由於本實驗沒有另外寫一個總的TOP文件,而是將例化和狀態機信號處理都放在了fsm模塊中,因此top層和狀態機模塊都標註的是fsm)

其中key05,key10,就是從外界接入的信號,led[7:0]即輸出信號。接入信號我們要引到對應的按鍵,可以參考EF3L40CG332B_DEV的原理圖

SW2和SW3對應的FPGA的管腳分別是R19和R20,同理可查,八個led的對應腳,並寫出相應的管腳約束文件

管腳約束文件寫完後,在可綜合模塊頂層文件中的輸入輸出信號就會對應到相應的物理輸入輸出,也可以使用圖形頁面設置。

完成後編譯下載到板子上觀測現象。

在本次實驗的過程中也發生了一個編程錯誤問題,剛編寫完上板測試時發現結果和預想的有差異,具體錯處在輸入3元進入雙向流水燈的狀態時,雙向流水燈正向流水正常,當反向流水時,在倒數第二個燈會卡住,然後反覆亮滅倒數一二個燈,沒法完成反向流水。

由於第一次正向流水是正常的,因此推測是在反向流水時有條件判斷錯誤使得反向流水無法正常運行,進入到led_water_double模塊關於反向流水燈的操作模塊,經查驗發現是設置翻轉標誌的時候判斷條件寫錯了。

判斷條件應該是led == 8』b1111_1110,更改後,實驗現象符合預期要求。

責任編輯:gt

打開APP閱讀更多精彩內容

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴

相關焦點

  • 零基礎學FPGA(五)Verilog語法基基礎基礎(下)
    (3)時間度量系統函數$time  在verilog hdl語法中有兩種時間度量系統函數,分別是$time和$realtime,用這兩個系統函數可以得到當前的仿真時刻。$time可以返回一個64位的值來記錄當前的仿真時刻。  (4)$finish  系統任務$finish的作用是退出仿真器,返回主作業系統,也就是結束仿真過程。
  • 零基礎學FPGA(三)Verilog語法基基礎基礎(上)
    這幾天複習了一下Verilog的語法知識,就藉此寫寫我對這些東西的想法吧。感覺呢,是和C語言差不多,具有C語言基礎的朋友學起來應該沒什麼問題,和C語言相同的地方就不說了吧,重點說一下不同點吧。  小結  在verilog語法中,所有的過程塊(包括initial塊,always塊),連續賦值語句,實例引用都是並行的,也就是說在一個模塊中遇到這些語句就是同時執行的,而且沒有先後次序。只有連續賦值語句assign和實例引用語句可以獨立於過程塊存在於模塊的功能定義部分,即這兩種語句可以不用在那兩個過程塊裡執行,也可以在模塊的功能定義部分執行,例如第一個例子。
  • 零基礎學FPGA(四)Verilog語法基基礎基礎(中)
    (1)順序快  順序快就好比C語言裡的大括號「{ }」,在Verilog語法中,用begin…end代替。這裡只需要知道,在begin…end中間的語句是順序執行的就行了。  (2)並行塊  並行塊可以算是一個新的知識點,與順序塊最大的不同就是並行塊中的語句是同時開始執行的,要想控制語句的先後順序,可以加延時語句控制。
  • 【從零開始走進FPGA】路在何方——Verilog快速入門
    VHDL和Verilog區別  在業界,VHDL和Verilog是主要的兩種硬體描述語言,主要區別如下:  (1)VHDL發展的較早,語法嚴格,而Verilog HDL是在C語言的基礎上發展起來的一種硬體描述語言,語法較自由。  (2)VHDL的書寫規則比Verilog煩瑣一些,但verilog自由的語法也容易讓少數初學者出錯。
  • FPGA設計基礎之Verilog
    在美國和日本等先進電子工業國,Verilog語言已成為設計數字系統的基礎。對於FPGA新手應由淺入深學習:(1)Verilog的基本語法,(2)簡單的可綜合Verilog模塊與邏輯電路的對應關係,(3)簡單的Verilog測試模塊和它的意義,(4)如何編寫複雜的多層次的可綜合風格的Verilog HDL模塊,(5)如何用可綜合的Verilog模塊構成一個可靠的複雜IP軟核和固核模塊,
  • FPGA程式語言——verilog語法
    如果讀者已經掌握C語言編程的基礎,那麼學習Verilog HDL並不困難。我們只要對Verilog HDL某些語句的特殊方面著重理解,並加強上機練習就能很好地掌握它,就能利用它的強大功能來設計複雜的數字邏輯電路系統。2.1.簡單的Verilog HDL模塊2.1.1.
  • 基於Verilog FPGA 流水燈設計
    在FPGA電路設計中,儘管流水燈的設計屬於比較簡單的入門級應用,但是其運用到的方法,是FPGA設計中最核心和最常用部分之一,是FPGA設計必須牢固掌握的基礎知識。從這一步開始,形成良好的設計習慣,寫出整潔簡潔的代碼,對於FPGA設計師來說至關重要。  在本案例中,使用常用的verilog語言完成該程序,設計並控制8個燈的花式或循環點亮。
  • 技術分享:FPGA之基礎篇
    Verilog基礎語法1.1  可綜合模塊以module為單元,具體實現如下以上是FPGA雜記基礎篇的第一部分,因文章篇幅所限,本文先分享到這裡。後續會有更多的基於FPGA的設計文章,敬請期待……文章來源:潤欣科技Fortune微信公眾號
  • Xpath語法-網絡爬蟲基礎
    前言這一章節主要講解Xpath的基礎語法,學習如何通過Xpath獲取網頁中我們想要的內容;為我們的後面學習Java網絡爬蟲基礎準備工作。備註:此章節為基礎核心章節,未來會在網絡爬蟲的數據解析環節經常使用,學會Xpath解析語法,可為未來爬蟲解析省去很多麻煩。
  • 「正點原子FPGA連載」第五章Verilog HDL語法
    第五章Verilog HDL語法Verilog HDL(Hardware Description Language)是在用途最廣泛的C語言的基礎上發展起來的一種硬體描述語言,具有靈活性高、易學易用等特點。
  • Python七天入門(二)- Python的基礎語法結構及變量
    上一篇文章天天Python為大家圖示講解了Python環境的安裝與配置:Python七天入門-天天Python帶你一周入門Python基礎(1),這一篇文章繼續為大家講解Python入門基礎的第二篇內容--Python中的語法結構,包括Python的基本語法以及變量、命名規範及關鍵字等內容。
  • Linux下python入門基礎之基礎語法2
    前言上一篇文章,我和大家一起學習了python的基本語法中的:print、縮進和多行連字符。這一篇文章我們再接著學習其它的語法。python入門基礎語法1.python引號python引號包含了三個(單引號、雙引號和三引號),與Java中一樣,引號必須成對出現,也就是說,引號是由兩部分組成,這兩部分缺一不可。其中三引號可以由多行組成,編寫多行文本的快捷語法,常用於做注釋。
  • 手把手教你學Go語言:Go語言基礎系列 -8分鐘學基礎語法
    文章每周持續更新,你的「點讚」「關注」是對我最大的肯定,可以微信搜公眾號「 後端技術學堂 」第一時間閱讀(一般比博客早更新一到兩篇)對於一般的語言使用者來說 ,20% 的語言特性就能夠滿足 80% 的使用需求,剩下在使用中掌握。
  • Python基礎教程:Python的基礎語法
    從今天開始,我們開始正式進入到Python的編寫程序中來,要想從零開始一步步的成為程序大神,除了天賦和機遇,前期的基礎功課一定是必不可少的,在前幾期我們一直在介紹Python的數據類型,今天我們開始介紹Python的基礎語法部分,為了方便編譯和執行代碼範例,在以後的講解中我們都將在PyCharm
  • 專欄F博學|跟著教官學英語3:英語基礎——語法+單詞!
    |男人幫·教官 編撰|和【PM10分男人】一起成長【專欄F博學|跟著教官學英語3:英語基礎——語法+單詞】對大多數人,尤其是成年人來說,學習是件枯燥的事情。很多人都嘗試學習過英語,但大部分都無奈中半途而廢。
  • 第一篇:C語言編程基礎語法
    本專欄系列分六篇,總結了C語言基礎知識的核心要點。教學視頻已上線,讀者可根據自身情況有選擇性地學習。01編程基礎C語言——貝爾實驗室、Dennis Ritchie
  • Python基礎:python中的幾個基礎語法詳解-開課吧
    學一門語言,基礎語法一定要紮實。就如蓋房子一樣,地基打得好,任憑風吹雨打,學習python也一樣,學習很多東西都會花大量的時間來學習基礎語法,對於毫無編程經驗的新手而言,這樣的無疑是很友好的,那麼我們下面講一講python的基礎語法。
  • 基礎差怎麼學英語?看了這篇你就懂了!
    很多同學問英語基礎差考研怎麼辦?對這個問題我們不要慌張,首先我們要判斷英語基礎如何算差?差在哪方面?下面我就來詳細解答~英語基礎差考研怎麼辦——何為差?英語基礎差考研怎麼辦——哪裡差?語言,無非就是單詞+語法的組合。如果一篇文章,你只能看懂70%的單詞,那這篇文章你基本就告別讀懂,更別提做題了。這個時候你需要不是技巧,而是老老實實背兩個月單詞,再談其他的。
  • 資深老師:想要學好小學英語語法,這些基礎知識必須要掌握!
    只有把基礎夯實,以後學習起來才能不費勁兒。但我們都知道,英語學習中最難的部分就是語法!要想學好小學英語,就必須要通過語法難關!然而很多學生對語法方面就是怎麼也不開竅。其實,小學英語語法知識並不難,先做好基礎知識分類,再結合例句理解,做相應的練習題,逐點突破,就會容易很多!
  • HTML5 語法基礎二(筆記)
    HTML5 語法基礎二(筆記)一、 HTML 語法簡介1、HTML 介紹1-1、HTML的全稱1HTML4.0 --- XHTML1.0 --- HTML5.0XHTML:eXtensible Hyper Text Markup Language可擴展 超 文本 標記 語言XHTML也是一種標記語言,表現方式與HTML4.0類似,不過語法上更加嚴格