日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Verilog HDL 快速入门

發布時間:2023/12/20 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Verilog HDL 快速入门 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Verilog HDL 快速入門

Verilog HDL是一種硬件描述語言(HDL:Hardware Description Language),它是以文本形式來描述數字系統硬件的結構和行為的語言。 世界上最流行的兩種硬件描述語言是Verilog HDL和VHDL。

注意,VerilogHDL是一種描述語言,它和常見的編程語言C有根本的不同。C語言,讓計算機的CPU從上往下按順序執行每一條指令,執行完程序就結束了。

而,VerilogHDL主要是描述了一個數字模塊的結構,或者行為。有點像商業合同,合同里面也會描述產品的結構,產品的功能等等。合同的每一個條款,并不需要嚴格的先后順序,只要把項目的方方面面都考慮完整,寫下來就OK了。VerilogHDL也是這樣。

我們用VerilogHDL描述數字模塊的功能,剩下的交給編譯器(如,Quartus),編譯器會根據我們的要求設計重構FPGA內部硬件。對于大批懶人來說,這技術簡直碉堡了。這就是EDA(Electronic Design Automation,電子設計自動化)。


好,下面就來認識一下VerilogHDL
我們先設計一個“數據選擇器”:
s是數據選擇控制端,
a,b是輸入信號,y是輸出信號

代碼如下:

module mux2_1(a, b, s, y); //模塊名、模塊接口名input a, b, s; // 定義輸入端口output y; // 定義輸出端口/* s為0時,選擇a輸出;s為1時,選擇b輸出。*/ assign y = (s == 0) ? a : b; //輸出信號 endmodule

每個Verilog文件中都有一個module 開始,endmodule 結束的代碼塊。
這個代碼塊的定義了一個名字叫 mux2_1 的模塊,模塊名后面緊跟的括號內寫明了該模塊的接口信號,相當于數字器件的引腳。
但是括號內沒有說明接口的信號方向,所以緊跟著另起一行用input 和output 再說明一下。注釋和C語法一樣,可以用// 或 /* */ 。
assign 是Verilog的關鍵詞,書上稱為連續賦值。我一般把他視為“連線”操作,assign后面的緊跟的 y 在硬件上是一根導線(或輸出引腳)。
assign  y = (s == 0) ? a : b;
這句話的意思是:s如果為0,那么等號左邊就是a,否則就是b。將這個表達式的輸出結果接在輸出引腳 y 上。
這就是一個簡單的Verilog程序,不需要我們去設計與非門,直接表達你的你想要的功能就好了。然后,編譯下載到FPGA,功能就實現了。

要注意的是,assign 后面永遠跟著一個 =,它們是一起使用的。
即,assign xx = zz;


上面的2選1數據選擇器,內部實現結構如下:

所以,上面的assign語句還可以這樣寫,直接使用邏輯表達式:
assign y = (a & (~ s)) | (b & s);
這個是在門級對邏輯關系進行描述,所以不屬于行為描述,算是結構描述吧。下面這種描述方式,叫做門原語,算結構描述。這里的關鍵詞wire 表示電路中的導線(信號線)。

module mux2_1(a, b, s, y);input a, b, s;output y;wire ns, as, bs;not(ns, s);//這里使用了一個非門,輸出是ns,輸入是sand(as, a, ns);//使用一個與門,輸出as,輸入a和nsand(bs, b, s);//使用與門,輸出bs,輸入b和sor(y, as, bs);//使用或門,輸出y,輸入as和bs endmodule

看,這是告訴我們電路中有什么元器件,又是怎么連接的,所以這個屬于結構描述。
很明顯,有時候結構描述比行為描述要費力得多,而且不太容易理解程序功能。
另外,上面的這個程序中,這4個邏輯門的順序,可以隨便寫,不用管先后順序。


這個數據選擇器,還可以使用如下行為描述方法:

module mux2_1(a, b, s, y);input a, b, s; output y; reg y; //reg 表示寄存器always @(a, b, s)beginif(!s) y = a;else y = b;end endmodule

