FPGA設(shè)計(jì)基礎(chǔ)第3章FPGA設(shè)計(jì)入門_第1頁
FPGA設(shè)計(jì)基礎(chǔ)第3章FPGA設(shè)計(jì)入門_第2頁
FPGA設(shè)計(jì)基礎(chǔ)第3章FPGA設(shè)計(jì)入門_第3頁
FPGA設(shè)計(jì)基礎(chǔ)第3章FPGA設(shè)計(jì)入門_第4頁
FPGA設(shè)計(jì)基礎(chǔ)第3章FPGA設(shè)計(jì)入門_第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ì)入門n有效的建模風(fēng)格是控制綜合結(jié)果的最有力手段。n絕大多數(shù)系統(tǒng)設(shè)計(jì)都是使用HDL來實(shí)現(xiàn) 。n利用Verilog HDL進(jìn)行FPGA設(shè)計(jì)規(guī)則、方法和技巧。 Page 1組合邏輯電路組合邏輯電路 n是指數(shù)字電路在任何時刻的是指數(shù)字電路在任何時刻的輸出僅僅取輸出僅僅取決于該時刻數(shù)字電路的輸入決于該時刻數(shù)字電路的輸入,而與電路,而與電路原來的狀態(tài)原來的狀態(tài) 無關(guān)。無關(guān)。n組合邏輯電路分類:組合邏輯電路分類: 門電路門電路 編碼器、譯碼器和選擇器編碼器、譯碼器和選擇器 數(shù)據(jù)緩沖器數(shù)據(jù)緩沖器時序邏輯電路時序邏輯電路 n時序邏輯電路就是指數(shù)字電路在任何時刻的輸出不僅時序邏輯電路就是指數(shù)字

2、電路在任何時刻的輸出不僅 僅取決于該時刻數(shù)字電路的輸入,還取決于電路原來僅取決于該時刻數(shù)字電路的輸入,還取決于電路原來 的狀態(tài)。的狀態(tài)。n時鐘:進(jìn)程敏感信號時鐘:進(jìn)程敏感信號n同步與異步復(fù)位同步與異步復(fù)位 同步復(fù)位:復(fù)位語句是在以時鐘為進(jìn)程中執(zhí)行同步復(fù)位:復(fù)位語句是在以時鐘為進(jìn)程中執(zhí)行 異步復(fù)位:進(jìn)程敏感信號包括時鐘和復(fù)位信號異步復(fù)位:進(jìn)程敏感信號包括時鐘和復(fù)位信號n 分類:分類:觸發(fā)器觸發(fā)器 計(jì)數(shù)器:同步:在時鐘下,各觸發(fā)器狀態(tài)同時變化計(jì)數(shù)器:同步:在時鐘下,各觸發(fā)器狀態(tài)同時變化 異步:上一位數(shù)據(jù)是下個觸發(fā)器的時鐘信號異步:上一位數(shù)據(jù)是下個觸發(fā)器的時鐘信號 3.1 系統(tǒng)的抽象層次與Veril

3、og 一個系統(tǒng)可以在不同的抽象層次上進(jìn)行描述,也可以從不同的描述域(行為結(jié)構(gòu)物理)進(jìn)行描述。1、系統(tǒng)描述的三個 “域”n 說明一個特定的系統(tǒng)完成什么功能n 說明不同的實(shí)體之間是如何連接的n 則說明如何構(gòu)造出一個實(shí)際的器件 Page 33.1 系統(tǒng)的抽象層次與Verilog Verilog可以在三個域、五個抽象層次上描述一個系統(tǒng)。n行為模型-著重于描述系統(tǒng)的功能,忽略系統(tǒng)的實(shí)現(xiàn)(系統(tǒng)級或體系結(jié)構(gòu)級,也可能是算法級)。n結(jié)構(gòu)模型-較為詳細(xì)地至少描述到寄存器數(shù)據(jù)流的方式,大體的描述到了系統(tǒng)的結(jié)構(gòu)和實(shí)現(xiàn)(RTL/門級/開關(guān)級)。 Page 43.1 系統(tǒng)的抽象層次與Verilog2、系統(tǒng)描述的五個層次

