FPGA邏輯設計PPT優(yōu)秀課件_第1頁
FPGA邏輯設計PPT優(yōu)秀課件_第2頁
FPGA邏輯設計PPT優(yōu)秀課件_第3頁
FPGA邏輯設計PPT優(yōu)秀課件_第4頁
FPGA邏輯設計PPT優(yōu)秀課件_第5頁
已閱讀5頁,還剩45頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、1 FPGA邏輯設計邏輯設計 2 n邏輯設計是一種并行的思想,不同于軟件設計; n同一時刻,有多個語句塊同時執(zhí)行; n邏輯設計者要明白寫的代碼將會綜合成什么電路; n邏輯設計分時序設計與算法設計兩部分; Action 3 主要內容主要內容 設計命名設計命名 主要內容 設計技巧設計技巧 4 信號與變量信號與變量 n信號的縮寫 模塊設計過程中,為了避免各信號命名冗余過長,對 信號采取簡寫方式命名; 示例: reset_n簡寫為rst_n; clock_20m簡寫為clk_20m; write_enable 簡寫為wr_en; 常用的信號簡寫如表: 5 常用信號縮寫常用信號縮寫 信號名縮寫信號名縮寫

2、信號名縮寫 resetrstwritewremptyept clockclkreadrdalmostal enableencontrolctrlfrequencyfre datadataddressadrreceiverrx transmittertxmemorymemcomparecompa parallelparaserialserierrorerr countercntdelaydyinitialinit registerregbufferbufcurrentcurr switchswrequestreqacknowack temptmpcheckchksystemsys clearcl

3、rreadyrdyloadld 6 系統(tǒng)級信號系統(tǒng)級信號 n系統(tǒng)級信號 系統(tǒng)級信號指復位信號,置位信號,時鐘信號等 需要輸送到各個模塊的全局信號;系統(tǒng)信號以前 綴“sys_”開頭。 示例: sys_rst/系統(tǒng)復位信號 sys_clk/系統(tǒng)時鐘 sys_set/系統(tǒng)置位信號 7 n低電平信號 是指低電平有效的信號,加后綴“_n”; 示例: rst_n/代表低電平復位有效; en_n/代表低電平使能有效; n鎖存器鎖存信號 組合邏輯信號經過鎖存器鎖存后的信號,加后綴 “_r”,與鎖存前的信號相區(qū)分。 示例: wr_en 經鎖存后,命名為:wr_en_r; 8 n多拍信號 為了考慮數(shù)據(jù)對齊或者同步

4、,需要對信號進行多級鎖存延時, 經多級鎖存的信號可加后綴dx(x = 0,1,2,3)。 示例: mii_rx_en延時三拍的信號,分別命名為: mii_rx_en_d0、mii_rx_en_d1、mii_rx_en_d2; n時鐘信號 為了體現(xiàn)時鐘的頻率、相位,對時鐘信號除了加前綴clk外, 還要加表標示時鐘頻率及時鐘相位的后綴; 示例: 相位為90度的125MHz時鐘,命名為clk_125m_90; 對相位為0度的時鐘,可不加相位指示; 9 n跨時鐘域的同步信號 當一個信號在一個時鐘域生成,進入另一時鐘域 時,需要對該信號進行同步,同步的信號可加syn 前綴;必要時加同步前的時鐘做為后綴,

5、以表示 該信號來自哪個時鐘域; 示例: read_ip由50MHz的時鐘生成,進入100MHz時鐘 域時,經同步后,命名為syn_read_ip;或者命名 為syn_read_ip_50m; 10 模塊說明格式模塊說明格式 n模塊說明格式 為了便于后期的維護,對每個模塊需要進行詳細的說明;可采用如下格式 : /*- - ZTE NetView -*/ /*- - Project : ETNMS - Module: frame_top.v - Description : the top module of Framer - Created Date: 2009-05-25 - Author :

6、CamelKing() - Department: Power else if(ld_en) data_out = data_in; else data_out = data_out + 1b1; end 12 n空格的使用(一) 不同變量,以及變量與符號、變量與括號之間都應當保留 一個空格; 例如:x = ( a = b ) ? 1b1 : 1b0 ; Verilog關鍵字與其它任何字符串之間都應當保留一個空格; 例如:always ( * ) 使用大括號和小括號時,前括號的后邊和后括號的前邊應 當留有一個空格。邏輯運算符、算術運算符、比較運算符等 運算符的兩側各留一個空格,與變量分隔開來;

7、單操作數(shù)運 算符例外,直接位于操作數(shù)前,不使用空格。 assign SramAddrBus = AddrBus31:24, AddrBus7:0 ; assign DivCntr3:0 = DivCntr3:0 + 4b0001; assign Result = Operand; 13 n語句塊的縮進 不同層次之間的語句使用Tab鍵進行縮進,每加深 一層縮進一個Tab(建議一個Tab四個字符); n語句塊的注釋 在endmodule,endtask,endcase等標記一個代 碼塊結束的關鍵詞后面要加上一行注釋說明這個 代碼塊的名稱; n大小寫 對所有的信號名、變量名和端口名都用小寫,這 樣做

8、是為了和業(yè)界的習慣保持一致;對常量名和 用戶定義的類型用大寫; 14 n模塊例化 在例化模塊時,最好采用名字相關的顯式映射而不要采用位 置相關的隱式映射,提高代碼的可讀性和方便debug連線錯 誤; 示例: mux4 uut ( .a(a), .b(b), .c(c), .d(d), .sel(sel), .y(y) ); 15 TB文件命名文件命名 n測試向量文件 為了與模塊文件區(qū)分,測試文件要加后綴tb; 比如: e1_framer的測試文件可命名為:e1_framer_tb; 16 n邏輯設計命名 n邏輯設計技巧邏輯設計技巧 17 邏輯設計技巧邏輯設計技巧 n阻塞與非阻塞賦值 區(qū)別 非阻

9、塞賦值(=)語句右端表達式計算完后并不立即賦值給 左端,而是同時啟動下一條語句繼續(xù)執(zhí)行??梢岳斫鉃樗?的右端表達式RHS1、RHS2等在進程開始時同時計算,計 算完后,等進程結束時同時分別賦給左端變量LHS1、LHS2 等。 阻塞賦值(=)語句在每個右端表達式計算完后立即賦給左 端變量,即賦值語句LHS1=RHS1執(zhí)行完后LHS1是立即更新 的,同時只有LHS1=RHS1執(zhí)行 完后才可執(zhí)行語句 LHS2=RHS2,依次類推。前一條語句的執(zhí)行結果直接影響 到后面語句的執(zhí)行結果。 18 n阻塞與非阻塞賦值 使用建議 1,時序邏輯建模時,使用“非阻塞賦值”; 2,為鎖存器(latch)建模,使用“

10、非阻塞賦值”; 3,用always塊為組合邏輯建模,使用“阻塞賦值”; 4,當在同一個always塊里面既為組合邏輯又為時序 邏輯建模,使用“非阻塞賦值”;建議不要有這樣的語句 5,不要在同一個always塊混合使用“阻塞賦值”和“非阻塞賦 值”,編譯時通不過; 6,不要在兩個或兩個以上always塊里面對同一個變量進行賦值, 編譯時通不過; 19 n信號延時 信號的延時,強烈建議不要采用門電路延時來實 現(xiàn),不同工藝,不同廠家的器件門延時不一樣; 建議采用計數(shù)器或者移位寄存器來實現(xiàn); (Altera:LCELL) n避免子模塊內部三態(tài)/內部雙向IO 避免在子模塊內部使用三態(tài)電路,否則會增加其

11、功耗,要把三態(tài)信號及使能信號引到頂層做三態(tài) 門處理; n避免子模塊內部雙向IO 避免子模塊內部采用雙向IO,最好把把雙向IO分 開為輸入,輸出口處理比較好; 20 nIf與case語句 1,if語句 if.else if . else 語句是有優(yōu)先級的,第一個if的優(yōu)先級最高, 最后一個else的優(yōu)先級最低。 2,case語句 case語句是“平行”的結構,所有的case的條件和執(zhí)行都沒 有“優(yōu)先級”。但casex、casez例處; 3,建議 a,能用case語句的地方最好采用case語句;避免消耗更多 的邏輯資源; b,if語句中,一定要有else語句,否則在組合邏輯設計中容 易綜合成鎖存器

12、(latch); c,case語句中,一定要有default項,否則組合設計中,容 易綜合成鎖存器; 21 n信號敏感表 在verilog_97版本中,always ()的敏感表一 定要完善,否則邏輯綜合后,達不到預期的效果; 但在verilog_2001版本中,此問題可不予考慮,因 為采用always ( * )描述方式,軟件會自動增加 敏感信號; 因此建議采用verilog_2001版本描述邏輯; 22 n狀態(tài)編碼碼型實例 狀態(tài)機的一般設計原則,binary, gray-code 編碼 使用最少的觸發(fā)器,較多的組合邏輯。而one-hot 編碼反之。 CPLD多使用gray-code;FPG

13、A多使用one_hot編 碼。 小型設計使用gray和binary編碼更有效,而大型狀 態(tài)機使用ONE-HOT更有效; 在實際應用中,沒有必要一定把某些狀態(tài)編碼強 行綜合為one-hot方式,軟件會根據(jù)狀態(tài)數(shù)量自動 綜合為最佳方式; 23 n基本邏輯塊 xilinx的最小邏輯單元是slice,一個slice包含2個 FF和2個LUT;4個slice組成一個CLB; altera的最小邏輯單元是LE,一個LE包含1個FF和 1個LUT;16個LE組成一個LAB; 24 n時鐘的使用時鐘分布 1,為時鐘信號選用全局時鐘緩沖器(BUFG),不選 用全局時鐘緩沖器的時鐘將會引入偏差; 2,只用一個時鐘

14、沿來寄存數(shù)據(jù);使用時鐘的兩個 沿不可靠,因為時鐘的某沿或者兩個沿會”偏 移”。如果只使用時鐘的一個沿,就會降低時鐘 邊沿偏移的風險。 可以使用CLKDLL 自動糾正時鐘的占空比以達到 50%的占空比.否則,強烈建議只使用一個時鐘沿; 25 n時鐘如何上全局時鐘網? FPGA器件中有專門的快速時鐘走線,叫全局時鐘網;上了 全局時鐘網的時鐘可稱為全局時鐘,在全局網上傳輸?shù)臅r鐘 抖動(jitter)與偏斜(skew)最?。?altera器件 1,由FPGA時鐘引腳引入的外部時鐘,會自動上全局時鐘網; 2,FPGA內部時鐘或者其它時鐘,可通過PLL/DPLL上全局時 鐘網;或者通過global原語約束

15、上全局時鐘網; 3,global原語 global instance_name (.in(),.out(); 4, 或者通過assignments editor中添加全局時鐘約束; 26 n時鐘如何上全局時鐘網? XILINX 1,從FPGA時鐘引腳引入的時鐘,可通過設置上全 局時鐘網; 2,也可以通過BUFG、IBUFG、BUFGDS、DCM 上全局時鐘;草圖 27 n門控時鐘 (gate clock) 在FPGA內部,內部產生的時鐘叫門控時鐘;在高速數(shù)據(jù)設 計中,門控時鐘不能做為DFF/FF的時鐘輸入;因為門控時 鐘的jitter與skew都比較大,會造成數(shù)據(jù)誤采樣; 實際應用中,可以把門

16、控時鐘做為時鐘使能的方式引入 DFF/FF的使能腳,并采用源時鐘做為DFF/FF的輸入時鐘; 草圖 n行波時鐘 (ripple clock) 由一個觸發(fā)器的輸出做為下一個觸發(fā)器的時鐘輸入;數(shù)字電 路課程中學過的異步計數(shù)器就是行波時鐘的方式; 行波時鐘的偏斜最大,每經過一級FF,抖動與偏斜越大,實 際中最好不采用; 28 n信號初始化 為考慮代碼的可移植性,可維護性,盡量不要使 用信號的默認值(或初始值),要用復位來初始 化信號。 當然,altera的某些器件本身支持上電初始化值, 具體可用initial定義; 但xilinx不支持;這就是完全OK的代碼完全移植到 不同芯片時,工作不穩(wěn)定的原因;

17、 29 n驅動能力 有些廠家的器件驅動能力有限,過多的負載可能 導致邏輯工作不正常; a,F(xiàn)PGA雖然提供內部上下拉機制,但電阻值有 限(幾十歐姆到幾千歐姆) ;采用內部上拉時,引 腳驅動能力可能有限;建議使用外部上下拉。 b,內部信號的驅動能力,不同廠家各不同,在邏 輯設計中,采用冗余方式編寫代碼。比如altera的 一些低端器件可能存在此問題;xilinx不存在此問 題,軟件綜合時,如果超過一定的扇出數(shù),會進 行邏輯復制,增加信號的驅動能力;草圖 30 n同步復位,異步復位 同步復位 同步復位就是指復位信號只有在時鐘上升沿到來時,才能有 效。否則,無法完成對系統(tǒng)的復位工作。 always

18、(posedge clk) begin if(rst) y = 0; else y = d; end 31 n同步復位,異步復位 異步復位 指無論時鐘沿是否到來,只要復位信號有效,就對系 統(tǒng)進行復位。 always (posedge clk or posedge rst) begin if(rst) y = 0; else y = d; end 32 n同步復位優(yōu)缺點 優(yōu) 可以使所設計的系統(tǒng)成為100%的同步時序電路,這便大大 有利于時序分析,而且綜合出來的fmax一般較高。 因只有在時鐘有效電平到來時才有效,可達到濾除毛刺的 目的。 缺 復位信號的有效時長必須大于一個或多個時鐘周期,才能 真

19、正被系統(tǒng)識別并完成復位任務。布局布線時還要考慮諸 如:clk skew,組合邏輯路徑延時,復位延時等因素。否則 更可能出現(xiàn)復位異外;講述下PLL/DCM的同步復位不好 之處 一般FPGA器件結構中DFF都只有異步復位端口。所以,如 果采用同步復位,綜合器會在DFF的復位端口前插入組合 邏輯,這樣會耗費更多邏輯資源。 33 n異步復位優(yōu)缺點 優(yōu) 大多FPGA器件中DFF都有異步復位端口,因此 采用異步復位可以節(jié)省邏輯資源; 異步復位信號識別方便,可以很方便使用FPGA 的全局復位端口GSR; 缺 在復位信號釋放(release)的時候容易出現(xiàn)問題。 倘若復位釋放時恰恰在時鐘有效沿附近,就很容 易

20、使寄存器輸出出現(xiàn)亞穩(wěn)態(tài); 復位信號容易受到毛刺影響; 34 n異步復位,同步釋放 因異步復位容易受毛刺影響,采用“異步復位,同步釋放”的方式,可以 避免此問題; 給出實例 module Reset_Synchronizer ( output reg rst_n, input clk, input asyncrst_n ); reg rff1; always (posedge clk , negedge asyncrst_n) begin if (!asyncrst_n) rst_n,rff1 = 2b0; else rst_n,rff1 = rff1,1b1; end 35 n毛刺(glitc

21、h) 由于FPGA內部存在線延時,門延時等因素,同時受電壓, 溫度等的影響;信號的高低電平轉換需要一定的過渡時間; 因此在信號變化的瞬間,組合邏輯的輸出會有先后順序, 出現(xiàn)規(guī)則不一的脈沖,這種脈沖稱“毛刺”。 毛刺的影響 如果將帶有“毛刺”的信號引入觸發(fā)器的清零端、置位端, 可能因“毛刺”導致觸發(fā)器誤跳轉,影響整個邏輯的正常工 作; 如何消除 1,“毛刺”電平很窄,當不滿足DFF的建議保持時間時, 可通過DFF來實現(xiàn)對毛刺的消除; 2,計數(shù)器采用gray碼計數(shù),gray碼每次只變化一位; 在實際的邏輯中,特別是高速設計中,對于任何組合邏輯產 生的控制信號(使能、清零、單脈沖等),建議后面加一級

22、 DFF來消除“毛刺”; 36 n“競爭”與“冒險” 關于競爭冒險,有多種不同的定義,但大致的理解如下: 競爭由于FPGA內部的各種不同的延時,導致信號到達 門輸入口的先后時間不同; 冒險由競爭引起門輸出錯誤的瞬間叫冒險;主要表現(xiàn)為 門輸出有異常的脈沖出現(xiàn),這種脈沖叫毛刺; 靜態(tài)冒險與動態(tài)冒險 靜態(tài)冒險輸入信號變化前后,輸出的穩(wěn)態(tài)值是一樣的, 但在輸入信號變化時,輸出信號產生毛刺的現(xiàn)象; 若輸出的穩(wěn)態(tài)值為0,出現(xiàn)了正的尖脈沖毛刺,稱為靜態(tài)0險 象。若輸出穩(wěn)態(tài)值為1,出現(xiàn)了負的尖脈沖毛刺,則稱為靜 態(tài)1冒險。 動態(tài)冒險輸入信號變化前后,輸出的穩(wěn)態(tài)值不同,并在 邊沿處出現(xiàn)了毛刺的現(xiàn)象; 37 n“

23、亞穩(wěn)態(tài)” FPGA中的觸發(fā)器FF,數(shù)據(jù)信號的過渡都要滿足 建立與保持時鐘,如果在不滿足建立與保持時間 情況下,對數(shù)據(jù)進行采樣,就會導致采樣失誤, 采樣結果意外,這種現(xiàn)象叫亞穩(wěn)態(tài)。 經過不同的時鐘域的信號,由于時鐘頻率相位的 不同,很容易出現(xiàn)“亞穩(wěn)態(tài)”; n建立與保持時間草圖 時鐘沿到來前,數(shù)據(jù)必須保持的時間叫建立時間 (setup time); 時鐘沿過后,數(shù)據(jù)必須保持的時間叫保持時間 (hold time); 38 n跨時鐘域 信號處理草圖 在越來越復雜的大型FPGA邏輯設計中,時鐘不再 是單一的時鐘,而是有多個時鐘并存, 多個時鐘可能頻率不同,初始相位也不同;不同 的時鐘所驅動的不同邏輯塊

24、,可稱做時鐘域。 跨時鐘域信號的影響 當一個信號從一個時鐘穿越到另一個時鐘域是, 由于時鐘頻率/相位的不同,會造成建立保持時間 的不足,由此造成采樣時“亞穩(wěn)態(tài)”出現(xiàn),電路 不能正常工作; 39 n如果處理跨時鐘域的信號或數(shù)據(jù)? 1,對于慢時鐘到快時鐘的跨時鐘域的信號,我們可以采用兩個 或者多個DFF級聯(lián)的方式來實現(xiàn)單一信號的同步;描述 2,但對于快時鐘到慢時鐘的信號,由于快時鐘產生的信號可能 會引起慢時鐘的采樣失效,造成數(shù)據(jù)漏掉;因此要把快時 鐘的信號要擴展,以達到慢時鐘的采樣周期; 實現(xiàn)應用中,有兩種方式可實現(xiàn)快時鐘到慢時鐘信號的過 渡: a,擴展快時鐘域的信號寬度,滿足慢時鐘的采樣要求,確

25、 保采樣時鐘能正確采樣; b,采樣結繩法(應用高速設計中); 3,對于跨時鐘域的大流量數(shù)據(jù),可以采用DPRAM/ asyn FIFO來實現(xiàn)有效的時鐘隔離及數(shù)據(jù)通訊;細講一下 40 n邏輯復制(logic replicate) 考慮到邏輯門的扇出最大能力,在某些時候,需 要對邏輯功能塊通行復制,以此來提高對后級電 路的驅動能力,使電路工作更可靠;草圖 在實際應用中,如果有使能到邏輯復制邏輯復制,可以采 取兩種方式避免邏輯復制部分被優(yōu)化掉: 1,對需要保留邏輯復制的信號或模塊,采用HDL 約束方式; (* preserve *) ; (* preserve *) module (.); 2,關閉r

26、eplicate邏輯優(yōu)化選項; 41 n邏輯重定時(logic retiming) 時序設計中,F(xiàn)F與FF之間的組合邏輯,可能因大 小不同,造成FF級聯(lián)之間的延時分配不同;為使 組合邏輯延時平衡,可采用retiming的技術來實現(xiàn); 草圖 實現(xiàn)應用中,不用人為的去考慮此項,一般可通 過軟件設置來要不要retiming技術; xilinx的ISE 軟件中retiming分前向retiming與后面 retiming; 42 n模塊輸入輸出寄存 復雜的邏輯設計中,常對每個功能模塊的輸入輸出 都用FF打一拍,可以防止模塊與模塊之間的路徑成 為關鍵路徑(critical path),方便優(yōu)化;在層次打

27、平或 者保留時,模塊與模塊之間的路徑就是FF與FF之間 路徑,接口信號可保留下來,方便調試; FFFF D D Q Q M1M2 43 nfull case/paralle case 1, full case是指編碼下的各種可能的條件項 (包括default)都有對應的輸出,沒有任何遺漏 項; 2, paralle case是指編碼下的各種可能的條件 項與輸出項是一一對應關系,不存在多個條件項 對應一個輸出的情況;如果出現(xiàn)此情況,代碼很 可能會被綜合成具有優(yōu)先級的電路; 可通過軟件設置使用full case/paralle case;也可以 在HDL語言中加(* parallel_case *) 、(*full case*) 來約束; 44 n狀態(tài)機 類型 a,Moore Machine狀態(tài)輸出只與當前的狀態(tài)有關,與 輸入無關; b,Mealy Machine狀態(tài)輸出不僅與當前的狀態(tài)有關,而 且與輸入有關; 在實際應用中,Mealy狀態(tài)機用得比較多; 一段式狀態(tài)機 一段式狀態(tài)機把所有狀態(tài)跳轉、狀態(tài)輸入、狀態(tài)輸出都放在 一個always

溫馨提示

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

最新文檔

評論

0/150

提交評論