色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

從零開始學FPGA-Verilog語法基礎(中)

電子工程師 ? 來源:FPGA設計論壇 ? 作者:FPGA設計論壇 ? 2021-03-14 10:16 ? 次閱讀

我們接著上篇文章繼續學習,上次提到了兩種賦值語句,讓我們接著往下學。

1、塊語句

塊語句包括兩種,一個是順序塊,一個是并行塊。

(1)順序快

順序快就好比C語言里的大括號“{ }”,在Verilog語法中,用begin…end代替。這里只需要知道,在begin…end中間的語句是順序執行的就行了。

(2)并行塊

并行塊可以算是一個新的知識點,與順序塊最大的不同就是并行塊中的語句是同時開始執行的,要想控制語句的先后順序,可以加延時語句控制。這種并行塊是用fork…join語句描述。

2、條件語句

條件語句這里不說,和C語言一樣。就說一點主意事項。

在使用條件語句時,要注意語句的嚴整與封閉性。和C語言不同,舉個例子

always @(al or d)

begin

if(al==1) q=d;

end

這個例子是說,當al上升沿到來時,d的值賦給q,那么當al=0時又是什么情況呢,事實上,在always塊中,如果沒有給變量賦值,這個變量就會保持原值,也就是生成了一個鎖存器。為了避免這種情況的發生,我們一般這樣寫

always @(al or d)

begin

if(al==1) q=d;

else q=0;

end

同樣在case語句中也要加上default語句避免鎖存器的生成,這樣可以使設計者更加明確的設計目標,也提高了程序的可讀性。

3、case語句

case語句要注意幾點,只挑幾點重要的,其他的不說了

(1)case語句分項后的表達式的值必須相同,否則就會出現問題,例如上面圖片上的result。

(2)與C語言不同,與某一項case語句匹配后,就會跳出case語句,這里沒有break語句。

(3)case語句的所有表達式位寬必須相等,例如上圖都是16位整型,如果不加以說明,系統會以默認值32位控制表達式位寬。

下面是case,casez,case語句的真值表

bcba498a-8434-11eb-8b86-12bb97331649.jpg

這個表其實還是很好記的

case語句,只有匹配才出“1”

casez語句除了匹配出“1”之外,另外只要遇到“z”就出“1”

case語句除了匹配出“1”之外,另外只要遇到“z”或“x”就出“1”

上圖就用到了casez語句來處理不必要考慮的值,這樣就可以靈活的設置對信號的默寫位進行比較。

下面寫了一個小例子來練習一下

使用case語句實現一個四選一多路選擇器

module xiaomo(a1,a2,a3,a4,out,s1,s2);

input a1,a2,a3,a4;

input s1,s2;

reg out; //把輸出變量聲明為寄存器類型

always @(s1 or s2 or a1 or a2 or a3 or a4 or out) //任何信號的變化都會引起輸出變量的重新計算

begin

case ({s1,s2}) //位拼接運算

2‘b00: out=a1;

2’b01: out=a2;

2‘b10: out=a3;

2’b11: out=a4;

default: out=1‘bx; //保持語句的嚴整性

endcase

end

endmodule

4、循環語句

Verilog語法**有4中循環語句,這里只簡單說一下C語言里沒有的兩種

(1) forever語句

連續執行語句,這種語句主要用在產生周期性的波形,用來做仿真信號。個人理解和always語句差不多的功能,但是,forever語句只能用在initial塊中。

(2)repeat 語句后面接常量表達式,可以指定循環次數,例如;

repeat (8)

begin

end

表示循環8次相應語句。

5、順序塊和并行塊

所謂順序塊就是前面說的begin…end,他的作用就是把多條語句組合到一起執行,在順序塊里面,語句是一條一條順序執行的,如果遇到#10延遲語句,延遲也是相對于上一條語句的延遲,這一點比較重要。

相對于順序塊的就是并行塊,用fork…end語句表示,并行塊里的語句是同時執行的。

順序塊和并行塊可以嵌套使用。

如果在begin或者fork語句后面加上名字,這個塊語句就成了命名塊,例如

begin :xiaomo

……

end

