tft每日頭條

 > 生活

 > verilogmodule名字可以重複嗎

verilogmodule名字可以重複嗎

生活 更新时间:2024-08-30 19:09:19
你真的理解Verilog 中的module嗎?

通過前段時間的面試,我發現很多入門或者工作1~2年的人,對于module的理解還停留在一種語法的關鍵字,類似c中的main,我相信應該還有很多人的想法都是這樣。經過這幾天的思考,我發現造成目前這種情況并不是個人能力導緻的,而是國内的環境導緻的。

  • 1、學習Verilog先學習一下C;
  • 2、Verilog和C語法規則類似,之前學了C再學習Verilog很快;
  • ......

上面的論調在論壇和各種XX群裡是很常見的,同時國内早期的人們圖書多半是從IEEE文檔裡把語法部分摘抄過來的,這就導緻了很多人對Verilog這一硬件描述語言理解不深,今天我們就拿最最常見的module為例再深入讨論一下。

IEEE中對于module的描述

verilogmodule名字可以重複嗎(你真的理解Verilog中的module嗎)1

IEEE Standard 1800-2017 中對modules的定義

我們從中很清楚的知道module是對數字電路的數據、功能和時序的封裝,說白了模塊的實際意義是代表硬件電路上的邏輯實體。

建模的含義

verilogmodule名字可以重複嗎(你真的理解Verilog中的module嗎)2

建模的通俗理解:建立模型,展開就是主要是指從現實世界中抽象出我們的目标,在這一過程中,保留相關因素,剔除無關因素,從而直觀地表示出問題。

建模的概念到SystemVerilog(下稱“SV”),就更加側重,SV強調的就是數字系統建模和驗證。

而我們使用Verilog和SV的過程就是對數字系統進行建模,最直觀的表現就是模塊之間是并行執行的,每個模塊都實現特定的功能。

模塊的描述方式:數據流建模、行為建模、結構建模

我們知道Verilog模型可以是實際電路的Verilog模型可以是實際電路的不同級别的抽象。這些抽象的級别和它們對應的模型類型共有以下五種:

  • 系統級(system):用高級語言結構(如case if...else...)實現設計模塊的外部性能的模型(在設計時隻需要知道輸入輸出的真值表,就可以寫出相關的描述)。
  • 算法級(algorithm):用高級語言結構實現設計算法的模型(寫出邏輯表達式)。
  • RTL級(Register Transfer Level):描述數據在寄存器之間流動和如何處理這些數據的模型。
  • 門級(gate-level):描述邏輯門(與或非)以及邏輯門之間的連接的模型。
  • 開關級(switch-level):描述器件中三極管和儲存節點以及它們之間連接的模型。

接下來我們在來看下幾種模塊的描述方式(建模):數據流建模、行為建模、結構建模,更細分的話個人覺得狀态機建模也是其中一類,但是這些不是我們讨論的範圍就不展開讨論了。

  • 數據流描述:采用assign連續賦值語句
  • 行為描述:使用always語句或initial語句塊中的過程賦值語句
  • 結構化描述:實例化已有的功能模塊或原語

下面以一個4位加法器(全加器)為例幫助大家去理解。

全加器的真值表如下(一位的):

verilogmodule名字可以重複嗎(你真的理解Verilog中的module嗎)3

全加器的真值表

「數據流描述」

module Full_Add_4b_1( A, B, Cin, Sum, Cout ); input[3:0] A; input[3:0] B; input Cin; output[3:0] Sum; output Cout; assign {Cout, Sum} = A B Cin; endmodule

「行為描述」

module Full_Add_4b_2( A, B, Cin, Sum, Cout ); input[3:0] A; input[3:0] B; input Cin; output[3:0] Sum; output Cout; reg [3:0] Sum; reg Cout; always @(A or B or Cin) begin {Cout, Sum} <= A B Cin; end endmodule

結構化描述

`include "Full_Add_4b_1.v" module Full_Add_4b_3( A, B, Cin, Sum, Cout ); input[3:0] A; input[3:0] B; input Cin; output[3:0] Sum; output Cout; //實例化全加器 Full_Add_4b_1 FA4b1( A, B, Cin, Sum, Cout ); endmodule

上面就很容易理解了各種建模的區别,接下來再簡單分析一下Verilog五種抽象級别和這三種建模方式的區别:從抽象級别的定義可知,這種抽象級别其實是指對同一個物理電路用Verilog不同層次(系統級、算法級、RTL級、門級、開關級)語言來描述的不同方式,比如現在需要一個4位全加器,那麼可以通過最最底層的三極管、MOS管去搭建(這種方式是早期的一種實現方式,現在很少用了)、門電路搭建、RTL描述、算法級描述、系統級描述來實現。

verilogmodule名字可以重複嗎(你真的理解Verilog中的module嗎)4

門電路搭建的一位全加器架構

門電路實現的觸發器

module flop(data,clock,clear,q,qb); input data,clock,clear; output q,qb; nand #10 nd1(a,data,clock,clear), nd2(b,ndata,clock), nd4(d,c,b,clear), nd5(e,c,nclock), nd6(f,d,nclock), nd8(qb,q,f,clear); nand #9 nd3(c,a,d), nd7(q,e,qb); not #10 iv1(ndata,data), iv2(nclock,clock); endmodule

算法級描述-各種邏輯表達式

verilogmodule名字可以重複嗎(你真的理解Verilog中的module嗎)5

算法級描述舉例

系統級描述-各種高級的語法結構,本例是case

verilogmodule名字可以重複嗎(你真的理解Verilog中的module嗎)6

系統級描述舉例

綜上,我們還可以将模塊分為行為模塊(隻從行為功能的角度來描述某一電路模塊)和結構模塊(從電路結構的角度來描述該電路模塊)這些就不深入展開了。

總結

上面說了很多不相關的話題,我們最後來個“點睛之筆”,總結一下:

1、每個.v文件都是以module開始......endmodule結束關鍵是Verilog側重的是對數字電路的建模,所以他沒有像C一樣以main作為核心;

2、我們平時寫一個程序的過程其實是利用Verilog的五種抽象級别的組合進行整個模塊的建模過程;

3、理解這一過程很重要。

4、以上理解純屬個人見解,如有錯誤歡迎指正。

最後“吟詩”一首:

小小module話題多,Verilog“掌舵”全靠它。

希望大家給點力,點個在看鼓鼓勁!

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部
曲組詞

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved