​verilog相關基礎知識

2021-02-13 IT阿信
    對於verilog基礎知識,這裡做簡單的介紹,對於已經熟悉verilog語言的讀者可以省略不看此部分。

電平:

    高電平   :1

    低電平   :0

    電平未知:X

    高阻態   :Z   

進位:

    二進位   :b

    八進位   :o

    十進位   :d

    十六進位:  h

' 的概念:

    舉例:

    二進位    4』b0101   4位二進位為    0101

    十進位    4』d2         4位十進位為    0010

    十六進位 4』ha         4位十六進位為1010

_的概念:

    目的:增加程序的可讀性。

    舉例:(_不被編譯器編譯)

    16』b0101_0011_1010_0101=16』h53a5

標識符:

    類似於C語言的變量名,用於定義模塊名、埠號、信號名等。

    標準:不建議大小寫混寫、普通內部信號全部小寫、需要表明標識符含義含義

Verilog數據類型:

1.寄存器數據類型

    表示一個抽象的數據存儲單元,使用賦值語句可以改變寄存器的數值。

    關鍵字reg ,只能在always和initial語句中被賦值,如果沒有賦值,為未知數值X。

    對應的硬體關係:

    在時序邏輯電路:觸發器   (時序邏輯--always語句塊中帶時鐘信號    )

    在組合邏輯電路:硬體連線(組合邏輯--always語句塊中不帶時鐘信號)

    舉例:

    reg [31:0]  delay_cnt     //位寬為32位

    reg            key_reg       // 位寬為1位

2.線網數據類型

    含義:表示結構實體(例如門)之間的物理連線,不能存儲數值,只能由驅動它的元件所決定,驅動線網類型的元件有門、連續賦值語句、assign等,如果沒有驅動元件連接到線網類型的變量上,該變量為Z。

    表示:wire和tri,最常用的wire。

    舉例:wire    key_flag   //位寬為1的線網類型數據。

3.參數數據類型

    參數是常量,在Verilog中用parameter定義常量,可以一次定義多個參數,參數和參數之間用逗號隔開,每個參數的右邊必須是一個常數表達式。

    格式舉例:parameter H_SYNC = 11』d41

    應用:

    (1)參數型數據常用於定義狀態機的狀態、數據位寬和延遲大小等。

    (2)採用標識符來代表一個常量可以提高程序的可讀性和可維護性。

    (3)在模塊調用時,可通過參數傳遞來改變被調用模塊中已定義的參數。

    localparam和parameter的唯一區別在於localparam不可用於參數的傳遞,對於參數傳遞,在後面的文章可能會提到,也可自己先理解。

運算符

    1.算術運算符:+ - * / %

        注意:除法只能取整數。

    2.關係運算符:>  <  <=  >=  ==  !=

    3.邏輯運算符:!&& ||

    4.條件操作符(C語言中的三目運算符):a ?  b :c

    5.位運算符:~ & | ^(異或)

    舉例:0+0=0  1+0=1  1+1=0

    6.移位運算符:<<  >>

        注意:左移位寬增加,右移位寬不變。

    7.拼接運算符:{a,b}

    運算符的優先級:和C語言相同,可百度查看。

part two 程序框架

注釋: 

    1.代碼注釋://、/*  */
    2.XDC文件注釋  # 

關鍵字:

    input output   .

    這裡引用正點原子整理的文檔(以下此類文檔均引用正點原子):

框架:

    Verilog的基本設計單元為---模塊block(和C語言中的函數很相似)。

一個模塊由兩部分組成:

    描述接口、描述邏輯功能

    每個Verilog程序有四個主要部分:埠定義、IO說明、內部信號說明、功能定義。

    舉例:

    module block(a,b,c,d);

    input a,b;

    output c,d;

    assign c = a|b;

    assign d = a&b;

    endmodule

    note:

        module       為模塊的開始       endmodule 為模塊的結束

        模塊名字:block ---儘量寫出此模塊的意義

        abcd默認為wire類型的變量

        關鍵字:input output  輸入輸出信號為IO的說明

        功能定義有三種方法:assigan  描述組合邏輯、always  描述組合和時序邏輯、例化實例元件。

結構語句:

賦值語句:

    兩種賦值方式:

    1.阻塞賦值   :b=a    組合邏輯電路中always中使用

    2.非阻塞賦值:b<=    時序邏輯電路always中使用

    非阻塞賦值先計算出右邊的數值,再統一賦值給左邊,而且只能用於對寄存器類型的變量進行賦值,因此只能用在initial塊和always塊等過程塊中,不允許在多個always塊中對同一個變量進行賦值!