命名塊有什么好處呢?有了命名塊,我們就可以用verilog提供的disable語句來隨時終止命名塊,例如disable xiaomo;這樣,當程序運行到此時,就會禁用命名塊,就會直接跳出塊語句,相當于C語言里面的break語句一樣,看下面這個例子:

6、生成塊

生成塊語句可以動態的生成Verilog代碼,這一聲明語句方面了參數化模塊的生成。黨對矢量中的多個位進行重復操作時,或者進行多個模塊的實力引用時,或者在根據參數的定義來確定程序中是否應該包括末端Verilog代碼的時候,使用生成語句能夠大大簡化程序的編寫過程。

生成語句可以控制變量的聲明、任務或函數的調用,還能對實力引用進行全面的控制。編寫代碼時必須在模塊中說明生成塊的實例范圍,關鍵字 generate…endgenerate用來指定該范圍。

Verilog中有三種生成語句的方法,分別是循環生成,條件生成和case生成。

(1)循環生成

注:genvar 是關鍵詞,用于生成生成變量,生成變量只存在于生成塊中,在確立后的方針代碼中,生成變量是不存在的。

xor_loop是賦予生成語句的名字,目的在于溝通它對循環生成語句之中的變量進行層次化引用。因此循環生成語句中的各個異或門的相對層次為:xor_loop[0].gl,xor_loop[1].gl…,xor_loop[31] 這句話什么意思啊

這個例子中的 xor gl (out [ j ] , i0 [ j ], i1 [ j ] );什么意思??求大神指點

當然這個異或門還可用always塊實現

生成塊程序

generate

