verilog的數(shù)據(jù)類(lèi)型及邏輯系統(tǒng)_第1頁(yè)
已閱讀1頁(yè),還剩95頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第六章 Verilog的數(shù)據(jù)類(lèi)型及邏輯系統(tǒng),,,,學(xué)習(xí)Verilog邏輯值系統(tǒng)學(xué)習(xí)Verilog中不同類(lèi)的數(shù)據(jù)類(lèi)型理解每種數(shù)據(jù)類(lèi)型的用途及用法數(shù)據(jù)類(lèi)型說(shuō)明的語(yǔ)法,學(xué)習(xí)內(nèi)容:,Verilog采用的四值邏輯系統(tǒng),,,,’0’, Low, False, Logic Low, Ground,VSS, Negative Assertion‘1’, High, True, Logic High, Power,VDD, VCC, Pos

2、itive Assertion’X’ Unknown: Occurs at Logical Which Cannot be Resolved ConflictHiZ, High Impedance, Tri- Stated,Disabled Driver (Unknown),主要數(shù)據(jù)類(lèi)型,,,Verilog主要有三類(lèi)(class)數(shù)據(jù)類(lèi)型:,,net (線網(wǎng)) : 表示器件之間的物理連接register (寄存器) :表示抽

3、象存儲(chǔ)元件parameters(參數(shù)) : 運(yùn)行時(shí)的常數(shù)(run-time constants),net(線網(wǎng)),,,net需要被持續(xù)的驅(qū)動(dòng),驅(qū)動(dòng)它的可以是門(mén)和模塊。 當(dāng)net驅(qū)動(dòng)器的值發(fā)生變化時(shí), Verilog自動(dòng)的將新值傳送到net上。在例子中,線網(wǎng)out由or門(mén)驅(qū)動(dòng)。當(dāng)or門(mén)的輸入信號(hào)置位時(shí)將傳輸?shù)骄€網(wǎng)net上。,,net類(lèi)的類(lèi)型(線網(wǎng)),,,有多種net類(lèi)型用于設(shè)計(jì)(design-specific)建模和工藝

4、(technology-specific)建模沒(méi)有聲明的net的缺省類(lèi)型為 1 位(標(biāo)量)wire類(lèi)型。但這個(gè)缺省類(lèi)型可由下面的編譯指導(dǎo)改變: `default_nettype ,綜合編譯器不支持的net類(lèi)型,,,,,,,,net類(lèi)的類(lèi)型(線網(wǎng)),,,,wire類(lèi)型是最常用的類(lèi)型,只有連接功能。wire和tri類(lèi)型有相同的功能。用戶(hù)可根據(jù)需要將線網(wǎng)定義為wire或tri以提高可讀性。例如,可以用tri

5、類(lèi)型表示一個(gè)net有多個(gè)驅(qū)動(dòng)源?;蛘邔⒁粋€(gè)net聲明為tri以指示這個(gè)net可以是高阻態(tài)Z(hign-impedance)??赏茝V至wand和triand、wor和triorwand、wor有線邏輯功能;與wire的區(qū)別見(jiàn)下頁(yè)的表。trireg類(lèi)型很象wire類(lèi)型,但trireg類(lèi)型在沒(méi)有驅(qū)動(dòng)時(shí)保持以前的值。這個(gè)值的強(qiáng)度隨時(shí)間減弱。修改net缺省類(lèi)型的編譯指導(dǎo): `default_nettype

6、 nettype不能是supply1和supply0。,net類(lèi)在發(fā)生邏輯沖突時(shí)的決斷,,,,Verilog有預(yù)定義的決斷函數(shù)支持與工藝無(wú)關(guān)的邏輯沖突決斷wire-and用于集電極開(kāi)路電路wire-or用于射極耦合電路,寄存器類(lèi) (register),,,,寄存器類(lèi)型在賦新值以前保持原值寄存器類(lèi)型大量應(yīng)用于行為模型描述及激勵(lì)描述。在下面的例子中,reg_a、reg_b、reg_sel用于施加激勵(lì)給2:1多路器。用行為描述結(jié)構(gòu)

7、給寄存器類(lèi)型賦值。給reg類(lèi)型賦值是在過(guò)程塊中。,寄存器類(lèi)的類(lèi)型,,,,寄存器類(lèi)有四種數(shù)據(jù)類(lèi)型,不要混淆寄存器數(shù)據(jù)類(lèi)型與結(jié)構(gòu)級(jí)存儲(chǔ)元件,如udp_dff,Verilog中net和register聲明語(yǔ)法,,,,net聲明 [range] [delay] [, net_name];net_type: net類(lèi)型range: 矢量范圍,以[MSB:LSB]格式delay: 定義與net相關(guān)的