條件語句:

    if    else

    if    else if    else if    .    else

    Note:

    1.條件語句必須在過程塊中使用,過程塊語句是指由initial和always語句引導的塊語句。 

    2.if語句對表達式的值進行判斷,若為0,x,z,則按假處理;若為1,按真處理。

case語句:

    到此為止,基本語法知識介紹完畢!還剩verilog的靈魂---狀態機,下面關於verilog代碼的推文講,下面看一個簡單的小程序,理解一下上面的語法知識。

//定義輸入輸出埠

module led_twinkle(

    input             sys_clk        ,

    input             sys_rst_n     ,

    output [1:0]   led

);

reg [25:0] cnt;    //定義一個26位計數器

assign led = (cnt < 26'd2500_0000) ? 2'b01 : 2'b10; //使用條件運算符的輸出部分

//時序邏輯電路,實現計數器功能

always @(posedge sys_clk , negedge sys_rst_n)begin 

    if(!sys_rst_n)

cnt <= 26'd0;

    else if(cnt < 5000_0000)

cnt <= cnt+1'b1;

    else

cnt <= 26'd0;

    end

endmodule

    這是簡單的對應硬體的led程序,如果想熟希verilog代碼,找些demo練手可以私信我要原始碼。在後面的推文中也可能會陸續發出。

相關焦點

  • 零基礎學FPGA(三)Verilog語法基基礎基礎(上)
    這幾天複習了一下Verilog的語法知識,就藉此寫寫我對這些東西的想法吧。感覺呢,是和C語言差不多,具有C語言基礎的朋友學起來應該沒什麼問題,和C語言相同的地方就不說了吧,重點說一下不同點吧。  小結  在verilog語法中,所有的過程塊(包括initial塊,always塊),連續賦值語句,實例引用都是並行的,也就是說在一個模塊中遇到這些語句就是同時執行的,而且沒有先後次序。只有連續賦值語句assign和實例引用語句可以獨立於過程塊存在於模塊的功能定義部分,即這兩種語句可以不用在那兩個過程塊裡執行,也可以在模塊的功能定義部分執行,例如第一個例子。
  • 可編程邏輯培訓——Verilog 語言基礎
    不使用初始化語句;2、不使用延時語句;3、不使用循環次數不確定的語句,如:forever,while等;4、儘量採用同步方式設計電路;5、儘量採用行為語句完成設計;6、always過程塊描述組合邏輯,應在敏感信號表中列出所有的輸入信號;7、所有的內部寄存器都應該可以被復位;8、用戶自定義原件(UDP元件)是不能被綜合的。一:
  • 零基礎學FPGA(五)Verilog語法基基礎基礎(下)
    (3)時間度量系統函數$time  在verilog hdl語法中有兩種時間度量系統函數,分別是$time和$realtime,用這兩個系統函數可以得到當前的仿真時刻。$time可以返回一個64位的值來記錄當前的仿真時刻。  (4)$finish  系統任務$finish的作用是退出仿真器,返回主作業系統,也就是結束仿真過程。
  • 零基礎教你學FPGA之Verilog語法基礎(下)
    本文承接《零基礎教你學FPGA之Verilog語法基礎(中)》  9、關於任務和函數的小結,
  • 零基礎教你學FPGA之Verilog語法基礎(上)
    關於功能定義是模塊中最重要的部分,有三種方法可在模塊中產生邏輯  (1)用assign聲明語句,assign 語句主要用於組合邏輯電路  (2)用實例元件,例如 and #2 u1(q,a,b);(這個我自己概念也有點模糊,不知道怎麼解釋)  (3)用always塊,例如 always @(clk or clr)  begin
  • 關於學習verilog
    邏輯設計也是這樣:如果不按規範做的話,過一個月後調試時發現有錯,回頭再看自己寫的代碼,估計很多信號功能都忘了,更不要說檢錯了;如果一個項目做了一半一個人走了,接班的估計得從頭開始設計;如果需要在原來的版本基礎上增加新功能,很可能也得從頭來過,很難做到設計的可重用性。
  • Verilog代碼轉VHDL代碼經驗總結
    在vhdl中沒有邏輯與(verilog中的&&),只有按位與(verilog中的&,vhdl中的and),所以verilog中的邏輯與,在vhdl中有時需要用等價的方式替換,比如:
  • HDLBits:在線學習Verilog(七 · Problem 30-34)
    解答與分析// synthesis verilog_input_version verilog_2001module top_module( input a, input b, input sel_b1, input sel_b2, output wire out_assign,
  • Verilog常見必備面試題
    使用verilog hdl實現具有同步RESET和SET的觸發器,具有異步RESET和SET的觸發器。異步reset和setalways@(posedge clk or negedge reset or posedge set)begin  if(set)  Q<=1;    else if(!
  • 通過點燈的邏輯體驗FPGA的編程流程以及Verilog語法基礎
    assign led = 1'b0; endmodule編譯分配管腳(查找管腳映射表,通過電路圖或項目中的表格)生成jed文件查看資源佔用情況下載到16管腳的FPGA模塊上項目2 - 讓LED燈跳動起來在module的埠中添加clk的輸入信號在verilog
  • Verilog 裡面,always,assign和always@(*)區別
    在新的verilog2001中「,」和「or」都可以用來分割敏感事件了,可以用「*」代表所有輸入信號,這可以防止遺漏。 2:assign 組合邏輯和always@(*)組合邏輯verilog描述組合邏輯一般常用的有兩種:assign賦值語句和always@(*)語句。兩者之間的差別有:    1.
  • 菸草備考公共基礎知識包含哪些?
    雲南中煙考試在即,往年雲南菸草主要考:行測、公基、以及專業知識。行測作為各類公職類考試必考科目,想必大家再熟悉不過。那麼同學們對「公基」有多少了解呢?公基考試內容根據以往經驗,雲南菸草的公共基礎科目主要考查以下七個部分:政治基礎理論、經濟、管理、公文寫作、時事政治、雲南省省情以及法律。
  • Verilog 最全經驗總結(建議收藏)
    Averilog的流行,有兩方面的原因;B verilog與VHDL相比的優點C典型的verilog模塊D verilog語法要點A) verilog的流行,有兩方面的原因:1它是cadence的模擬器verilog-XL的基礎,cadence的廣泛流行使得verilog在90年代深入人心;2它在矽谷獲得廣泛使用;B)
  • 關於颱風的基礎知識,速速轉發收藏!
    關於颱風的基礎知識,你知道多少?什麼是颱風登陸點?颱風來了怎麼辦?颱風是如何命名的?戳圖學習↓ ​​​
  • Cordic算法(sinx,cosx)的Verilog實現
    在某些特殊情況,比如asic開發,現有的編譯軟體自帶的IP核是不能使用的,比如我最近需要做的東西,需要的信號發生器(正弦波發生器)就只能自己使用verilog進行實現。參考文獻:【1】cordic算法的verilog實現及modelsim仿真 - aikimi7 - 博客園【2】
  • 中考數學基礎知識鞏固篇(一)函數相關知識,保基礎拿高分
    中考最後階段,大家慢慢放緩節奏,對自己能得到的分數一定要心裡默默暗示,不能因為粗心在丟分,今天為大家整理函數基礎知識複習篇,在過一遍基礎知識點,做到心裡有數一,一次函數一次函數題目比較簡單,它是函數的入門題我們在中考中需要注意的考點主要有
  • 不說廢話,直接給出verilog代碼for二分法查找
    下面IC君就給出二進位搜索算法的verilog代碼實現。請注意下面的內容已經進入IC君相對不熟悉領域,很有可能犯錯誤。不過發現錯誤的過程就是成長的過程,所以大家要勇敢的去做,不要怕犯錯。若有錯誤,請大家不吝指教!
  • 2020年甘肅教師招聘公共基礎知識:杜威的相關知識總結
    2020年甘肅教師招聘公共基礎知識:杜威的相關知識總結 2020年甘肅教師招聘考試正處於緊張的備考狀態,按照往年信息來看,甘肅省教師招聘考試內容一般為教育基礎知識和教育專業知識。
  • Verilog基礎語法-行為語句部分
    ture_statement1 ;else if (<expression2>) ture_statement2 ;else if (<expression3>) ture_statement3 ;else default_statement;多路分支語句多路分支中關鍵字為case,在verilog
  • 2020年中醫藥相關考試基礎知識
    20200722 中醫藥基礎知識 今天開始分享中醫藥基礎知識點第二期(0722期) 此內容可參考應用於2020年中醫執業醫師考試、中醫執業助理醫師考試、