0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

FPGA開發(fā)環(huán)境的搭建和verilog代碼的實現(xiàn)

CHANBAEK ? 來源:小小研究生 ? 作者:xxyjs2020 ? 2023-05-11 17:30 ? 次閱讀

FPGA需要良好的數(shù)電模電基礎(chǔ),verilog需要良好C語言基礎(chǔ)。

FPGA的準(zhǔn)備工作:下載Quartus II,Modelsim和notepad++(notepad++是文本編輯器,quartus有自帶的,可以不裝,也可以用其他的)。后臺回復(fù)“FPGA軟件下載”獲取安裝包。安裝完成后,實現(xiàn)Quartus II與Modelsim和notepad++的關(guān)聯(lián)(不關(guān)聯(lián)notepad++的話默認(rèn)用quartus自帶的)。方法是:tools欄的option,如下圖選中Win64。

圖片

關(guān)聯(lián)notepad++如圖,在文件夾中選擇安裝好的exe應(yīng)用程序。

圖片

Verilog可能是FPGA路上的第一個絆腳石,但是代碼類的學(xué)習(xí)都是熟能生巧,掌握規(guī)律只需3天即可上手。

基礎(chǔ)語法

1、區(qū)分大小寫,分號結(jié)尾(空格、換行無意義),單行注釋用//,多行注釋用/* 代碼 */,標(biāo)識符區(qū)分大小寫,關(guān)鍵字小寫。

2、0表示假,1表示真,X/x表示未知,Z/z表示高阻。

3、十進制('d 或 'D),十六進制('h 或 'H),二進制('b 或 'B),八進制('o 或 'O),4'b1011中4表示位數(shù),b表示進制,1011是數(shù)值。 字符串用雙引號且不能換行。

4、最常用的數(shù)據(jù)類型:wire和reg,wire 表示物理連線,reg表示存儲單元。

5、表達式由操作符和操作數(shù)構(gòu)成,其中操作符有算術(shù)、關(guān)系、等價、邏輯、按位、歸約、移位、拼接、條件共9種,操作數(shù)可以是任意的數(shù)據(jù)類型。注意邏輯與(&&)、按位與(&)。

數(shù)電中有組合邏輯電路和時序邏輯電路。組合邏輯電路模塊:

6、連續(xù)賦值語句以assign開頭用于對 wire 型變量進行賦值

7、普通時延:assign #10 Z = A & B ; 把A與B的結(jié)果延時10個單位再賦值給Z。 隱式時延:wire #10 Z = A & B; 聲明wire型變量時對其進行包含一定時延的連續(xù)賦值。 A 或 B 任意一個變量發(fā)生變化,那么 Z會有 10 個時間單位的時延。 如果在這 10 個時間單位內(nèi),A 或 B 任意一個值又發(fā)生了變化,那么計算 Z 的新值時會取 A 或 B 當(dāng)前的新值。 所以稱之為慣性時延,即信號脈沖寬度小于時延時,對輸出沒有影響。 因此仿真時,時延一定要合理設(shè)置,防止某些信號不能進行有效的延遲。

時序邏輯電路模塊:

8、一個模塊中可以包含多個 initial 和 always 語句,但 2 種語句不能嵌套使用。 語句在模塊間并行執(zhí)行,與前后順序無關(guān)。 語句內(nèi)部是順序執(zhí)行的(非阻塞賦值除外)。 **initial **語句從 0 時刻開始執(zhí)行,只執(zhí)行一次,多個 initial 塊之間是相互獨立的。 如果 initial 塊內(nèi)包含多個語句,需要使用關(guān)鍵字 begin 和 end 組成一個塊語句。 只包含一條語句可以不用。 **always **語句是重復(fù)執(zhí)行的。 always 語句塊從 0 時刻開始執(zhí)行其中的行為語句; 當(dāng)執(zhí)行完最后一條語句后,便再次執(zhí)行語句塊中的第一條語句,如此循環(huán)反復(fù)。 always 語句多用于仿真時鐘的產(chǎn)生,信號行為的檢測等。

后面會結(jié)合數(shù)電詳細講解。

推薦使用hdlbits網(wǎng)站刷題,非?;A(chǔ),給出了模塊的框架,只需要按照需求填入關(guān)鍵語句。

1、熟悉wire

圖片

module top_module(
    input a,
    input b,
    input c,
    input d,
    output out,
    output out_n ); 
    assign out=(a&b)|(c&d);
    assign out_n=~((a&b)|(c&d));
endmodule

verilog采用自頂向下的設(shè)計方法,分模塊設(shè)計,這樣做的好處是,不同的人可以負責(zé)不同的模塊,最后組裝起來。 每個模塊都以Module 模塊名開始,以endmodule結(jié)尾,且需要定義輸入輸出,以及輸出與輸入的關(guān)系。 在這個實例中,需要填入的就是兩個assign語句,得到out和out_n。

2、熟悉向量