8、延時(shí)net_name: net名稱(chēng),一次可定義多個(gè)net, 用逗號(hào)分開(kāi)。寄存器聲明 [range] [, reg_name];reg_type:寄存器類(lèi)型range: 矢量范圍,以[MSB:LSB]格式。只對(duì)reg類(lèi)型有效reg_name :寄存器名稱(chēng),一次可定義多個(gè)寄存器,用逗號(hào)分開(kāi),Verilog中net和register聲明語(yǔ)法,,,,舉例:reg a; //一個(gè)標(biāo)量寄存器

9、wand w; // 一個(gè)標(biāo)量wand類(lèi)型netreg [3: 0] v; // 從MSB到LSB的4位寄存器向量reg [7: 0] m, n; // 兩個(gè)8位寄存器tri [15: 0] busa; // 16位三態(tài)總線wire [0: 31] w1, w2; // 兩個(gè)32位wire,MSB為bit0,選擇正確的數(shù)據(jù)類(lèi)型,,,module top;wire y; reg a, b;DUT u1 (y,

10、a, b) ;initial begina = 0; b = 0; #5 a = 1; endendmodule,module DUT (Y, A, B);output Y;input A, B;wire Y, A, B;and (Y, A, B) ;endmodule,輸入端口可以由net/register驅(qū)動(dòng),但輸入端口只能是net,輸出端口可以是net/register類(lèi)型,輸出端

11、口只能驅(qū)動(dòng)net,在過(guò)程塊中只能給register類(lèi)型賦值,若Y,A,B說(shuō)明為reg則會(huì)產(chǎn)生錯(cuò)誤。,,,in1,,in2,O,,,A,B,Y,雙向端口輸入/輸出只能是net類(lèi)型,選擇數(shù)據(jù)類(lèi)型時(shí)常犯的錯(cuò)誤,,,,用過(guò)程語(yǔ)句給一個(gè)net類(lèi)型的或忘記聲明類(lèi)型的信號(hào)賦值。 信息:illegal …… assignment.將實(shí)例的輸出連接到聲明為register類(lèi)型的信號(hào)上。 信息: has il

12、legal output port specification.將模塊的輸入信號(hào)聲明為register類(lèi)型。 信息:incompatible declaration, ……,下面所列是常出的錯(cuò)誤及相應(yīng)的錯(cuò)誤信息(error message),信號(hào)可以分為端口信號(hào)和內(nèi)部信號(hào)。出現(xiàn)在端口列表中的信號(hào)是端口信號(hào),其它的信號(hào)為內(nèi)部信號(hào)。對(duì)于端口信號(hào),輸入端口只能是net類(lèi)型。輸出端口可以是net類(lèi)型,也可以是regi

13、ster類(lèi)型。若輸出端口在過(guò)程塊中賦值則為register類(lèi)型;若在過(guò)程塊外賦值(包括實(shí)例化語(yǔ)句),則為net類(lèi)型。內(nèi)部信號(hào)類(lèi)型與輸出端口相同,可以是net或register類(lèi)型。判斷方法也與輸出端口相同。若在過(guò)程塊中賦值,則為register類(lèi)型;若在過(guò)程塊外賦值,則為net類(lèi)型。若信號(hào)既需要在過(guò)程塊中賦值,又需要在過(guò)程塊外賦值。這種情況是有可能出現(xiàn)的,如決斷信號(hào)。這時(shí)需要一個(gè)中間信號(hào)轉(zhuǎn)換。,信號(hào)類(lèi)型確定方法總結(jié)如下:,選擇數(shù)據(jù)類(lèi)

14、型時(shí)常犯的錯(cuò)誤舉例,,,,修改前:module example(o1, o2, a, b, c, d); input a, b, c, d; output o1, o2; reg c, d; reg o2 and u1(o2, c, d); always @(a or b) if (a) o1 = b; else o1 = 0;endmodule,修改后

15、:module example(o1, o2, a, b, c, d); input a, b, c, d; output o1, o2;// reg c, d;// reg o2 reg o1; and u1(o2, c, d); always @(a or b) if (a) o1 = b; else o1 = 0;endmodule,ex