這里reg表示寄存器(存儲器),需要提醒一下的是,assign后面只能接wire型,不能接reg型。(當然output從物理上也是wire)
為什么不能?因為寄存器的賦值除了需要輸入信號,還需要觸發信號(例如D觸發器寄存器),assign?sorry,he can’t。

always @(a, b, s)中,括號里面的輸入信號a,b,s表示敏感信號。
always @( ) 是連在一起使用的。
這句話的意思是,敏感信號列表中的任何一個信號發生變化,將會引發
begin …… end 之間的行為。
Verilog用begin和end包圍代碼段,相當于c語言中的大括號{ }的功能。
if(!s) y = a;
這里的“=”單獨使用,叫做“阻塞賦值”。我把他理解為“串行賦值”。
比如,有這么一段代碼:
b=a;
c=b;
那么最后,c的值就等于a,這個行為在描述的時候,語句的先后順序,決定了賦值的先后。
在Verilog中,和它對應的還有一個“非阻塞賦值”,表示方法是 <=,我把這種賦值稱為“并行賦值”。具體區別,請參考另一篇短文阻塞賦值和非阻塞賦值。


總結

以上是生活随笔為你收集整理的Verilog HDL 快速入门的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 天天操网站 | 成年人精品视频 | 亚洲 欧美 日韩 综合 | 亚洲精品亚洲 | 另类小说婷婷 | 成人免费无遮挡无码黄漫视频 | 欧美嫩草 | 日本午夜免费福利视频 | 久久9久久| 亚洲精品aaaaa | 国产精品久久久亚洲 | 欧美顶级毛片在线播放 | 97黄色片 | 久久久久极品 | 国产亚洲一区二区三区 | 瑟瑟av| 亚洲国产网站 | 国产91热爆ts人妖系列 | 久草免费福利 | 情趣五月天 | 熟女高潮一区二区三区视频 | 伊人久综合 | 国产在线观看不卡 | 亚洲图片在线观看 | 精品美女一区二区三区 | 99热在线观看 | 成人勉费视频 | 无码人妻丰满熟妇啪啪网站 | 特级淫片裸体免费看冫 | 欧美精品激情视频 | 亚洲香蕉在线 | 国产不卡二区 | 欧美一级片在线 | 99精品欧美一区二区三区综合在线 | 91精品国产自产精品男人的天堂 | 嫩草av在线| 欧美日本在线视频 | 拔萝卜91 | 国产最爽的乱淫视频国语对白 | 国产亚洲精品久久久久久无几年桃 | 男女做那个的全过程 | 国产又粗又猛又黄又爽视频 | 国产亚洲精品久久久久丝瓜 | 亚洲AV无码成人片在线观看 | 亚洲精品字幕 | 日本色图片 | 日韩一区二区免费在线观看 | 成人黄色在线观看 | 免费三级av| 亚洲在线综合 | 91爱啪| 国产女人视频 | 欧洲一级视频 | 日韩字幕| 最新99热| 国产精品伦理一区二区 | 美女扒开腿让男人 | 日韩精品在线观看网站 | 97在线超碰 | xxxxx国产| 亚洲精品久久久久久久蜜桃 | 国产精品无码自拍 | 夜色视频网 | 99精品视频免费观看 | 人妻一区二区三区免费 | 国产h视频在线 | 久久亚洲精品小早川怜子 | 嫩草影院永久入口 | 男女作爱网站 | 亚洲自拍小视频 | 国产一区二区三区视频免费在线观看 | 一区二区三区四区人妻 | 快射视频网 | 日韩欧美激情视频 | av大西瓜| 亚洲高清无码久久 | 欧美日韩在线一区 | 爱豆国产剧免费观看大全剧集 | 欧美一区免费观看 | 超碰97av在线 | 久久久男女 | www黄色com | 天天弄天天干 | 黄色av免费观看 | 国产区福利 | 激情草逼| 欧美亚洲天堂网 | 伊人网成人网 | 人妻av无码一区二区三区 | 777精品视频| 亚洲情人网 | 午夜小视频在线 | 67194av| 欧美二三区 | www.色就是色.com | 中文字幕导航 | 99视频在线| 国产美女免费网站 | 国产丰满果冻videossex |