FPGA設(shè)計(jì)基礎(chǔ) 第3章FPGA設(shè)計(jì)入門.ppt_第1頁
FPGA設(shè)計(jì)基礎(chǔ) 第3章FPGA設(shè)計(jì)入門.ppt_第2頁
FPGA設(shè)計(jì)基礎(chǔ) 第3章FPGA設(shè)計(jì)入門.ppt_第3頁
FPGA設(shè)計(jì)基礎(chǔ) 第3章FPGA設(shè)計(jì)入門.ppt_第4頁
FPGA設(shè)計(jì)基礎(chǔ) 第3章FPGA設(shè)計(jì)入門.ppt_第5頁
已閱讀5頁,還剩71頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第三章 FPGA設(shè)計(jì)入門,有效的建模風(fēng)格是控制綜合結(jié)果的最有力手段。 絕大多數(shù)系統(tǒng)設(shè)計(jì)都是使用HDL來實(shí)現(xiàn) 。 利用Verilog HDL進(jìn)行FPGA設(shè)計(jì)規(guī)則、方法和技巧。,Page 1,組合邏輯電路,是指數(shù)字電路在任何時刻的輸出僅僅取決于該時刻數(shù)字電路的輸入,而與電路原來的狀態(tài) 無關(guān)。 組合邏輯電路分類: 門電路 編碼器、譯碼器和選擇器 數(shù)據(jù)緩沖器,時序邏輯電路,時序邏輯電路就是指數(shù)字電路在任何時刻的輸出不僅 僅取決于該時刻數(shù)字電路的輸入,還取決于電路原來 的狀態(tài)。 時鐘:進(jìn)程敏感信號 同步與異步復(fù)位 同步復(fù)位:復(fù)位語句是在以時鐘為進(jìn)程中執(zhí)行 異步復(fù)位:進(jìn)程敏感信號包括時鐘和復(fù)位信號 分類:

2、 觸發(fā)器 計(jì)數(shù)器:同步:在時鐘下,各觸發(fā)器狀態(tài)同時變化 異步:上一位數(shù)據(jù)是下個觸發(fā)器的時鐘信號,3.1 系統(tǒng)的抽象層次與Verilog,一個系統(tǒng)可以在不同的抽象層次上進(jìn)行描述,也可以從不同的描述域(行為結(jié)構(gòu)物理)進(jìn)行描述。 1、系統(tǒng)描述的三個 “域” 行為域說明一個特定的系統(tǒng)完成什么功能 結(jié)構(gòu)域說明不同的實(shí)體之間是如何連接的 物理域則說明如何構(gòu)造出一個實(shí)際的器件,Page 3,3.1 系統(tǒng)的抽象層次與Verilog,Verilog可以在三個域、五個抽象層次上描述一個系統(tǒng)。 行為模型-著重于描述系統(tǒng)的功能,忽略系統(tǒng)的實(shí)現(xiàn)(系統(tǒng)級或體系結(jié)構(gòu)級,也可能是算法級)。 結(jié)構(gòu)模型-較為詳細(xì)地至少描述到寄存

3、器數(shù)據(jù)流的方式,大體的描述到了系統(tǒng)的結(jié)構(gòu)和實(shí)現(xiàn)(RTL/門級/開關(guān)級)。,Page 4,3.1 系統(tǒng)的抽象層次與Verilog,2、系統(tǒng)描述的五個層次 工程師可以在系統(tǒng)級、算法級、RTL(Register Transfer Level 寄存器傳輸)級、邏輯級和電路級五個層次上描述一個系統(tǒng),其中系統(tǒng)級的抽象層次最高,而電路級的抽象層次最低。抽象層次越高,所包含的細(xì)節(jié)信息就越少,抽象層次越低,所包含的細(xì)節(jié)就越多。,Page 5,Page 6,3.1 系統(tǒng)的抽象層次與Verilog,module adder(a,b,c0,c, sum); input 3:0 a,b; input c0; outpu