16、ample.v,選擇數(shù)據(jù)類(lèi)型時(shí)常犯的錯(cuò)誤舉例,,,,Compiling source file "example.v"Error! Illegal left-hand-side assignment [Verilog-ILHSA] "example.v", 11: o1 = b;Error! Illegal left-ha

17、nd-side assignment [Verilog-ILHSA] "example.v", 12: o1 = 0;2 errors,第一次編譯信息verilog –c example.v,第二次編譯信息,Compiling source file "example.v"Error! Incompatible declara

18、tion, (c) defined as input at line 2 [Verilog-IDDIL] "example.v", 5: Error! Incompatible declaration, (d) defined as in

19、put at line 2 [Verilog-IDDIL] "example.v", 5: Error! Gate (u1) has illegal output specification [Verilog-GHIOS]

20、 "example.v", 8: 3 errors,參數(shù)(parameters),,,,用參數(shù)聲明一個(gè)可變常量,常用于定義延時(shí)及寬度變量。參數(shù)定義的語(yǔ)法:parameter ;可一次定義多個(gè)參數(shù),用逗號(hào)隔開(kāi)。在使用文字(literal)的地方都可以使用參數(shù)。參數(shù)的定義是局部的,只在當(dāng)前模塊中有效。參數(shù)定義可使用以前定義的整數(shù)和實(shí)數(shù)參數(shù)。,module mod1( out, in

21、1, in2); . . .parameter cycle = 20, prop_ del = 3, setup = cycle/2 - prop_del, p1 = 8, x_ word = 16’bx, file = "/ usr1/ jdough/ design/

22、 mem_ file. dat"; . . . wire [p1: 0] w1; // A wire declaration using parameter . . .endmodule,注意:參數(shù)file不是string,而是一個(gè)整數(shù),其值是所有字母的擴(kuò)展ASCII值。若file=“AB”,則file值為8‘h4142。用法:$fopen(file);$display(“%s”, file)

23、;,參數(shù)重載(overriding),,,,可用defparam語(yǔ)句在編譯時(shí)重載參數(shù)值。defparam語(yǔ)句引用參數(shù)的層次化名稱(chēng)使用defparam語(yǔ)句可單獨(dú)重載任何參數(shù)值。,Defparam語(yǔ)句(現(xiàn)在綜合工具還不支持),module mod1( out, in1, in2); . . . parameter p1 = 8, real_constant = 2.039,

24、 x_word = 16’bx, file = "/usr1/jdough/design/mem_file.dat"; . . .endmodule,module test;. . . mod1 I1( out, in1, in2); defparam I1. p1 = 6, I1

25、. file = "../ my_mem.dat";. . .endmodule,參數(shù)重載(overriding),,,,module mod1( out, in1, in2); . . . parameter p1 = 8, real_constant = 2.039, x_word = 16’bx,

26、 file = "/usr1/jdough/design/mem_file.dat";. . .endmodulemodule top; . . . mod1 #( 5, 3.0, 16’bx, "../ my_mem. dat") I1( out, in1, in2); . . .endmodule,模塊實(shí)例化時(shí)參數(shù)重載,使用#,次序與原說(shuō)

27、明相同,不需要給所有參數(shù)賦新值,但不能跳躍賦值,假設(shè)模塊MOD順序定義三個(gè)參數(shù)a, b, c,則:MOD u1 #( a, b) (...); MOD u2 #(a) (...);MOD u3 #(a, ,c) (...); MOD u4 #(, b, c) (...);,為什么編譯器認(rèn)為這是參數(shù)而不是延時(shí)呢?,因?yàn)?說(shuō)明延時(shí)的時(shí)候只能用于gate或過(guò)程語(yǔ)句,不能用于模塊實(shí)例。gate(primitives)在實(shí)例化時(shí)只能

28、有延時(shí),不能有模塊參數(shù)。,寄存器數(shù)組(Register Arrays),,,,在Verilog中可以說(shuō)明一個(gè)寄存器數(shù)組。 integer NUMS [7: 0]; // 包含8個(gè)整數(shù)數(shù)組變量 time t_vals [3: 0]; // 4個(gè)時(shí)間數(shù)組變量reg類(lèi)型的數(shù)組通常用于描述存儲(chǔ)器 其語(yǔ)法為: reg [MSB:LSB] [first_addr:last_addr];

29、 [MSB:LSB]定義存儲(chǔ)器字的位數(shù) [first_addr:last_addr]定義存儲(chǔ)器的深度 例如: reg [15: 0] MEM [0:1023]; // 1K x 16存儲(chǔ)器 reg [7: 0] PREP [‘hFFFE: ’hFFFF]; // 2 x 8存儲(chǔ)器描述存儲(chǔ)器時(shí)可以使用參數(shù)或任何合法表達(dá)式 p