當(dāng)位寬大于 1 時,wire 或 reg 即可聲明為向量的形式。

圖片

module top_module( 
    input [2:0] a,
    input [2:0] b,
    output [2:0] out_or_bitwise,
    output out_or_logical,
    output [5:0] out_not
);
assign out_or_bitwise=a|b;
assign    out_or_logical=a||b;
assign  out_not={~b,~a};
endmodule

邏輯或||和位或|的區(qū)別:位或是兩個 N 位向量之間的每一位都進行或運算形成N位新向量,而邏輯運算將整個向量視為布爾值(true = 非零,false = 零)并生成 1 位輸出。{向量1,向量2,...}可以用于合并向量。位數(shù)少時可以用于向量反轉(zhuǎn),例如in[3:0]反轉(zhuǎn)可以使out={in[0],in[1],in[2],in[3]}。

圖片

module top_module (
    input a, b, c, d, e,
    output [24:0] out );//
    assign out=~{{5{a}},{5},{5{c}},{5hd7paze},{5{e}}}^{5{a,b,c,d,e}};
endmodule

向量復(fù)制的格式是{復(fù)制次數(shù){向量}},注意復(fù)制后的向量需要用{}。異或是a^b,同或是~a^b。

3、熟悉模塊

和之前在python中一樣,模塊實例化有非常重要的作用。如果事先定義一個模塊的功能,后面每一次使用時,都只需要讓自己定義的端口對應(yīng)上原模塊的端口,就可以調(diào)用。如果不這樣做,每一次使用都需要寫一次這個模塊的代碼。

實例化有兩種方式,按位置:mod_a instance1 ( wa, wb, wc );按名稱:mod_a instance2 ( .out(wc), .in1(wa), .in2(wb) );前一種不建議使用,因為如果模塊的端口列表發(fā)生更改,則還需要查找并更改模塊的所有實例化以匹配新模塊。后一種雖然寫起來比較復(fù)雜,但是將每一個端口都對應(yīng)上,與位置無關(guān)。

圖片

按名稱:

module top_module ( input a, input b, output out );
mod_a instance1 (
    .out(out),
    .in1(a), 
    .in2(b) 
 );
endmodule

按位置:

module top_module ( input a, input b, output out );
    mod_a instance1 (a,b,out);
endmodule

top_module是模塊名,這個模塊有兩個輸入端口和一個輸出端口。這個模塊里用到了一個事先定義好的函數(shù)mod_a,也有兩個輸入端口和輸出端口。將端口對應(yīng)起來,這個模塊就可以實現(xiàn)mod_a的功能。

下面看幾個復(fù)雜的例子:

移位寄存器

圖片

module top_module ( input clk, input d, output q );
wire q1,q2;
my_dff d0(.clk(clk),.d(d),.q(q1));
 my_dff d1(.clk(clk),.d(q1),.q(q2));
 my_dff d2(.clk(clk),.d(q2),.q(q));
endmodule

這個模塊名是top_module,有時鐘,輸入和輸出。實現(xiàn)定義了一個函數(shù)my_dff,整個模塊使用了三次D觸發(fā)器,因此需要實例化三次。對于函數(shù)d0,d1,d2都需要把端口對應(yīng)上,由于q1,q2是引入的變量,用來將前一級觸發(fā)器輸出和后一級觸發(fā)器輸入連接上,所以需要先聲明q1,q2是wire型變量。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1624

    文章

    21540

    瀏覽量

    600533
  • 邏輯電路
    +關(guān)注

    關(guān)注

    13

    文章

    491

    瀏覽量

    42505
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1335

    瀏覽量

    109860
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7581

    瀏覽量

    135590
  • 開發(fā)環(huán)境
    +關(guān)注

    關(guān)注

    1

    文章

    216

    瀏覽量

    16550