4、 工程師可以在系統(tǒng)級、算法級、RTL(Register Transfer Level 寄存器傳輸)級、邏輯級和電路級五個層次上描述一個系統(tǒng),其中系統(tǒng)級的抽象層次最高,而電路級的抽象層次最低。抽象層次越高,所包含的細(xì)節(jié)信息就越少,抽象層次越低,所包含的細(xì)節(jié)就越多。 物理域行為域結(jié)構(gòu)域系統(tǒng)級算法級RTL級電路級邏輯級晶體管門電路ALU控制器處理器/存儲器晶體管版圖標(biāo)準(zhǔn)單元宏單元芯片/板級模塊系統(tǒng)規(guī)范算法寄存器傳輸布爾等式晶體管函數(shù)Page 5Page 63.1 系統(tǒng)的抽象層次與Verilogmodule adder(a,b,c0,c, sum); input 3:0 a,b; input c0;

5、output 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全加器。n 因?yàn)樵谙到y(tǒng)設(shè)計(jì)初期,人們更關(guān)心所設(shè)計(jì)系統(tǒng)的邏輯功能,還未關(guān)心系統(tǒng)的性能。n 行為級功能確認(rèn)后,可進(jìn)一步細(xì)化得到結(jié)構(gòu)模型。Page 73.1 系統(tǒng)的抽象層次與Verilog 行為級綜合有時也稱為高層次綜合(highlevel synthesis),高層次綜合工具對行為級描述電路的綜合效果沒有用RTL級描述的電

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

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

8、 (posedge clk) begin begin begin q1 = d; q3 = q2; q1 = d; q2 = q1; q2 = q1; q2 = q1; q3 = q2; q1 = d; q3 = q2; end end end /A 1 /B /C1、正確地理解和使用“阻塞/非阻塞”賦值備注:綜合結(jié)果見 P91、P92 圖示。例3.2 見 ModelSim 例集例3.1 三級移位寄存器的設(shè)計(jì)。B、C: 三移位寄存器 A : D觸發(fā)器 Page 13Page 143.2.2 可綜合代碼的編碼風(fēng)格n建議: 在用always過程建立組合電路時 ,使用阻塞賦值(=),在用always

9、過程描述時序電路時,使用非阻塞賦值語句 (可綜合組合電路的三種描述形式Page 163.2.2 可綜合代碼的編碼風(fēng)格b 簡單組合電路設(shè)計(jì)方法1、定義入、定義入/出邏輯變量出邏輯變量2、列真值表,寫表達(dá)式,、列真值表,寫表達(dá)式,化簡化簡3、電路圖設(shè)計(jì)、電路圖設(shè)計(jì)4、實(shí)驗(yàn)驗(yàn)證、實(shí)驗(yàn)驗(yàn)證n手工設(shè)計(jì)步驟nHDL設(shè)計(jì)步驟1、定義入、定義入/出邏輯變量出邏輯變量2、列真值表,寫表達(dá)式、列真值表,寫表達(dá)式3、Verilog 編碼編碼4、仿真驗(yàn)證、仿真驗(yàn)證5、綜合、綜合(優(yōu)化、電路實(shí)現(xiàn))(優(yōu)化、電路實(shí)現(xiàn))Page 17例3.7 半加器3.2.2 可綜合代碼的編碼風(fēng)格module HA (a,b,c,s); i

10、nput a, b; output c,s; wire c,s; wire 1:0 adder; assign adder = a + b; assign s =adder0; assign c = adder1; endmodule 備注:多種描述方法描述同樣功能。Page 183.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(

11、c),.c(c1),.s(s); assign c_o = c | c1;endmodule Page 193.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)格可以利用多個 “1

12、位全加器” 構(gòu)成多位的二進(jìn)制加法器,即所謂的 “行波加法器” 。Page 20Page 213.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) ,.c_o(cy);endm

13、odulen實(shí)例化1位全加器,設(shè)計(jì) “3位全加器”Page 223.2.2 可綜合代碼的編碼風(fēng)格例3.10 多路選擇器可以通過CASE結(jié)構(gòu)與IF-THEN-ELSE結(jié)構(gòu)實(shí)現(xiàn) 。要注意的是:ncase 結(jié)構(gòu)無優(yōu)先級特征nif 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; else if (sel2) z =

14、c; else if (sel1) z = b; else if (sel0) z = a; else z =0 ; endendmodulen選擇控制端sel3:0高位有高優(yōu)先級Page 23module 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 = a; default: z = 1b0