30、arameter wordsize = 16; parameter memsize = 1024; reg [wordsize-1: 0] MEM3 [memsize-1: 0];,存儲(chǔ)器尋址(Memory addressing),,,,存儲(chǔ)器元素可以通過(guò)存儲(chǔ)器索引(index)尋址,也就是給出元素在存儲(chǔ)器的位置來(lái)尋址。 mem_name [addr_expr]Verilog不支

31、持多維數(shù)組。也就是說(shuō)只能對(duì)存儲(chǔ)器字進(jìn)行尋址,而不能對(duì)存儲(chǔ)器中一個(gè)字的位尋址。,module mems;reg [8: 1] mema [0: 255]; // declare memory called memareg [8: 1] mem_word; // temp register called mem_ word. . .initial begin $displayb( mema[5]);

32、 //顯示存儲(chǔ)器中第6個(gè)字的內(nèi)容 mem_word = mema[5]; $displayb( mem_word[8]); // //顯示第6個(gè)字的最高有效位 endendmodule,若要對(duì)存儲(chǔ)器字的某些位存取,只能通過(guò)暫存器傳遞,,,復(fù)習(xí)(review),,,,問(wèn)題:在Verilog中,什么情況下輸出端會(huì)輸出X值?net和register類(lèi)型的主要區(qū)別是什么?

33、在Verilog中如何定義一個(gè)常數(shù)?,解答:若輸出端輸出X值, 一種可能是輸出net上發(fā)生驅(qū)動(dòng)沖突,二是由一個(gè)未知值傳遞到net上引起。register有存儲(chǔ)功能,而net必須持續(xù)驅(qū)動(dòng)。在Verilog中使用parameter定義一個(gè)常數(shù)。文本宏也是常數(shù)的一種形式。,第7章 結(jié)構(gòu)描述(structural modeling),,,,如何使用Verilog的基本單元(primitives)如何構(gòu)造層次化設(shè)計(jì)了解Verilog的

34、邏輯強(qiáng)度系統(tǒng),學(xué)習(xí)內(nèi)容:,術(shù)語(yǔ)及定義 (terms and definations),,,,結(jié)構(gòu)描述 : 用門(mén)來(lái)描述器件的功能primitives(基本單元) : Verilog語(yǔ)言已定義的具有簡(jiǎn)單邏輯功能的功能模型(models),結(jié)構(gòu)描述,,,,Verilog結(jié)構(gòu)描述表示一個(gè)邏輯圖結(jié)構(gòu)描述用已有的元件構(gòu)造。,module MUX4x1( Z, D0, D1, D2, D3, S0, S1); output Z;

35、input D0, D1, D2, D3, S0, S1; and (T0, D0, S0_, S1_), (T1, D1, S0_, S1), (T2, D2, S0, S1_), (T3, D3, S0, S1); not (S0_, S0), (S1_, S1); or (Z, T0, T

36、1, T2, T3);endmodulemodule rs_latch (y, yb, r, s); output y, yb; input r, s; nor n1( y, r, yb); nor n2( yb, s, y);endmodule,結(jié)構(gòu)描述等價(jià)于邏輯圖,都是連接簡(jiǎn)單元件構(gòu)成更復(fù)雜元件,,,通過(guò)門(mén)的實(shí)例使用門(mén),忽略了門(mén)的實(shí)例名。,同一種門(mén)可以通過(guò)一個(gè)語(yǔ)

37、句實(shí)例化,,,,Latch,結(jié)構(gòu)描述(續(xù)),,,,結(jié)構(gòu)描述等價(jià)于邏輯圖。它們都是連接簡(jiǎn)單元件來(lái)構(gòu)成更為復(fù)雜的元件。Verilog使用其連接特性完成簡(jiǎn)單元件的連接。在描述中使用元件時(shí),通過(guò)建立這些元件的實(shí)例來(lái)完成。上面的例子中MUX是沒(méi)有反饋的組合電路,使用中間或內(nèi)部信號(hào)將門(mén)連接起來(lái)。描述中忽略了門(mén)的實(shí)例名,并且同一種門(mén)的所有實(shí)例可以在一個(gè)語(yǔ)句中實(shí)例化。上面的鎖存器(latch)是一個(gè)時(shí)序元件,其輸出反饋到輸入上。它沒(méi)有使用任何內(nèi)部