4、t 3:0 sum; output c; wire 4:0 mid_res; assign mid_res = a + b + c0; assign sum = mid_res3:0; assign c = mid_res4; endmodule,例如:行為級建模4bit全加器。 因?yàn)樵谙到y(tǒng)設(shè)計(jì)初期,人們更關(guān)心所設(shè)計(jì)系統(tǒng)的邏輯功能,還未關(guān)心系統(tǒng)的性能。 行為級功能確認(rèn)后,可進(jìn)一步細(xì)化得到結(jié)構(gòu)模型。,Page 7,3.1 系統(tǒng)的抽象層次與Verilog,行為級綜合有時也稱為高層次綜合(highlevel synthesis),高層次綜合工具對行為級描述電路的綜合效果沒有用RTL級描述的電路綜合的

5、效果好,故大部分的電路是在RTL級進(jìn)行描述的。 我們通常用 Verilog 在RTL級描述一個設(shè)計(jì),借助于自動綜合工具,設(shè)計(jì)人員可以將RTL級代碼快速且便捷地變換成邏輯級描述。,Page 8,3.1 系統(tǒng)的抽象層次與Verilog,RTL級描述的典型模型,Page 9,3.1 系統(tǒng)的抽象層次與Verilog,對于有些特殊的電路,我們有時也采用“門級描述”來描述結(jié)構(gòu)模型-即通過邏輯門及其互連線描述電路。在Verilog中可以通過三種實(shí)例化語句描述結(jié)構(gòu)模型。 Verilog內(nèi)建的基本邏輯門 用戶定義原語UPD Module實(shí)例語句 (Book P86/87分別有RTL描述和門級描述例子),Page

6、 10,3.2 用Verilog建立數(shù)字電路模型,設(shè)計(jì)的最終目標(biāo)是將設(shè)計(jì)電路映射到具體的物理器件上。Verilog功能強(qiáng)大,用途范圍廣泛,語句豐富,但其中只有部分子集描述的設(shè)計(jì)可以通過EDA工具綜合成具體的電路-Verilog可綜合子集。 良好的建模風(fēng)格是控制綜合結(jié)果的最有力的手段。,Page 11,3.2.1 代碼的書寫風(fēng)格,編寫代碼的目的是對系統(tǒng)進(jìn)行精確的描述,進(jìn)行人-機(jī)(人-人)交流 1、完備清晰的版本信息 2、簡潔扼要的功能說明,端口說明、變量說明,注釋信息 3、規(guī)范的端口定義,端口、變量命名規(guī)則 4、模塊互連時采用 “顯式關(guān)聯(lián)方式”,Page 12,3.2.2 可綜合代碼的編碼風(fēng)格,

7、always (posedge clk) begin begin begin q1 = d; q3 = q2; q1 = d; q2 = q1; q2 = q1; q2 = q1; q3 = q2; q1 = d; q3 簡單組合電路設(shè)計(jì)方法,1、定義入/出邏輯變量 2、列真值表,寫表達(dá)式,化簡 3、電路圖設(shè)計(jì) 4、實(shí)驗(yàn)驗(yàn)證,手工設(shè)計(jì)步驟,HDL設(shè)計(jì)步驟,1、定義入/出邏輯變量 2、列真值表,寫表達(dá)式 3、Verilog 編碼 4、仿真驗(yàn)證 5、綜合(優(yōu)化、電路實(shí)現(xiàn)),Page 17,例3.7 半加器,3.2.2 可綜合代碼的編碼風(fēng)格,module HA (a,b,c,s); input a,