15、; endcase endendmodule n選擇控制端sel1:0無優(yōu)先級Page 24Page 25c 組合電路設(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 26D Q組合邏輯組合邏輯組合邏輯D QclkD inQ outabcD QD QclkD inQ out組合邏輯組合邏輯組合邏輯有組合環(huán)Page 273.2.2 可綜合代碼的編碼風(fēng)格3、三態(tài)總

16、線接口電路的設(shè)計(jì)n三態(tài)總線接口電路主要應(yīng)用于微機(jī)接口(使能三態(tài)總線接口電路主要應(yīng)用于微機(jī)接口(使能時傳送,禁能時高阻)。時傳送,禁能時高阻)。n三態(tài)總線接口電路設(shè)計(jì)使用三態(tài)總線接口電路設(shè)計(jì)使用 “ “連續(xù)賦值連續(xù)賦值” ” (assign)語句,其中一個分支被賦值成高阻語句,其中一個分支被賦值成高阻zz狀態(tài)。狀態(tài)。Page 283.2.2 可綜合代碼的編碼風(fēng)格 單向三態(tài)總線assign data_to_bus = (bus_enable) ? (core_log_to_bus) : 8hz;Page 293.2.2 可綜合代碼的編碼風(fēng)格 雙向三態(tài)總線Page 30module bi_dir_b

17、us(rst_n, wr_clk, wr_en, rd_en,addr, data_to_from_bus );input rst_n; /復(fù)位信號;input wr_clk; /寫數(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 (neg

18、edge rst_n or posedge wr_clk) if (!rst_n) reg1 = 8h 00; else if (wr_en & addr = 2b 00) reg1 = data_to_from_bus; Page 31./reg2,reg3 同樣的處理. always (negedge rst_n or posedge wr_clk) if (!rst_n) reg4 = 8h 00; else if (wr_en & addr = 2b 11) reg4 = data_to_from_bus; assign core_logic = (addr = 2b

19、00) ? reg1 : (addr = 2b 01) ? reg2: (addr = 2b 10) ? reg3 : reg4 ;endmodule 3.2.2 可綜合代碼的編碼風(fēng)格-雙向三態(tài)總線3.2.3 時序電路的設(shè)計(jì)1、時序電路的基本概念 時序電路的模型 n(通常)時序電路的輸出不僅與當(dāng)前的輸入有關(guān),而且與電路過去的狀態(tài)也有關(guān)系。n時序電路由存儲元件(記憶功能,F(xiàn)F實(shí)現(xiàn))和組合電路(用于完成運(yùn)算)組成。nFPGA中,一般使用D觸發(fā)器作為存儲元件 。組 合 電 路x1.xnz1.zm存 儲 元 件Y1.Yny1ynPage 32Page 333.2.3 時序電路的設(shè)計(jì) 觸發(fā)器的建立時間(

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

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

22、用一個D觸發(fā)器的輸出作另一個觸發(fā)器的時鐘輸入。在數(shù)字電路設(shè)計(jì)中經(jīng)常用到此種設(shè)計(jì)方案。要特別關(guān)注電路的時序,也是時序仿真的特別關(guān)照點(diǎn)。n多級邏輯時鐘-當(dāng)產(chǎn)生門控時鐘的組合邏輯超過一級門電路時,電路的可靠性變得很難控制,系統(tǒng)中避免采用。 Page 383.2.3 時序電路的設(shè)計(jì) 時鐘策略n若電路要用到門控時鐘/行波時鐘,那么設(shè)計(jì)時要在頂層建立時鐘模塊,完成時鐘的分頻、反相或產(chǎn)生門控時鐘。n使用FPGA中的PLL資源倍頻時鐘,時鐘元件的實(shí)例化要在頂層的時鐘模塊中進(jìn)行。n不要使用多級邏輯時鐘。n一般情況FPGA有專用的全局時鐘引腳。對于內(nèi)部信號如何處理,F(xiàn)PGA布局/線工具會自動優(yōu)化使用系統(tǒng)時鐘資源,

23、但有時也需要設(shè)計(jì)者進(jìn)行指定。 是指在數(shù)字系統(tǒng)中時鐘的使用方法和策略。對于FPGA設(shè)計(jì),合理的時鐘策略是設(shè)計(jì)成功的基礎(chǔ)。3.2.3 時序電路的設(shè)計(jì)時鐘模塊Page 39Page 402、時序電路的建模3.2.3 時序電路的設(shè)計(jì)D觸發(fā)器帶使能端的D觸發(fā)器 D 觸發(fā)器Page 413.2.3 時序電路的設(shè)計(jì)/可異步復(fù)位D觸發(fā)器module dflip(rst_n, clk, din, dout);input rst_n,clk; input din;output dout; reg dout;always (negedge rst_n or posedge clk)if (!rst_n) dout

24、= 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 時序電路的設(shè)計(jì) 狀態(tài)機(jī)建模 有限狀態(tài)機(jī)是建立系統(tǒng)模型最為有效的手段,有著廣泛的應(yīng)用。綜合工具可以非常有效地將HDL語言描述的狀態(tài)機(jī)行

25、為優(yōu)化成門級電路。 (狀態(tài)機(jī))時序電路按輸出信號之特點(diǎn)分為兩種: Moore型電路,Z=F(Q),輸出只取決于上一狀態(tài)。 Mealy型電路, Z=F(Q,X),輸出取決于上一狀態(tài)以及當(dāng)時的輸入。Page 42Page 433.2.3 時序電路的設(shè)計(jì)次態(tài)組合邏輯狀態(tài)寄存器輸出組合邏輯clkinputoutput次 態(tài) 組 合 邏 輯狀 態(tài) 寄 存 器輸 出 組 合 邏 輯clkinputoutput Moore機(jī) Mealy 機(jī) Page 443.2.3 時序電路的設(shè)計(jì)根據(jù)功能要求,確定電路的狀態(tài)數(shù)目;定義狀態(tài)轉(zhuǎn)移表;選擇狀態(tài)賦值 ;編碼次狀態(tài)和輸出表 ;狀態(tài)化簡和輸出 ;根據(jù)狀態(tài)轉(zhuǎn)移圖完成電路

26、的實(shí)現(xiàn)。n有限狀態(tài)機(jī)的傳統(tǒng)設(shè)計(jì)方法Page 453.2.3 時序電路的設(shè)計(jì)一個進(jìn)程用電平敏感的組合邏輯,描述次態(tài)和輸出;一個進(jìn)程用邊沿敏感的行為描述同步更新的時序邏輯(狀態(tài))。 n用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ì)。s_0s_10/10/1s_2s_30/01/10/01/11/0s_4s_50/01/10/11/0s_61/00/1 根據(jù)編碼的特點(diǎn),可描述出狀態(tài)圖。Page 46module bcd_to_Excess_3(clk,

27、 rst_n,b_in,b_out); input clk,rst_n, b_in; output b_out; 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 =

28、 s_1; b_out = 1b1; end else next_st = s_4; s_1 : if (b_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; enddefault : begin next_st = s_0; b_out = 0; endendcaseend/Part-II - updated new state;always (negedge rst_n or posedge clk) if (!rst_n) c

29、urr_st = s_0; else curr_st = next_st;endmodule Page 483.2.3 時序電路的設(shè)計(jì)n用Verilog建立一個狀態(tài)機(jī)模型的注意事項(xiàng): 1.用parameter說明符號狀態(tài)名;2.case語句中對所有的狀態(tài)進(jìn)行編碼;3.時序部分只用組合電路計(jì)算出的新狀態(tài)更新當(dāng)前狀態(tài);4.要求一組D觸發(fā)器表示一組狀態(tài),表示系統(tǒng)狀態(tài)的D觸發(fā)器數(shù)目與表示狀態(tài)的編碼有關(guān);5.狀態(tài)機(jī)的狀態(tài)數(shù)目不宜過多。Page 493.2.3 時序電路的設(shè)計(jì)n隱含狀態(tài)機(jī)的 verilog 語言描述 有些時序電路并不是通過顯式的狀態(tài)機(jī)來描述,而是其狀態(tài)被隱含地定義在行為的描述中。與顯式狀態(tài)

30、機(jī)不同的是,隱含狀態(tài)機(jī)中的每個狀態(tài)只能從一個狀態(tài)進(jìn)入,狀態(tài)機(jī)的狀態(tài)是由每個周期行為所決定的。例如D觸發(fā)器、移位寄存器、二進(jìn)制計(jì)數(shù)器等 (P122)Page 503.2.3 時序電路的設(shè)計(jì)n時序電路設(shè)計(jì)應(yīng)該注意的問題: 避免使用門控時鐘和多級時鐘,應(yīng)把這些時鐘轉(zhuǎn)換成使能端使用。clk_p1=clk & p1_gate;/(門控時鐘)always(posedge clk_p1) begin endalways (posedge clk) begin if (p1_gate=1b1) begin end else begin end endPage 513.2.3 時序電路的設(shè)計(jì) 不要隨意使

31、用行波時鐘 FPGA的全局時鐘資源有限,因此不要隨意使用分頻時鐘,在布局布線時,它們不能被布線到全局時鐘資源線上,因此會對電路的時序造成影響,可以用同步預(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; endalways (posedge count 1) cnt_4 = cnt_4 + 1; 應(yīng)改為 :always (posedge clk) If (count 1)

32、cnt_4 = cnt_4 + 1; Page 523.2.3 時序電路的設(shè)計(jì) 關(guān)于敏感變量:時序邏輯模塊設(shè)計(jì)中,敏感變量表只包含時鐘和異步復(fù)位信號(若需要)。 異步復(fù)位信號的產(chǎn)生: 如果異步復(fù)位信號是由多個信號產(chǎn)生的,那么應(yīng)該在always語句外,用assign語句產(chǎn)生。 .wire rst_n; /異步復(fù)位線assign rst_n = a & !b; .always (negedge rst_n or posedge clk) if ( !rst_n) dout = 1b0; else if (din_en) dout = din;Page 533.2.3 時序電路的設(shè)計(jì) 對于較

33、長的計(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 (negedge 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 54Module cnt_16(rst_n,clk,cnt_v

34、al); 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 = 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) i

35、f (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 553.2.3 時序電路的設(shè)計(jì)3、亞穩(wěn)態(tài)及解決方法所謂的 “亞穩(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 563.2.3 時序電路的設(shè)計(jì)可能出現(xiàn)亞穩(wěn)態(tài)的異步電路 Page 573.2.3 時序電路的設(shè)計(jì)n盡量設(shè)計(jì)成同

36、步時序電路n無法避免時,將具有多個時鐘的模塊獨(dú)立出來,在時鐘的模塊中,用一個時鐘同步另外一個時鐘域中的信號(進(jìn)行時鐘同步)。dataPage 58n同步 “異步信號” 的兩種電路 3.2.3 時序電路的設(shè)計(jì) 如果一個被同步信號的寬度大于同步時鐘的周期,可以采用下圖所示的同步電路。 Page 59n同步異步信號的兩種電路 3.2.3 時序電路的設(shè)計(jì) 如果被同步的信號脈沖寬度小于用于同步的時鐘時,可采用三個觸發(fā)器的同步電路。Page 603.2.3 時序電路的設(shè)計(jì)4、存儲器的建模n大部分的FPGA中提供了內(nèi)嵌式存儲器(RAM),因此,存儲器的設(shè)計(jì)與目標(biāo)器件密切相關(guān)。在使用存儲器之前,首先應(yīng)該清楚你

37、所使用的存儲器的類型(雙端口/單端口)、深度、寬度、速度等。 n在綜合前,可以先用Verilog語言描述一個存儲器的功能模型供前仿真使用,電路設(shè)計(jì)驗(yàn)證正確后,再用FPGA中嵌入存儲器替換語言的描述的存儲器。 Page 613.2.3 時序電路的設(shè)計(jì)n例:設(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;ou

38、tput 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 (posedge rd_clk) if (rd_en) rd_dat8 = ramrd_addr ;endmodule Page 623.3 系統(tǒng)設(shè)計(jì)描述的一般方法設(shè)計(jì)描述階段包括頂層設(shè)計(jì)和詳細(xì)設(shè)計(jì)兩個階段。根據(jù)系統(tǒng)規(guī)范的要求,將系統(tǒng)劃分成若干個模塊,形成頂層模塊圖, 頂層模塊完成系統(tǒng)定義的全部功能。頂層設(shè)計(jì)完成之后,定義各個模塊的功能和接口并以原理圖的形式劃出各

39、個子模塊之間的連接關(guān)系。(原理圖、自然語言、算法語言、時序波形圖等)遞歸這個過程,直到便于Verilog描述實(shí)現(xiàn)。Page 633.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í)慣。我們簡單地列舉一些模塊劃分的原則: n模塊劃分的一般規(guī)則:Page 643.3 系統(tǒng)設(shè)計(jì)描述的一般方法 分離特殊邏輯和核心邏輯 n 復(fù)位模塊n I/O模塊n 時鐘模塊n 存儲器模塊核心邏輯I/O PAD核心邏輯輸入核心邏輯輸出I/O輸出使能時鐘模塊核心邏輯所用的時鐘輸入雙向輸出復(fù)位

溫馨提示

  • 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

提交評論