38、信號(hào)。它使用了實(shí)例名并且對(duì)兩個(gè)nor門(mén)使用了分開(kāi)的實(shí)例化語(yǔ)句。,Verilog基本單元(primitives),,,,Verilog基本單元提供基本的邏輯功能,也就是說(shuō)這些邏輯功能是預(yù)定義的,用戶(hù)不需要再定義這些基本功能?;締卧荲erilog開(kāi)發(fā)庫(kù)的一部分。大多數(shù)ASIC和FPGA元件庫(kù)是用這些基本單元開(kāi)發(fā)的?;締卧獛?kù)是自下而上的設(shè)計(jì)方法的一部分。,基本單元的引腳 (pin)的可擴(kuò)展性,,,,基本單元引腳的數(shù)目由連接到門(mén)上的ne

39、t的數(shù)量決定。因此當(dāng)基本單元輸入或輸出的數(shù)量變化時(shí)用戶(hù)不需要重定義一個(gè)新的邏輯功能。所有門(mén)(除了not和buf)可以有多個(gè)輸入,但只能有一個(gè)輸出。not和buf門(mén)可以有多個(gè)輸出,但只能有一個(gè)輸入。,帶條件的基本單元,,,,Verilog有四種不同類(lèi)型的條件基本單元這四種基本單元只能有三個(gè)引腳:output, input, enable這些單元由enable引腳使能。當(dāng)條件基本單元使能信號(hào)無(wú)效時(shí),輸出高阻態(tài)。,帶條件的基本單元(

40、續(xù)),,,條件基本單元有三個(gè)端口:輸出、數(shù)據(jù)輸入、使能輸入,三種未知狀態(tài): 值 強(qiáng)度x 1, 0, z 未知L 0, z 未知H 1, z 未知,,,,基本單元實(shí)例化,,,在端口列表中,先說(shuō)明輸出端口,然后是輸入端口實(shí)例化時(shí)實(shí)例的名字是可選項(xiàng) and (out, in1, in2, in3,

41、 in4); // unnamed instance buf b1 (out1, out2, in); // named instance延時(shí)說(shuō)明是可選項(xiàng)。所說(shuō)明的延時(shí)是固有延時(shí)。輸出信號(hào)經(jīng)過(guò)所說(shuō)明的延時(shí)才變化。沒(méi)有說(shuō)明時(shí)延時(shí)為0。 notif0 #3.1 n1 (out, in, cntrl); // delay specified信號(hào)強(qiáng)度說(shuō)明是可選項(xiàng)

42、 not (strong1, weak0) n1 (inv, bit); // strength specified,module intr_sample; reg A; wire Y; not #10 intrinsic (Y, A);initial begin A = 0; #15 A = 1; #15 A = 0; #8 A = 1; #8

43、 A = 0; #11 A = 1; #10 $finish;endendmodule,,仿真波形,固有延時(shí),模塊實(shí)例化(module instantiation),,,,模塊實(shí)例化時(shí)實(shí)例必須有一個(gè)名字。使用位置映射時(shí),端口次序與模塊的說(shuō)明相同。使用名稱(chēng)映射時(shí),端口次序與位置無(wú)關(guān)沒(méi)有連接的輸入端口初始化值為x。,module comp (o1, o2, i1, i2); output o1,

44、 o2; input i1, i2; . . .endmodulemodule test; comp c1 (Q, R, J, K); // Positional mapping comp c2 (.i2(K), .o1(Q), .o2(R), .i1(J)); // Named mapping comp c3 (Q, , J, K); /

45、/ One port left unconnected comp c4 (.i1(J), .o1(Q)); // Named, two unconnected portsendmodule,名稱(chēng)映射的語(yǔ)法:.內(nèi)部信號(hào)(外部信號(hào)),,沒(méi)有連接時(shí)通常會(huì)產(chǎn)生警告,,module driver (in, out, en); input [2: 0] in; output [2: 0] out;

46、 input en; bufif0 u[2:0] (out, in, en); // array of buffersendmodule,實(shí)例數(shù)組(Array of Instances),,,,實(shí)例名字后有范圍說(shuō)明時(shí)會(huì)創(chuàng)建一個(gè)實(shí)例數(shù)組。在說(shuō)明實(shí)例數(shù)組時(shí),實(shí)例必須有一個(gè)名字 (包括基本單元實(shí)例)。其說(shuō)明語(yǔ)法為: ();,兩個(gè)模塊功能完全等價(jià),范圍說(shuō)明語(yǔ)法:[MSB : LSB

