Verilog_Day2
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ù)傳遞成功。
編程過程中的幾個問題:
另一種參數(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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【独立游戏】黎明之刃——3D硬核ARPG
- 下一篇: 亲历dataguard的一些经验问答题