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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Verilog_Day2

發(fā)布時間:2025/5/22 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Verilog_Day2 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Verilog_Day1 在CSDN博客上。http://blog.csdn.net/m0_38073085

?

第三章:

書上基本知識

  • 每個Verilog程序包括4個主要部分:端口定義,I/O說明,內(nèi)部信號聲明和功能定義。
  • input/output/inout都默認是wire型而不是reg型變量。
  • 1 module block(a,b,c,d); // 端口定義 2 input a,b; // 輸入口說明 3 output c,d; // 輸出口說明 4 5 reg [2:0] e; // 內(nèi)部信號說明 [2:0] 表示3位信號 6 7 assign c=a|b; // 功能定義 1.用assign申明語句 8 and #2 u1(e,c,d); // 2.用實例元件 #2表示延時2單位時間 9 always @(c or e) 10 begin 11 12 end // 3.用always語句 13 endmodule

    在實例元件使用中,and? #2 u1()可以看成是調(diào)用了一個名為u1的and內(nèi)置模塊。

  • 采用“assign"語句是描述組合邏輯最常用的方法之一。而"always"塊既可以用于描述組合邏輯,也可描述時序邏輯。
  • 在"always"模塊內(nèi),邏輯是按照指定的順序執(zhí)行的。? (?)
  • 只有連續(xù)賦值語句(即用關(guān)鍵詞assign引出的語句)和實例應(yīng)用語句(即用已定義的模塊名引出的語句),可以獨立于過程塊而存在于模塊的功能定義部分。
問題1:begin - end 語句內(nèi)是順序執(zhí)行還是并列執(zhí)行,alwatys內(nèi)部語句執(zhí)行順序是不是一定是順序執(zhí)行,而不是取決于if-else?
  • 在數(shù)字電路中,x代表不定值,z代表高阻值。z還有一種表示方法是可以寫作“?”。
  • 高阻,數(shù)字電路里常見的術(shù)語,又叫高阻態(tài),指的是電路的一種輸出狀態(tài),既不是高電平也不是低電平。

    高阻態(tài)是一個數(shù)字電路里常見的術(shù)語,指的是電路的一種輸出狀態(tài),既不是高電平也不是低電平,如果高阻態(tài)再輸入下一級電路的話,對下級電路無任何影響,和沒接一樣,如果用萬用表測的話有可能是高電平也有可能是低電平,隨它后面接的東西定。

    高阻態(tài)的實質(zhì):

    電路分析時高阻態(tài)可做開路理解。你可以把它看作輸出(輸入)電阻非常大。他的極限可以認為懸空。也就是說理論上高阻態(tài)不是懸空,它是對地或?qū)﹄娫措娮铇O大的狀態(tài)。而實際應(yīng)用上與引腳的懸空幾乎是一樣的。

    高阻態(tài)的意義:

    當門電路的輸出上拉管導(dǎo)通而下拉管截止時,輸出為高電平;反之就是低電平;如上拉管和下拉管都截止時,輸出端就相當于浮空(沒有電流流動),其電平隨外部電平高低而定,即該門電路放棄對輸出端電路的控制 。

    單片機引腳復(fù)位后P口的所有引腳都是高阻輸入什么是“高阻”?

    高阻 簡言之就是 輸入輸出電阻都相當大,相當于隔離狀態(tài)。處在高阻態(tài)的三態(tài)門是與總線隔離開的,這樣總線可以同時被其他電路占用。

    高阻:從邏輯器件內(nèi)部電路結(jié)構(gòu)來說,就是其輸出電阻很大,該狀態(tài)即不是高電平,也不是低電平。當三態(tài)門處于高阻態(tài)時,無論該門的輸入如何變化,都不會對其輸出有貢獻。

  • 負數(shù)的表示方法: -8‘d5 ?? 只能放在最前面。
  • 可以在長數(shù)字中使用下劃線分隔開數(shù)以提高程序的可讀性。
  • 在verilog中用parameter來定義常量,即用parameter來定義一個標識符代表一個常量,稱為符號常量。 ? ? ? ? ? ?? eg: ? parameter byte=8,byte_msb=byte-1,delay=(byte+byte_msb)/2;?

?

兩種參數(shù)傳遞方法

?

下面是一個參數(shù)傳遞實例:

module Decode(s,A,F);input s;parameter Width=2,Polarity=2;output A,F;reg A,F;always @(s)if(! s) A=Width%2;else F=Polarity%2; endmodulemodule Top;reg clock;wire A4,A5,F16,F32;initialbeginclock=0;endalways #50 clock=~clock;always @(posedge clock)beginend Decode #(3,3) D1(clock,A4,F16);Decode #(3) D2(clock,A5,F32); endmodule

?

代碼表示如果參數(shù)傳遞不成功,最后輸出應(yīng)該都為0,如果都傳遞成功,最后A4,F16,A5輸出為1;F32輸出為0.

?

最后結(jié)果輸出如下圖:

可以看出參數(shù)傳遞成功。