47、],,module driver_equiv (in, out, en); input [2: 0] in; output [2: 0] out; input en; // Each primitive instantiation is done separately bufif0 u2 (out[2], in[2], en); bufif0 u1 (out[1], in[

48、1], en); bufif0 u0 (out[0], in[0], en);endmodule,,,實(shí)例數(shù)組(Array of Instances)(續(xù)),,,,如果范圍中MSB與LSB相同,則只產(chǎn)生一個(gè)實(shí)例。一個(gè)實(shí)例名字只能有一個(gè)范圍。下面以模塊comp為例說(shuō)明這些情況,module oops; wire y1, a1, b1; wire [3: 0] a2, b2, y2, a3, b3,

49、 y3; comp u1 [5: 5] (y1, a1, b1); // 只產(chǎn)生一個(gè)comp實(shí)例 comp m1 [0: 3] (y2, a2, b2); comp m1 [4: 7] (y3, a3, b3); // 非法endmodule,ml作為實(shí)例陣列名字使用了兩次,,邏輯強(qiáng)度(strength)模型,,,Verilog提供多級(jí)邏輯強(qiáng)度。邏輯強(qiáng)度模型決定信號(hào)組合值是可知還是未知的,以

50、更精確的描述硬件的行為。下面這些情況是常見(jiàn)的需要信號(hào)強(qiáng)度才能精確建模的例子。開(kāi)極輸出(Open collector output)(需要上拉)多個(gè)三態(tài)驅(qū)動(dòng)器驅(qū)動(dòng)一個(gè)信號(hào)MOS充電存儲(chǔ)ECL門(mén)(emitter dotting)邏輯強(qiáng)度是Verilog模型的一個(gè)重要部分。通常用于元件建模,如ASIC和FPGA庫(kù)開(kāi)發(fā)工程師才使用這么詳細(xì)的強(qiáng)度級(jí)。但電路設(shè)計(jì)工程師使用這些精細(xì)的模型仿真也應(yīng)該對(duì)此了解。,邏輯強(qiáng)度(strength)模

51、型(續(xù)),,,,用戶(hù)可以給基本單元實(shí)例或net定義強(qiáng)度?;締卧獜?qiáng)度說(shuō)明語(yǔ)法: (); 例:nand (strong1, pull0) #( 2: 3: 4) n1 (o, a, b); // strength and delay or (supply0, highz1) (out, in1, in2, in3); // no instance name用戶(hù)可以用%v格式符顯

52、示net的強(qiáng)度值 $monitor ($ time,," output = %v", f);電容強(qiáng)度(large, medium, small)只能用于net類(lèi)型trireg和基本單元tran 例如:trireg (small) tl;,信號(hào)強(qiáng)度值系統(tǒng),,,,Verilog多種強(qiáng)度決斷,,,,在Verilog中,級(jí)別高的強(qiáng)度覆蓋級(jí)別低的強(qiáng)度,復(fù)習(xí),,,,問(wèn)題:什么是Veri

53、log中的結(jié)構(gòu)化描述?連接模塊端口有哪兩種方法?哪一種更通用一些?什么是實(shí)例數(shù)組?什么時(shí)候?qū)嵗质强蛇x的?,解答:結(jié)構(gòu)化描述是使用Verilog基本單元或單元(cell)級(jí)元件對(duì)設(shè)計(jì)進(jìn)行描述,與邏輯圖很相似。可以根據(jù)次序(位置映射)或名字(名稱(chēng)映射)來(lái)映射端口。雖然在這個(gè)教程中大多使用位置映射,這主要是為了節(jié)省空間。在實(shí)際設(shè)計(jì)中,名稱(chēng)映射可能更通用一些。實(shí)例數(shù)組用一條語(yǔ)句創(chuàng)建模型(模塊或基本單元)的多個(gè)實(shí)例?;締卧獙?shí)例