收藏 人收藏

    評論

    相關(guān)推薦

    嵌入式arm linux Java運行環(huán)境搭建和注意事項是什么

    嵌入式linux Java運行環(huán)境搭建和注意事項我的開發(fā)硬件環(huán)境搭建步驟1. 下載 ORacle 公司的ejdk-8u211-linux-a
    發(fā)表于 12-27 06:23

    ECU試驗測試環(huán)境搭建和支持服務(wù)

    ECU試驗測試環(huán)境搭建和支持服務(wù)  隨著電子技術(shù)在汽車行業(yè)中的應(yīng)用不斷增長,汽車電子產(chǎn)品系統(tǒng)日益復(fù)雜,如何保證汽車電子產(chǎn)品的質(zhì)量也越
    發(fā)表于 03-11 10:59 ?1600次閱讀

    fpga實現(xiàn)jpeg Verilog代碼

    本站提供的fpga實現(xiàn)jpeg Verilog代碼資料,希望能夠幫你的學(xué)習(xí)。
    發(fā)表于 05-27 15:09 ?200次下載

    FPGA實現(xiàn)數(shù)字時鐘

    在Quartus Ⅱ開發(fā)環(huán)境下,用Verilog HDL硬件描述語言設(shè)計了一個可以在FPGA芯片上實現(xiàn)的數(shù)字時鐘. 通過將設(shè)計
    發(fā)表于 11-29 16:51 ?182次下載
    <b class='flag-5'>FPGA</b><b class='flag-5'>實現(xiàn)</b>數(shù)字時鐘

    開發(fā)環(huán)境搭建教程

    android Windows系統(tǒng)下開發(fā)環(huán)境搭建
    發(fā)表于 03-22 17:42 ?0次下載

    RP4412 Android4.0 環(huán)境搭建和源碼編譯說明_v1

    RP4412 Android4.0 環(huán)境搭建和源碼編譯說明。
    發(fā)表于 05-04 16:04 ?0次下載

    測試環(huán)境搭建和維護_軟硬件測試環(huán)境

     測試環(huán)境搭建,每個公司都有不一樣的流程和方法。一種是運維或者開發(fā)負責(zé)搭建和維護,另一種是測試人員進行搭建和維護。大部分復(fù)雜的測試
    的頭像 發(fā)表于 01-31 18:30 ?6722次閱讀
    測試<b class='flag-5'>環(huán)境</b>的<b class='flag-5'>搭建和</b>維護_軟硬件測試<b class='flag-5'>環(huán)境</b>

    php開發(fā)環(huán)境搭建和使用

    本文主要介紹的是php開發(fā)環(huán)境搭建和使用。apache在默認(rèn)情況下不會處理php頁面,Apache處理php頁面的步驟:即:php開發(fā)環(huán)境
    的頭像 發(fā)表于 02-01 15:26 ?3391次閱讀
    php<b class='flag-5'>開發(fā)</b><b class='flag-5'>環(huán)境</b>的<b class='flag-5'>搭建和</b>使用

    一文詳解SAM4L8開發(fā)環(huán)境搭建和使用

    本文主要介紹SAM4L8開發(fā)環(huán)境搭建和使用,具體的跟隨小編來詳細的了解一下。
    的頭像 發(fā)表于 06-18 05:41 ?2698次閱讀
    一文詳解SAM4L8<b class='flag-5'>開發(fā)</b><b class='flag-5'>環(huán)境</b>的<b class='flag-5'>搭建和</b>使用

    Atmel Studio 6.2開發(fā)環(huán)境搭建和使用

    本篇搭建和使用的是Atmel Studio 6.2開發(fā)環(huán)境。Atmel Studio 6.2中也給出了這個發(fā)板的示例程序,本篇文章就一步一步的通過下載和搭建
    的頭像 發(fā)表于 06-18 07:14 ?1.8w次閱讀
    Atmel Studio 6.2<b class='flag-5'>開發(fā)</b><b class='flag-5'>環(huán)境</b>的<b class='flag-5'>搭建和</b>使用

    如何搭建鴻蒙開發(fā)環(huán)境

    開發(fā)某一個平臺的程序,那么首先要搭建出本地開發(fā)環(huán)境,那么如何搭建鴻蒙開發(fā)
    的頭像 發(fā)表于 02-24 11:25 ?3657次閱讀
    如何<b class='flag-5'>搭建</b>鴻蒙<b class='flag-5'>開發(fā)</b><b class='flag-5'>環(huán)境</b>

    FPGA設(shè)計中DAC控制的Verilog實現(xiàn)

    FPGA設(shè)計中DAC控制的Verilog實現(xiàn)(單片機電源維修)-該文檔為FPGA設(shè)計中DAC控制的Verilog
    發(fā)表于 07-26 12:18 ?18次下載
    <b class='flag-5'>FPGA</b>設(shè)計中DAC控制的<b class='flag-5'>Verilog</b><b class='flag-5'>實現(xiàn)</b>

    Digispark開發(fā)環(huán)境搭建

    Digispark開發(fā)環(huán)境搭建
    發(fā)表于 11-15 20:51 ?16次下載
    Digispark<b class='flag-5'>開發(fā)</b><b class='flag-5'>環(huán)境</b><b class='flag-5'>搭建</b>

    STM32 搭建開發(fā)環(huán)境

    STM32 搭建開發(fā)環(huán)境
    發(fā)表于 12-08 14:36 ?20次下載
    STM32 <b class='flag-5'>搭建</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>環(huán)境</b>

    FPGA開發(fā)環(huán)境搭建和verilog代碼實現(xiàn)

    FPGA需要良好的數(shù)電模電基礎(chǔ),verilog需要良好C語言基礎(chǔ)。
    發(fā)表于 05-22 15:04 ?751次閱讀
    <b class='flag-5'>FPGA</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>環(huán)境</b>的<b class='flag-5'>搭建和</b><b class='flag-5'>verilog</b><b class='flag-5'>代碼</b>的<b class='flag-5'>實現(xiàn)</b>