編程過程中的幾個問題:

  •   把always @(posedge clock) ? begin end 注釋掉也沒有問題;
  • ? ? ?? 本來想在Decode模塊中通過reg [Width]? A;將輸出的A4,A5的數(shù)據(jù)長度也進行改變。但是最后沒有成功。 不報錯,但還是1位。
  • ? ? ? 在Decode模塊中要使用功能定義模塊。不然輸出全是不定態(tài)。
  • ? ? ?? 在wave窗口,使用 a 快捷鍵可以顯示多個觀察時間點。
  • ? ? ? ?reg A,F; 不能省。不然會報錯:Illegal reference to net "A". ? ? ?? 因為 A 和 F 在always模塊內(nèi)被賦值。需要使用 reg 型數(shù)據(jù)。
  • 另一種參數(shù)傳遞可以通過defparam命令來實現(xiàn)。

    module Decode(s,A,F);input s;parameter Width=2,Polarity=2;output A,F;reg F;reg [Width:0] A;always @(s)if(! s) A=Width%2;else F=Polarity%2; endmodulemodule Top;reg clock;wire A4,A5,F16,F32;initialbeginclock=0;endalways #50 clock=~clock;//always @(posedge clock)//begin//end Decode #(3,3) D1(clock,A4,F16);Decode D2(clock,A5,F32); // 這里直接產(chǎn)生Decode的D2。內(nèi)部參數(shù)不變。defparam // 用defparam來改變參數(shù)。Top.D2.Width=3; // 是Width, 不是A或者是A5。 endmodule

    ?

    最后仿真結(jié)果不變。

    總結(jié):可以通過兩種方法來改變module里面的參數(shù)型常量。 ? 第一種是直接在生成一個實例時進行參數(shù)更改;第二種是用defparam在生成實例后再進行更改。

    ?網(wǎng)絡(luò)數(shù)據(jù)類型(wire,tri)與reg型的一般區(qū)別

    • 網(wǎng)絡(luò)數(shù)據(jù)類型表示結(jié)構(gòu)實體例如門之間的物理連接。常用的網(wǎng)絡(luò)數(shù)據(jù)類型包括wire型和tri型。網(wǎng)絡(luò)數(shù)據(jù)類型的變量不能儲存值,而且必須受到驅(qū)動器(例如門和連續(xù)賦值語句,assign)的驅(qū)動。
    • wire型變量通常是用來表示單個門驅(qū)動或連續(xù)賦值語句驅(qū)動的網(wǎng)絡(luò)數(shù)據(jù)類型,tri 型變量則用來表示多驅(qū)動器驅(qū)動的網(wǎng)絡(luò)數(shù)據(jù)。
    • 如果沒有驅(qū)動器連接到網(wǎng)絡(luò)類型(wire,tri)的變量,則該變量就是高阻(z)。 ?? reg 型的變量默認為不定值x
    • 在”always"模塊內(nèi)被賦值的每一個信號都必須是reg型。
    • 注意:reg 型只表示被定義的信號將用在”always“模塊內(nèi)。

    reg型數(shù)據(jù)與memory型數(shù)據(jù)的相似與區(qū)別

    • verilog通過對 reg 型變量建立數(shù)組來對存儲器建模,可以描述RAM型存儲器,ROM存儲器和reg文件。 ?? 在verilog 中沒有多維數(shù)組存在。數(shù)組的維數(shù)不能大于2。
    • memory 型數(shù)據(jù)是通過擴展 reg 型數(shù)據(jù)的地址范圍來生成的。 eg: reg [7:0] mema[255:0] ? 定義了一個名為mema的存儲器,包含有256個8位存儲器。 注意:第二個括號的表達式必須是是常數(shù)表達式。
    • reg [n-1:0] rega; ? //一個n為存儲器。 ? 可以使用 ? rega=0; 進行賦值
    • reg? mema [n-1,0]; ? // 一個由n個1位存儲器構(gòu)成的存儲器組。 ? 不能用 mema=0; 進行賦值。 類似于C中的數(shù)組。
    • 讀多位的memory型,可以用? reg[7:0] mema[255:0];? mema[56][2]; 。 先找到56號8位存儲器,再讀該8位存儲器的第二位。
    • 注意存儲器屬于寄存器數(shù)組類型。線網(wǎng)數(shù)據(jù)類型沒有相應(yīng)的存儲器類型。

    ?

    .運算符、表達式

    •  進行取模運算時,結(jié)果值的符號為采用模運算式里第一個操作數(shù)的符號位。 eg:? -10%3 = -1 ;? 11%-3 = 2;
    • 位運算符:

      • ? ~ ? ?? // 取反
      • ? & ? ? // 按位與
      • ? | ? ?? // 按位或
      • ? ^ ? ? // 按位異或  
      • ? ^~? // 按位同或     

    ?

    ?

    ?

        

    轉(zhuǎn)載于:https://www.cnblogs.com/fishpoint/p/8485379.html

    總結(jié)

    以上是生活随笔為你收集整理的Verilog_Day2的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。