54、化時(shí)實(shí)例名是可選的,說(shuō)明基本單元數(shù)組時(shí)除外。當(dāng)實(shí)例化模塊時(shí),實(shí)例名是必須的。,第8章 延時(shí)模型,,,,學(xué)習(xí)內(nèi)容:如何說(shuō)明塊延時(shí)如何說(shuō)明分布延時(shí)如何說(shuō)明路徑延時(shí)怎樣在模塊中說(shuō)明時(shí)序檢查標(biāo)準(zhǔn)延時(shí)格式SDF(Standard Delay Format),術(shù)語(yǔ)及定義,,,,模塊路徑(module path): 穿過(guò)模塊,連接模塊輸入(input端口或inout端口)到模塊輸出(output端口或inout端口)的路徑。路徑延時(shí)(p

55、ath delay):與特定路徑相關(guān)的延時(shí)PLI:編程語(yǔ)言接口,提供 Verilog數(shù)據(jù)結(jié)構(gòu)的過(guò)程訪問(wèn)。時(shí)序檢查(timing check):監(jiān)視兩個(gè)輸入信號(hào)的關(guān)系并檢查的系統(tǒng)任務(wù),以保證電路能正確工作。時(shí)序驅(qū)動(dòng)設(shè)計(jì)(timing driven design):從前端到后端的完整設(shè)計(jì)流程中,用時(shí)序信息連接不同的設(shè)計(jì)階段,延時(shí)模型類(lèi)型(Delay Modeling Types),,,延時(shí)有三種描述模型:,將全部延時(shí)集中到最后一個(gè)門(mén),

56、延時(shí)分布在每一個(gè)門(mén)上,分布延時(shí),塊延時(shí),路徑延時(shí),塊延時(shí)(Lumped Delay),,,,塊延時(shí)方法是將全部延時(shí)集中到最后一個(gè)門(mén)上。這種模型簡(jiǎn)單但不夠精確,只適用于簡(jiǎn)單電路。因?yàn)楫?dāng)?shù)捷敵龆擞卸鄠€(gè)路徑時(shí)不能描述不同路徑的不同延時(shí)。可以用這種方法描述器件的傳輸延時(shí),并且使用最壞情況下的延時(shí)(最大延時(shí))。,`timescale 1ns/ 1nsmodule noror( Out, A, B, C); output Out;

57、 input A, B, C; nor n1 (net1, A, B); or #3 o1 (Out, C, net1);endmodule,用塊延時(shí)描述時(shí),不同路徑的延時(shí)完全相同,左邊例中各路徑延時(shí)為: A -> Out is 3 ns B -> Out is 3 ns C -> Out is 3 ns,分布延時(shí)(Distributed D

58、elays),,,,分布延時(shí)方法是將延時(shí)分散到每一個(gè)門(mén)。在相同的輸出端上,不同的路徑有不同的延時(shí)。分布延時(shí)有兩個(gè)缺點(diǎn):在結(jié)構(gòu)描述中隨規(guī)模的增大而變得異常復(fù)雜。仍然不能描述基本單元(primitive)中不同引腳上的不同延時(shí)。,`timescale 1ns/ 1nsmodule noror( Out, A, B, C); output Out; input A, B, C; nor #2 n1

59、 (net1, A, B); or #1 o1 (Out, C, net1);endmodule,這種描述方法描述的不同路徑的延時(shí)。例中各路徑延時(shí)為: A -> Out is 3 ns B -> Out is 3 ns C -> Out is 1 ns,模塊路徑延時(shí)(Module Path Delays),,,,module noror( O, A, B, C);

60、 output O; input A, B, C; nor n1 (net1, A, B); or o1 (O, C, net1); specify (A => O) = 2; (B => O) = 3; (C => O) = 1 endspecifyendmodule,例中各路

61、徑延時(shí)為: A -> Out is 2 ns B -> Out is 3 ns C -> Out is 1 ns,在專(zhuān)用的specify塊描述模塊從輸入端到輸出端的路徑延時(shí)。精確性:所有路徑延時(shí)都能精確說(shuō)明。模塊性:時(shí)序與功能分開(kāi)說(shuō)明,路徑必須括在圓括號(hào)內(nèi),,結(jié)構(gòu)描述的零延時(shí)反饋(Loop),,,,當(dāng)事件隊(duì)列中所有事件結(jié)束時(shí)仿真前進(jìn)一個(gè)時(shí)片。在某種零延時(shí)反饋情況下,新事件在同一時(shí)片不斷的加入,致

62、使仿真停滯在那個(gè)時(shí)片。若在結(jié)構(gòu)描述中出現(xiàn)從輸出到輸入的零反饋情況,多數(shù)仿真器會(huì)檢測(cè)到這個(gè)反饋并產(chǎn)生錯(cuò)誤信息。Verilog的lint checker對(duì)這種情況會(huì)提出警告。解決這個(gè)問(wèn)題的方法是在電路中加入分布延時(shí)。路徑延時(shí)不能解決零延時(shí)振蕩問(wèn)題,因?yàn)檩敵鲂盘?hào)在反饋前不會(huì)離開(kāi)模塊。,精確延時(shí)控制,,,,在Verilog中,可以:說(shuō)明門(mén)和模塊路徑的上升(rise)、下降(fall)和關(guān)斷(turn-off)延時(shí) and #