for (j=0;j

begin :xiaomo

always @(i0[ j ] or i1[ j ]) out [ j ]=i0[ j ]^i1[ j ];

end

endgenerate

(2)條件生成

(3)case生成

下面是一個例子使用case語句生成N位的加法器

說實話上面這些東西我自己也是看的模模糊糊,好多地方不懂,只能先截個圖放這兒了。唉。..基礎還是不行啊。..

7、結構語句

(1)initial語句比較簡單,這里就不多說了。

(2)always語句

always語句在仿真過程中是不斷活動的,always語句后面的語句是否執行,這要看always語句是否滿足觸發條件。因此,always語句只有和時序控制語句結合才能使用,否則就會被死鎖。例如:always areg=~areg;

這個always語句生成一個0延遲的無限跳變過程這時會發生死鎖。但是一旦加上時序控制,這條語句就不一樣了,例如:

always #10 areg=~areg;

這樣的語句就描述的一個周期為20毫秒的跳變信號。所以我們常用這種方法來描述時鐘信號,并作為激勵信號來測試硬件電路。

看下面這個例子

reg [7:0] counter;

reg tick;

always @(posedge areg)

begin

tick=~tick;

counter=counter+1;

end

這個例子就是說每當信號areg上升沿到來時,信號tick取反,計數器counter加一,這種時間控制是always語句最常用的。

always語句的時間控制模板

如果組合邏輯塊語句的輸入變量過多容易漏掉,例如:

always @(a or b or c or d or e)

這樣的情況下可以用always@ (*)語句來代替,*號自動將所有輸入變量默認為敏感信號。

上面所討論的都是等待信號的值發生變化或者觸發時才執行相應語句,我們也可以用wait語句來用電平敏感來控制。例如

always

wait (count_enable) #20 count=count+1;

意思就是說,當count-enable的值為1時,程序延遲20毫秒后計數。

8、任務與函數

書上寫了關于任務與函數的區別,寫了好多,我覺得區別這兩個概念主要看一點就夠了,就是看有沒有返回值,函數有,任務沒有。舉個例子

switch_bytes (old_bytes,new_bytes);這是個任務,沒有返回值,功能是把新舊兩個字節互換位置。

new_bytes=switch_bytes(old_bytes);這是個函數,功能是把舊字節轉換后賦值給新字節。有返回值。

下面寫一個交通信號燈的程序來學習一下任務這個概念

moudle xiaomo_traffic;

reg clock,red,green,amber;

//定義時鐘,紅燈,黃燈,綠燈

parameter on=1,off=0,red_tics=350.amber_tics=30,green_ics=200;

//定義紅燈等待350個時鐘,黃燈等待30個時鐘,綠燈等待200個時鐘

initial red=0;

initial green=0;

initial amber=0;

//初始化,這里用initial語句保證三條語句同時執行

always

begin

red=on; //紅燈亮

light (red,red_tics); //這里用到任務,功能是等待350個時鐘的時間,聲明看下面程序

amber=on; //黃燈亮

light (amber,amber_tics); //等待30個時鐘

green=on; //綠燈亮

light (green,green_tics); //等待200個時鐘

end

task:light; //命名任務

output color;

input [31:0] tics;

//注意這里的兩個變量要與上面的一一對應,也就是說上面的light(red,red_tics);中的red對應color,red_tics對應tics

begin

repeat(tics); //重復執行tics次下面的語句

@(posedge clock); //等待上升沿,因為這里的tics對應上面的red_tics幾個,所以這里要等待相應個上升沿

color=off; //等到相應個上升沿結束時,相應顏色的燈關閉

end

endtask

//下面就是寫時鐘函數了,用always塊

always

begin

#100 clock=0;

#100 clock=1; //每100毫秒產生一次跳變

end

endmoudle

注意:這個程序要找對一一對應關系,例如脈沖模塊里的clock對應posedge clock中的clock,程序行與行之間是有聯系的,不能隨便聲明。

責任編輯:lq6

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5336

    瀏覽量

    120230
  • C語言
    +關注

    關注

    180

    文章

    7604

    瀏覽量

    136692
  • 加法器
    +關注

    關注

    6

    文章

    183

    瀏覽量

    30114

原文標題:零基礎學FPGA-Verilog語法中

文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Verilog 測試平臺設計方法 Verilog FPGA開發指南

    Verilog測試平臺設計方法是Verilog FPGA開發的重要環節,它用于驗證Verilog設計的正確性和性能。以下是一個詳細的
    的頭像 發表于 12-17 09:50 ?125次閱讀

    Verilog與VHDL的比較 Verilog HDL編程技巧

    Verilog 與 VHDL 比較 1. 語法和風格 VerilogVerilog語法更接近于 C 語言,對于有 C 語言背景的工程
    的頭像 發表于 12-17 09:44 ?113次閱讀

    從零開始訓練一個大語言模型需要投資多少錢?

    一,前言 ? 在AI領域,訓練一個大型語言模型(LLM)是一個耗時且復雜的過程。幾乎每個做大型語言模型(LLM)訓練的人都會被問到:“從零開始,訓練大語言模型需要多久和花多少錢?”雖然網上有很多
    的頭像 發表于 11-08 14:15 ?199次閱讀
    <b class='flag-5'>從零開始</b>訓練一個大語言模型需要投資多少錢?

    Verilog硬件描述語言參考手冊

    一. 關于 IEEE 1364 標準二. Verilog簡介三. 語法總結四. 編寫Verilog HDL源代碼的標準五. 設計流程
    發表于 11-04 10:12 ?0次下載

    Verilog語法運算符的用法

    verilog語法中使用以下兩個運算符可以簡化我們的位選擇代碼。
    的頭像 發表于 10-25 15:17 ?593次閱讀
    <b class='flag-5'>Verilog</b><b class='flag-5'>語法</b><b class='flag-5'>中</b>運算符的用法

    Verilog HDL的基礎知識

    本文繼續介紹Verilog HDL基礎知識,重點介紹賦值語句、阻塞與非阻塞、循環語句、同步與異步、函數與任務語法知識。
    的頭像 發表于 10-24 15:00 ?340次閱讀
    <b class='flag-5'>Verilog</b> HDL的基礎知識

    FPGA Verilog HDL代碼如何debug?

    ,共同進步。 歡迎加入FPGA技術微信交流群14群! 交流問題(一) Q:Verilog代碼如何debug?最近學習fpga,寫了不少verilog,
    發表于 09-24 19:16

    FPGA Verilog HDL有什么奇技巧?

    的話,仿真波形是z,雖然出結果時不影響,有沒有必要一開始的時候直接reg賦初值?在rtl文件里能不能使用initial賦初值,這樣的rtl代碼能否綜合? A:在 Verilog ,是否有必要為所有
    發表于 09-12 19:10

    為什么FPGA屬于硬件,還需要搞算法?

    交流學習,共同進步。 交流問題(一) Q:為什么FPGA屬于硬件,還需要搞算法? 剛入門準備fpga但一開始的是
    發表于 09-09 16:54

    【招聘】verilog vhdl FPGA

    1.熟悉FPGA架構及應用,熟悉圖像算法的FPGA實現。 2.熟悉verilog vhdl,熟悉Xilinx或Intel等開發工具。 3.有AI算法 fpga實現經驗優先。 4.本科及
    發表于 09-02 15:50

    使用AD8001放大一個100mv左右的信號,經過放大的信號低電平都是三點幾伏,不能夠從零開始,為什么?

    請問,如圖我想使用AD8001放大一個100mv左右的信號,然后使用比較器輸出信號進行計數,但是現在經過放大的信號低電平都是三點幾伏,不能夠從零開始,請問這是什么原因呢?如圖,紅色是需要放大的信號,紫色是經過放大的信號。
    發表于 08-20 06:17

    分享一本書 《從零開始設計 FPGA 最小系統》

    *附件:從零開始設計FPGA最小系統.pdf 以下為內容片段摘要:詳細內容在PDF里 FPGA 最小系統的概念 FPGA 最小系統是可以使 FPGA
    發表于 07-26 07:24

    FPGA學習筆記---基本語法

    Verilog語法是指硬件能夠實現的語法。它的子集很小。常用的RTL語法結構如下: 1、模塊聲明:module ... end module 2、端口聲明:input, output,
    發表于 06-23 14:58

    海靈犀FPGA基礎研實驗箱

    配件組成,提供Verilog語言的實驗例程,產品具有實用性高、案例豐富、國產化程度高等特點,滿足教學機構微電子、電子工程等相關專業基礎研實驗需要。圖海靈犀FPGA
    的頭像 發表于 06-13 08:11 ?918次閱讀
    海靈犀<b class='flag-5'>FPGA</b>基礎研<b class='flag-5'>學</b>實驗箱

    fpga是什么專業

    FPGA(現場可編程門陣列)的學習涉及多個專業領域,但主要與電子信息類、自動化類、計算機類等相關專業最為緊密。這些專業通常涵蓋數字電路設計、硬件描述語言(如Verilog和VHDL)編程、嵌入式系統設計等核心課程,為學習FPGA
    的頭像 發表于 03-14 16:41 ?2343次閱讀
    主站蜘蛛池模板: 欧美黄色xxx| 99久久久无码国产精精品| 性盈盈剧场| 亚洲中文字幕手机版| 亚洲精品www久久久久久久软件| 最近在线视频观看2018免费| 敌伦小芳的第一次| 久久久久久88色偷偷| 美女扒开尿孔| 无码乱人伦一区二区亚洲一 | 色综合久久天天影视网| 亚洲色图19p| 成人免费看片又大又黄| 国产成人精品免费青青草原app| 国产成人精品免费视频下载| 精品日产1区2卡三卡麻豆| 久久橹| 人妻互换免费中文字幕| 在教室伦流澡到高潮H女攻视频| 在线免费中文字幕| 国产成人精品午夜福麻豆报告| 漂亮的保姆3中文版完整版 | 公开超碰在线视频| 中文字幕无码A片久久| 午夜在线观看免费观看 视频| 小小水蜜桃3视频在线观看| 黄色xxxxxx| 色小说在线| 老司机福利视频一区在线播放| 乌克兰10一12x video| BL低喘贯穿顶弄老师H| 久久热r在线视频精品| 羞羞答答影院在线| 成人国产亚洲精品A区天堂蜜臀| 久久视频精品38在线播放| 亚洲 日韩 在线 国产 精品| yellow高清免费观看日本| 国产免费啪嗒啪嗒视频看看| 久久99视频免费| 欧美亚洲色帝国| 用震蛋调教女性下面视频|