8、 b; output c,s; wire c,s; wire 1:0 adder; assign adder = a + b; assign s =adder0; assign c = adder1; endmodule,備注:多種描述方法描述同樣功能。,Page 18,3.2.2 可綜合代碼的編碼風(fēng)格,例3.8 全加器,/實(shí)例化半加器,結(jié)構(gòu)描述“全加器” module FA(a,b,c_i,s,c_o) input a, b,c_i; output s,c_o; wire c,s,c1; HA HA_1(.a(a),.b(b),.c(c),.s(s); HA HA_2(.a(s),.b(c)

9、,.c(c1),.s(s); assign c_o = c | c1; endmodule,Page 19,3.2.2 可綜合代碼的編碼風(fēng)格,/ 根據(jù)功能描述 “全加器” module FA (a,b,c_i,s,c_o) ; input a, b,c_i; output s,c_o; wire 1:0 full_adder; /2比特變量,高位為進(jìn)位,低位為和。 assign full_adder = a + b + c_i; assign s = full_adder0; assign c_o = full_adder1; endmodule,3.2.2 可綜合代碼的編碼風(fēng)格,可以利用多個

10、 “1位全加器” 構(gòu)成多位的二進(jìn)制加法器,即所謂的 “行波加法器” 。,Page 20,Page 21,3.2.2 可綜合代碼的編碼風(fēng)格,module adder_3(a,b,c0,s,cy); input 2:0 a,b; input c0; output 2:0 s; output cy; wire c1,c2; FA_1 FA1(.a(a0),.b(b0),.c_i(c0),.s(s0) ,.c_o(c1); FA_1 FA2(.a(a1),.b(b1),.c_i(c1),.s(s1) ,.c_o(c2); FA_1 FA3(.a(a2),.b(b2),.c_i(c2),.s(s2) ,

11、.c_o(cy); endmodule,實(shí)例化1位全加器,設(shè)計(jì) “3位全加器”,Page 22,3.2.2 可綜合代碼的編碼風(fēng)格,例3.10 多路選擇器可以通過CASE結(jié)構(gòu)與IF-THEN-ELSE結(jié)構(gòu)實(shí)現(xiàn) 。要注意的是: case 結(jié)構(gòu)無優(yōu)先級特征 if else 結(jié)構(gòu)隱含著優(yōu)先級 電路綜合的結(jié)果有些差別。,module single_if(a, b, c, d, sel, z); input a, b, c, d; input 3:0 sel; output z; reg z; always (a or b or c or d or sel) begin if (sel3) z = d;

12、else if (sel2) z = c; else if (sel1) z = b; else if (sel0) z = a; else z =0 ; end endmodule,選擇控制端sel3:0高位有高優(yōu)先級,Page 23,module case1(a, b, c, d, sel, z); input a, b, c, d; input 1:0 sel; output z; reg z; always (a or b or c or d or sel) begin casex (sel) 2b00: z = d; 2b01: z = c; 2b10: z = b; 2b11: z

13、 = a; default: z = 1b0; endcase end endmodule,選擇控制端sel1:0無優(yōu)先級,Page 24,Page 25,c 組合電路設(shè)計(jì)中應(yīng)注意的問題,3.2.2 可綜合代碼的編碼風(fēng)格,不要有邏輯反饋(不能產(chǎn)生組合環(huán)) 在敏感變量表中列全所有的敏感信號(RHS中以及“條件”中的信號都要進(jìn)入敏感信號表) 避免設(shè)計(jì)中無意間產(chǎn)生鎖存器 (case 語句有 default,if 語句 else 末分支,EXP 3.13),Page 26,有組合環(huán),Page 27,3.2.2 可綜合代碼的編碼風(fēng)格,3、三態(tài)總線接口電路的設(shè)計(jì),三態(tài)總線接口電路主要應(yīng)用于微機(jī)接口(使能時

14、傳送,禁能時高阻)。 三態(tài)總線接口電路設(shè)計(jì)使用 “連續(xù)賦值” (assign)語句,其中一個分支被賦值成高阻z狀態(tài)。,Page 28,3.2.2 可綜合代碼的編碼風(fēng)格, 單向三態(tài)總線,assign data_to_bus = (bus_enable) ? (core_log_to_bus) : 8hz;,Page 29,3.2.2 可綜合代碼的編碼風(fēng)格, 雙向三態(tài)總線,Page 30,module bi_dir_bus(rst_n, wr_clk, wr_en, rd_en,addr, data_to_from_bus ); input rst_n; /復(fù)位信號; input wr_clk;

15、/寫數(shù)據(jù)時鐘; input wr_en; /寫使能; input rd_en; /讀使能; input 1:0 addr; /地址; inout 7:0 data_to_from_bus; /雙向數(shù)據(jù)總線;,reg 7:0 reg1,reg2,reg3,reg4; wire 7:0 core_logic; assign data_to_from_bus = (rd_en) ? core_logic: 8hz; always (negedge rst_n or posedge wr_clk) if (!rst_n) reg1 = 8h 00; else if (wr_en ,Page 31,.

16、/reg2,reg3 同樣的處理 . always (negedge rst_n or posedge wr_clk) if (!rst_n) reg4 = 8h 00; else if (wr_en endmodule,3.2.2 可綜合代碼的編碼風(fēng)格-雙向三態(tài)總線,3.2.3 時序電路的設(shè)計(jì),1、時序電路的基本概念, 時序電路的模型 (通常)時序電路的輸出不僅與當(dāng)前的輸入有關(guān),而且與電路過去的狀態(tài)也有關(guān)系。 時序電路由存儲元件(記憶功能,F(xiàn)F實(shí)現(xiàn))和組合電路(用于完成運(yùn)算)組成。 FPGA中,一般使用D觸發(fā)器作為存儲元件 。,備注:觸發(fā)器-時鐘沿工作,鎖存器-時鐘電平工作。,Page 32

17、,Page 33,3.2.3 時序電路的設(shè)計(jì), 觸發(fā)器的建立時間(tsu)、保持時間(th) tsu - 觸發(fā)器的時鐘信號有效沿到來前,數(shù)據(jù)穩(wěn)定 不變的時間。 th - 觸發(fā)器的時鐘信號有效沿到來以后,數(shù)據(jù)保持穩(wěn)定不變的時間。,Page 34,3.2.3 時序電路的設(shè)計(jì), 同步電路/異步電路,如果時序電路中的所有D觸發(fā)器的時鐘端(鎖存器除外)都與同一個時鐘相連接,則稱為同步時序電路,否則就稱為是異步時序電路。 本課程只研究同步電路設(shè)計(jì)。同步電路設(shè)計(jì)相對簡單,設(shè)計(jì)出的電路可靠性高。,Page 35,3.2.3 時序電路的設(shè)計(jì), 時鐘樹,在同步設(shè)計(jì)中,要求時鐘信號必須在同一時間到達(dá)電路中每個寄存器

18、的時鐘輸入端,而且時鐘信號經(jīng)過輸入管腳到達(dá)觸發(fā)器的路徑延時很小。 在FPGA中,給專用的I/O模塊配置了速度非??斓臅r鐘驅(qū)動緩存器,這些緩沖器驅(qū)動輸入時鐘信號到芯片內(nèi)部的時鐘樹上。 時鐘樹的結(jié)構(gòu)像一個樹,它的每個分支都驅(qū)動固定數(shù)目的觸發(fā)器,每個分支都有相同的長度。時鐘驅(qū)動能快速驅(qū)動整個時鐘樹,時鐘信號延時最小,一致性最好。,Page 36,3.2.3 時序電路的設(shè)計(jì), 時鐘類型(四種類型),全局時鐘-有專用的全局時鐘管腳,直接連接到器件中的每個寄存器的時鐘端,以提供最小的時鐘信號延遲和時鐘歪斜(skew)。 門控時鐘-由邏輯門和時鐘進(jìn)行邏輯操作后產(chǎn)生的時鐘。設(shè)計(jì)不當(dāng)?shù)拈T控時鐘往往容易產(chǎn)生毛刺,

19、從而影響電路的可靠性。,Page 37,3.2.3 時序電路的設(shè)計(jì),行波時鐘-用一個D觸發(fā)器的輸出作另一個觸發(fā)器的時鐘輸入。在數(shù)字電路設(shè)計(jì)中經(jīng)常用到此種設(shè)計(jì)方案。要特別關(guān)注電路的時序,也是時序仿真的特別關(guān)照點(diǎn)。 多級邏輯時鐘-當(dāng)產(chǎn)生門控時鐘的組合邏輯超過一級門電路時,電路的可靠性變得很難控制,系統(tǒng)中避免采用。,Page 38,3.2.3 時序電路的設(shè)計(jì), 時鐘策略,若電路要用到門控時鐘/行波時鐘,那么設(shè)計(jì)時要在頂層建立時鐘模塊,完成時鐘的分頻、反相或產(chǎn)生門控時鐘。 使用FPGA中的PLL資源倍頻時鐘,時鐘元件的實(shí)例化要在頂層的時鐘模塊中進(jìn)行。 不要使用多級邏輯時鐘。 一般情況FPGA有專用的全

20、局時鐘引腳。對于內(nèi)部信號如何處理,F(xiàn)PGA布局/線工具會自動優(yōu)化使用系統(tǒng)時鐘資源,但有時也需要設(shè)計(jì)者進(jìn)行指定。,是指在數(shù)字系統(tǒng)中時鐘的使用方法和策略。對于FPGA設(shè)計(jì),合理的時鐘策略是設(shè)計(jì)成功的基礎(chǔ)。,3.2.3 時序電路的設(shè)計(jì),時鐘模塊,Page 39,Page 40,2、時序電路的建模,3.2.3 時序電路的設(shè)計(jì),D觸發(fā)器,帶使能端的D觸發(fā)器, D 觸發(fā)器,Page 41,3.2.3 時序電路的設(shè)計(jì),/可異步復(fù)位D觸發(fā)器 module dflip(rst_n, clk, din, dout); input rst_n,clk; input din; output dout; reg dou

21、t; always (negedge rst_n or posedge clk) if (!rst_n) dout = 1b0; else dout = din; endmodule,/帶使能端的可同步復(fù)位D觸發(fā)器 module dflip(rst_n,clk,din_en, din, dout) input rst_n, clk, din, din_en; output dout; reg dout; always ( posedge clk ) if (!rst_n) dout = 1b0; else if (din_en) dout = din; endmodule,3.2.3 時序電路

22、的設(shè)計(jì), 狀態(tài)機(jī)建模,有限狀態(tài)機(jī)是建立系統(tǒng)模型最為有效的手段,有著廣泛的應(yīng)用。綜合工具可以非常有效地將HDL語言描述的狀態(tài)機(jī)行為優(yōu)化成門級電路。,(狀態(tài)機(jī))時序電路按輸出信號之特點(diǎn)分為兩種: Moore型電路,Z=F(Q),輸出只取決于上一狀態(tài)。 Mealy型電路, Z=F(Q,X),輸出取決于上一狀態(tài)以及當(dāng)時的輸入。,Page 42,Page 43,3.2.3 時序電路的設(shè)計(jì),Moore機(jī),Mealy 機(jī),Page 44,3.2.3 時序電路的設(shè)計(jì),根據(jù)功能要求,確定電路的狀態(tài)數(shù)目; 定義狀態(tài)轉(zhuǎn)移表; 選擇狀態(tài)賦值 ; 編碼次狀態(tài)和輸出表 ; 狀態(tài)化簡和輸出 ; 根據(jù)狀態(tài)轉(zhuǎn)移圖完成電路的實(shí)現(xiàn)

23、。,有限狀態(tài)機(jī)的傳統(tǒng)設(shè)計(jì)方法,Page 45,3.2.3 時序電路的設(shè)計(jì),一個進(jìn)程用電平敏感的組合邏輯,描述次態(tài)和輸出; 一個進(jìn)程用邊沿敏感的行為描述同步更新的時序邏輯(狀態(tài))。,用Verilog語言描述有限狀態(tài)機(jī),在用Verilog描述狀態(tài)機(jī)時,將狀態(tài)機(jī)的描述劃分成兩個進(jìn)程:,3.2.3 時序電路的設(shè)計(jì),例3.15 串行輸入/輸出的“BCD碼” 到 “余3碼” 的轉(zhuǎn)換電路設(shè)計(jì)。,根據(jù)編碼的特點(diǎn),可描述出狀態(tài)圖。,Page 46,module bcd_to_Excess_3(clk, rst_n,b_in,b_out); input clk,rst_n, b_in; output b_out;

24、 parameter s_0 = 3b 000, s_1= 3b 001, s_2= 3b 010, s_3= 3b 011, s_4 = 3b 100, s_5 = 3b 101, s_6 = 3b 110; reg 2:0 curr_st, next_st; reg b_out;,/Part_I : 組合邏輯; always (curr_st or b_in) begin b_out = 0; case(curr_st) s_0 : if (b_in) begin next_st = s_1; b_out = 1b1; end else next_st = s_4; s_1 : if (b

25、_in) begin next_st = s_2; b_out = 1b1; end else next_st = s_5;,Page 47,. s_6: begin next_st = s_0; b_out = 1; end default : begin next_st = s_0; b_out = 0; end endcase end,/Part-II - updated new state; always (negedge rst_n or posedge clk) if (!rst_n) curr_st = s_0; else curr_st = next_st; endmodule

26、,Page 48,3.2.3 時序電路的設(shè)計(jì),用Verilog建立一個狀態(tài)機(jī)模型的注意事項(xiàng):,用parameter說明符號狀態(tài)名; case語句中對所有的狀態(tài)進(jìn)行編碼; 時序部分只用組合電路計(jì)算出的新狀態(tài)更新當(dāng)前狀態(tài); 要求一組D觸發(fā)器表示一組狀態(tài),表示系統(tǒng)狀態(tài)的D觸發(fā)器數(shù)目與表示狀態(tài)的編碼有關(guān); 狀態(tài)機(jī)的狀態(tài)數(shù)目不宜過多。,Page 49,3.2.3 時序電路的設(shè)計(jì),隱含狀態(tài)機(jī)的 verilog 語言描述,有些時序電路并不是通過顯式的狀態(tài)機(jī)來描述,而是其狀態(tài)被隱含地定義在行為的描述中。與顯式狀態(tài)機(jī)不同的是,隱含狀態(tài)機(jī)中的每個狀態(tài)只能從一個狀態(tài)進(jìn)入,狀態(tài)機(jī)的狀態(tài)是由每個周期行為所決定的。例如D

27、觸發(fā)器、移位寄存器、二進(jìn)制計(jì)數(shù)器等 (P122),Page 50,3.2.3 時序電路的設(shè)計(jì),時序電路設(shè)計(jì)應(yīng)該注意的問題:, 避免使用門控時鐘和多級時鐘,應(yīng)把這些時鐘轉(zhuǎn)換成使能端使用。,clk_p1=clk /(門控時鐘) always(posedge clk_p1) begin end,always (posedge clk) begin if (p1_gate=1b1) begin end else begin end end,Page 51,3.2.3 時序電路的設(shè)計(jì), 不要隨意使用行波時鐘,FPGA的全局時鐘資源有限,因此不要隨意使用分頻時鐘,在布局布線時,它們不能被布線到全局時鐘資源

28、線上,因此會對電路的時序造成影響,可以用同步預(yù)制的方式實(shí)現(xiàn)行波時鐘的功能。例:欲使用獨(dú)熱碼三分頻作計(jì)數(shù)器時鐘。,always(posedge clk) case (count) begin 3b 000 : count = 3b 001; 3b 001 : count = 3b 010; /one-hot code; end always (posedge count 1) cnt_4 = cnt_4 + 1;,應(yīng)改為 : always (posedge clk) If (count 1) cnt_4 = cnt_4 + 1;,Page 52,3.2.3 時序電路的設(shè)計(jì), 關(guān)于敏感變量:時序邏

29、輯模塊設(shè)計(jì)中,敏感變量表只包含時鐘和異步復(fù)位信號(若需要)。 異步復(fù)位信號的產(chǎn)生: 如果異步復(fù)位信號是由多個信號產(chǎn)生的,那么應(yīng)該在always語句外,用assign語句產(chǎn)生。,. wire rst_n; /異步復(fù)位線 assign rst_n = a ,Page 53,3.2.3 時序電路的設(shè)計(jì), 對于較長的計(jì)數(shù)器,可以用多個進(jìn)位鏈較短的計(jì)數(shù)器實(shí)現(xiàn)(資源換性能)。,/ 16b計(jì)數(shù)器一般設(shè)計(jì) module cnt_24(rst_n, clk, cnt_val); input rst_n, clk; output 15:0 cnt_val; reg 15:0 cnt_val; always (ne

30、gedge rst_n or posedge clk) if (rst_n) cnt_val = 16d0; else cnt_val = cnt_val + 1; endmodule,例子說明如何用兩個8位的計(jì)算器實(shí)現(xiàn)一個16位的計(jì)數(shù)器。,Page 54,Module cnt_16(rst_n,clk,cnt_val); input rst_n, clk; output 15:0 cnt_val; reg 7:0 cnt_1; reg 7:0 cnt_2; reg carry; always (negedge rst_n or posedge clk) if (rst_n) cnt_1 =

31、8d0; else cnt_1 = cnt_1 + 1;,always (negedge rst_n or posedge clk) if (rst_n) carry = 1b0; else carry = (cnt_1 = 8d254;) always (negedge rst_n or posedge clk) if (rst_n) cnt_2 = 8d0; else if (carry) cnt_2 = cnt_2 + 1; assign cnt_val = cnt_2,cnt_1; endmodule,低8位進(jìn)位位,低8位進(jìn)位處理,Page 55,3.2.3 時序電路的設(shè)計(jì),3、亞穩(wěn)態(tài)

32、及解決方法,所謂的 “亞穩(wěn)態(tài)” 就是介于低電平0和高電平1之間不穩(wěn)定的狀態(tài),或是經(jīng)過振蕩到達(dá)1或0的穩(wěn)態(tài)。 在異步電路中(FF 的Tsu、Th不能保證)很容易出現(xiàn)亞穩(wěn)態(tài),造成電路狀態(tài)錯誤,在電路設(shè)計(jì)時要特別處理。,Page 56,3.2.3 時序電路的設(shè)計(jì),可能出現(xiàn)亞穩(wěn)態(tài)的異步電路,Page 57,3.2.3 時序電路的設(shè)計(jì),盡量設(shè)計(jì)成同步時序電路 無法避免時,將具有多個時鐘的模塊獨(dú)立出來,在時鐘的模塊中,用一個時鐘同步另外一個時鐘域中的信號(進(jìn)行時鐘同步)。,data,Page 58,同步 “異步信號” 的兩種電路,3.2.3 時序電路的設(shè)計(jì), 如果一個被同步信號的寬度大于同步時鐘的周期,可

33、以采用下圖所示的同步電路。,Page 59,同步異步信號的兩種電路,3.2.3 時序電路的設(shè)計(jì), 如果被同步的信號脈沖寬度小于用于同步的時鐘時,可采用三個觸發(fā)器的同步電路。,Page 60,3.2.3 時序電路的設(shè)計(jì),4、存儲器的建模,大部分的FPGA中提供了內(nèi)嵌式存儲器(RAM),因此,存儲器的設(shè)計(jì)與目標(biāo)器件密切相關(guān)。在使用存儲器之前,首先應(yīng)該清楚你所使用的存儲器的類型(雙端口/單端口)、深度、寬度、速度等。 在綜合前,可以先用Verilog語言描述一個存儲器的功能模型供前仿真使用,電路設(shè)計(jì)驗(yàn)證正確后,再用FPGA中嵌入存儲器替換語言的描述的存儲器。,Page 61,3.2.3 時序電路的設(shè)

34、計(jì),例:設(shè)計(jì)1288的雙端口的RAM。,module ram_128X8 (wr_clk,wr_en,wr_addr,wr_dat8,rd_clk,rd_en,rd_addr,rd_dat8) ; input wr_clk,wr_en, rd_clk,rd_en; input 7:0 wr_dat8; input 6:0 wr_addr, rd_addr; output 7:0 rd_dat8; reg 7:0 rd_dat8; reg 7:0 ram127:0 ;,always (posedge wr_clk) if (wr_en) ramwr_addr = wr_dat8 ; always

35、 (posedge rd_clk) if (rd_en) rd_dat8 = ramrd_addr ; endmodule,Page 62,3.3 系統(tǒng)設(shè)計(jì)描述的一般方法,設(shè)計(jì)描述階段包括頂層設(shè)計(jì)和詳細(xì)設(shè)計(jì)兩個階段。根據(jù)系統(tǒng)規(guī)范的要求,將系統(tǒng)劃分成若干個模塊,形成頂層模塊圖, 頂層模塊完成系統(tǒng)定義的全部功能。 頂層設(shè)計(jì)完成之后,定義各個模塊的功能和接口并以原理圖的形式劃出各個子模塊之間的連接關(guān)系。(原理圖、自然語言、算法語言、時序波形圖等) 遞歸這個過程,直到便于Verilog描述實(shí)現(xiàn)。,Page 63,3.3 系統(tǒng)設(shè)計(jì)描述的一般方法,模塊劃分多大、如何劃分取決于設(shè)計(jì)人員對所設(shè)計(jì)系統(tǒng)的理解和設(shè)計(jì)經(jīng)驗(yàn),沒有嚴(yán)格的規(guī)則。工程師常遵循一些基本原則,使用這些規(guī)則可以清晰地劃分電路,形成較為合理電路結(jié)構(gòu),幫助設(shè)計(jì)形成良好的習(xí)慣。我們簡單地列舉一些模塊劃分的原則:,模塊劃分的一般規(guī)則

溫馨提示

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

評論

0/150

提交評論