63、(2,3) (out, in1, in2, in3); // rise, fall bufif0 #( 3,3,7) (out, in, ctrl); // rise, fall, turn- off (in => out) = (1, 2); // rise, fall (a => b) = (5, 4, 7); // rise, fall, turn- off在路徑延時(shí)中可以

64、說(shuō)明六個(gè)延時(shí)值(0 ?1, 1 ?0, 0 ?Z, Z ?1, 1 ?Z, Z ?0) (C => Q) = (5, 12, 17, 10, 6, 22);在路徑延時(shí)中說(shuō)明所有12個(gè)延時(shí)值(0 ?1, 1 ?0, 0 ?Z, Z ?1, 1 ?Z, Z ?0, 0 ?X, X ?1, 1 ?X, X ?0, X ?Z, Z ?X) (C => Q) = (5, 12, 17, 10, 6, 22

65、, 11, 8, 9, 17, 12, 16);上面所說(shuō)明的每一個(gè)延時(shí)還可細(xì)分為最好、典型、最壞延時(shí)。 or #( 3.2:4.0:6.3) o1( out, in1, in2); // min: typ: max not #( 1:2:3, 2:3:5) (o, in); // min: typ: max for rise, fall user_module #(1:2:3

66、, 2:3:4) ( ……);在Cadence Verilog中還不支持 (b => y) = (2: 3: 4, 3: 4: 6, 4: 5: 8); // min: typ: max for rise, fall, and turnoff,精確延時(shí)控制(續(xù)),,,,上升延時(shí)是輸出轉(zhuǎn)換為1時(shí)的延時(shí)下降延時(shí)是輸出轉(zhuǎn)換為0時(shí)的延時(shí)關(guān)斷延時(shí)輸出轉(zhuǎn)換為三態(tài)時(shí)的延時(shí)到X的轉(zhuǎn)換延時(shí)是最小延時(shí),而從X到其它值的轉(zhuǎn)換使用最

67、壞延時(shí)如果說(shuō)明了上升、下降和關(guān)斷延時(shí),則1->X的轉(zhuǎn)換延時(shí)使用上升和關(guān)斷延時(shí)的最小值。X->0的延時(shí)為下降延時(shí);X->Z的轉(zhuǎn)換為關(guān)斷延時(shí)。如果只說(shuō)明了上升和下降延時(shí),則1->X和X->0使用下降延時(shí),X->Z使用上升和下降延時(shí)的最小延時(shí)如果只說(shuō)明了一個(gè)延時(shí),則所有轉(zhuǎn)換使用這個(gè)延時(shí)。如果說(shuō)明了六個(gè)延時(shí),則1->X使用1->X和1->Z中最小延時(shí);X->0使用1->0

68、和X->0的最大延時(shí);X->Z使用1->Z和0->Z中的最大延時(shí)。,延時(shí)說(shuō)明定義的是門(mén)或模塊的固有延時(shí)。輸入上的任何變化要經(jīng)過(guò)說(shuō)明的延時(shí)才能在輸出端反映出來(lái)。如果沒(méi)有延時(shí)說(shuō)明,則基本單元的延時(shí)為0。分布關(guān)斷延時(shí)只對(duì)三態(tài)基本單元有效。,Specify塊,,,,specify塊定義了模塊的時(shí)序部分時(shí)序信息和功能在不同的塊中描述,這樣功能驗(yàn)證獨(dú)立于時(shí)序驗(yàn)證。specify塊在不同的抽象級(jí)中保持不變。設(shè)計(jì)的功能描述中

69、的延時(shí),如#delay在綜合時(shí)不起作用specify塊由specify開(kāi)始, 到endspecify結(jié)束,并且在模塊內(nèi)部使用關(guān)鍵字specparam在specify中進(jìn)行參數(shù)聲明。不要同模塊參數(shù)(由parameter說(shuō)明)混淆。specparam只能在specify塊內(nèi)聲明參數(shù)并使用;而parameter也只能在specify外聲明參數(shù)并使用。specify塊可以:描述穿過(guò)模塊的路徑及其延時(shí)描述時(shí)序檢查以保證器件的時(shí)序約束能夠

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論