在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Verilog HDL描述的組合邏輯環在FPGA實現時到底有什么問題?

FPGA之家 ? 來源:FPGA之家 ? 作者:FPGA之家 ? 2022-12-12 10:01 ? 次閱讀

課堂上給大家介紹代碼規范的時候,反復強調不能出現組合邏輯環,具體就是組合邏輯所有的else語句要寫全,case語句也要寫全,但組合邏輯環到底有什么危害?下面就詳細舉例說明。

01

什么是組合邏輯環?

組合邏輯反饋環路是數字同步邏輯設計的大忌,它最容易因振蕩、毛刺、時序違規等問題引起整個系統的不穩定和不可靠。組合邏輯反饋環路是二種高風險的設計方式,主要原因如下:

1.組合反饋環的邏輯功能完全依賴于其反饋環路上組合邏輯的門延時和布線延時等,如果這些傳播延時有任何改變,則該組合反饋環單元的整體邏輯功能將徹底改變,而且改變后的邏輯功能很難確定。

2.組合反饋環的時序分析是無窮循環的時序計算,綜合、實現等EDA 工具迫不得已一般必須主動割斷其時序路徑,以完成相關的時序計算。而不同的EDA工具對組合反饋環的處理方法各不相同,所以組合反饋環的最終實現結果有很多不確定因素。

3.通常的綜合工具在處理組合邏輯反饋問題時,將產生Latch,這將對時序造成許多問題。

在用Verilog HDL進行可綜合電路設計時,有很多情況都有可能產生組合邏輯環。

?在組合邏輯的組合進程中, 條件語句描述時應該指定所有條件下所有輸出的狀態,以避免鎖存。比如if/case語句的所有分支必須定義全部的輸出才可能避免出現鎖存。

?在設計中,應該盡量避免使用鎖存!因為鎖存要占去大量的觸發器資源,而且會對電路帶來某種不穩定的隱患。

?所謂的latch,其實質是組合電路中有反饋!反饋的形成是利用到了前一個狀態。

具體舉例如下:

213094e0-79b7-11ed-8abf-dac502259ad0.jpg

2142d362-79b7-11ed-8abf-dac502259ad0.jpg

總結如下:

?組合電路描述中,條件判斷語句必須指明所有條件分支情況下,被賦值信號的值。

?分支不完整,意味著電路需要在某種電平狀態下,讓被賦值的信號“保持原值”,這只能使用鎖存電路實現。

02

一個實例

設計代碼如下:

// **************************************************************

// COPYRIGHT(c)2015, Xidian University

// All rights reserved.

//

// IP LIB INDEX :

// IP Name :

// File name :

// Module name :

// Full name :

//

// Author : Liu-Huan

// Email : assasin9997@163.com

// Data :

// Version : V 1.0

//

// Abstract :

// Called by :

//

// Modification history

// -----------------------------------------------------------------

//

//

//

// *****************************************************************

// *******************

// TIMESCALE

// *******************

`timescale 1ns/1ps

// *******************

// INFORMATION

// *******************

//*******************

//DEFINE(s)

//*******************

//`define UDLY 1 //Unit delay, for non-blocking assignments in sequential logic

//*******************

//DEFINE MODULE PORT

//*******************

module TOP (

input clk ,

input rst

) ;

//*******************

//DEFINE LOCAL PARAMETER

//*******************

//parameter(s)

parameter IDLE = 5'b0_0001 ;

parameter S1 = 5'b0_0010 ;

parameter S2 = 5'b0_0100 ;

parameter S3 = 5'b0_1000 ;

parameter S4 = 5'b1_0000 ;

//*********************

//INNER SIGNAL DECLARATION

//*********************

//REGS

(* mark_debug = "true" *)reg [4:0] c_state ;

(* mark_debug = "true" *)reg [4:0] n_state ;

reg [3:0] cnt ;

(* mark_debug = "true" *) reg [3:0] led ;

//WIRES

//*********************

//INSTANTCE MODULE

//*********************

//*********************

//MAIN CORE

//*********************

always @(posedge clk or posedge rst) begin

if (rst == 1'b1) begin

cnt <= 4'b0 ;

end

else begin

cnt <= cnt+1'b1 ;?

end

end

// 三段式狀態機 驗證 第二段 if無else的異常跳轉

// 第一段 狀態轉移

always @(posedge clk or posedge rst) begin

if (rst == 1'b1) begin

c_state <= IDLE ;?

end

else begin

c_state <= n_state ;

end

end

// 第二段 計算下一狀態

always @ (*) begin

case ( c_state )

IDLE : begin

if ( cnt == 'b0 )

n_state = S1 ;

end

S1 : begin

if ( cnt == 'd2 )

n_state = S2 ;

end

S2 : begin

if ( cnt == 'd4 )

n_state = S3 ;

end

S3 : begin

if ( cnt == 'd8 )

n_state = S4 ;

end

S4 : begin

if ( cnt == 'd15 )

n_state = IDLE ;

end

default : begin

n_state = IDLE ;

end

endcase

end

// 第三段 輸出

always @(posedge clk or posedge rst) begin

if (rst == 1'b1) begin

led <= 4'b0 ;

end

else begin

case ( n_state )

IDLE : led <= 4'b0 ;

S1 : led <= 4'd1 ;

S2 : led <= 4'd2 ;

S3 : led <= 4'd3 ;

S4 : led <= 4'd4 ;

default : begin

led <= 4'd0 ; ?

end

endcase

end

end

endmodule


仿真激勵代碼如下:

`timescale 1ns / 1ps

//////////////////////////////////////////////////////////////////////////////////

// Company:

// Engineer:

//

// Create Date: 2017/12/11 2030

// Design Name:

// Module Name: test

// Project Name:

// Target Devices:

// Tool Versions:

// Description:

//

// Dependencies:

//

// Revision:

// Revision 0.01 - File Created

// Additional Comments:

//

//////////////////////////////////////////////////////////////////////////////////

module test ;

reg clk ;

reg rst ;

initial begin

clk = 1'b0 ;

rst = 1'b1 ;

# 100

rst = 1'b0 ;

end

always # 5 clk = ~clk ;

TOP U_TOP (

.clk ( clk ) ,

.rst ( rst )

) ;

endmodule


上面組合邏輯環的代碼已經用紅色字體顯示。

先看前仿真結果:

2157f9ea-79b7-11ed-8abf-dac502259ad0.jpg

看不太清?讓我們再看一張圖。

2163d15c-79b7-11ed-8abf-dac502259ad0.png

狀態跳變正常,n_state[4:0]按照1、2、4、8、16、1......的順序重復跳變,沒有任何問題。

但在用FPGA工具(如vivado)進行綜合時,會報警告:

216f4186-79b7-11ed-8abf-dac502259ad0.jpg

但是上板抓取信號,發現狀態機異常跳轉,如下圖所示。

21809cc4-79b7-11ed-8abf-dac502259ad0.png

此時的n_state[4:0]信號跳變狀態為:1、2、4、8、9、1......,出現了9這樣的一個狀態!

此時,水落石出!出現組合邏輯環會給電路帶來嚴重問題!

而上面的例子是顯而易見的,一眼就能看出來,還有一些組合邏輯環,是在寫代碼時不小心引入的,并且是由多個always模塊組成的,這種組合邏輯環在綜合的時候也會報warning,必須要修改掉之后才能繼續后續工作。否則,等真正上板調試時,規模稍微大點的設計如果要定位到這個錯誤估計也得花掉好幾天的時間,所以代碼規范至關重要!

03

組合邏輯環的好處

在實際芯片設計中,也是不允許出現組合邏輯環的。但組合邏輯環能夠減少電路邏輯資源,降低電路功耗,具有很多優點。但是其難以被靜態時序分析工具分析和計算,且難以生成功能驗證向量和自動測試圖形向量.針對此問題,很多人都提出了多種組合邏輯環轉化方法,以解決硬件描述語言以及高級語言邏輯綜合階段所面臨的組合邏輯環拆分問題。


審核編輯 :李倩


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1629

    文章

    21736

    瀏覽量

    603318
  • Verilog
    +關注

    關注

    28

    文章

    1351

    瀏覽量

    110095
  • eda
    eda
    +關注

    關注

    71

    文章

    2759

    瀏覽量

    173263

原文標題:Verilog HDL描述的組合邏輯環在FPGA實現時到底有什么問題?

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Verilog 與 ASIC 設計的關系 Verilog 代碼優化技巧

    Verilog與ASIC設計的關系 Verilog作為一種硬件描述語言(HDL),ASIC設計中扮演著至關重要的角色。ASIC(Appli
    的頭像 發表于 12-17 09:52 ?112次閱讀

    Verilog與VHDL的比較 Verilog HDL編程技巧

    :由于其類似于 C 語言的語法,Verilog 代碼通常更易于閱讀和維護,尤其是處理復雜邏輯時。 VHDL :VHDL 的正式性和豐富
    的頭像 發表于 12-17 09:44 ?143次閱讀

    FPGA編程語言的入門教程

    FPGA(現場可編程邏輯門陣列)的編程涉及特定的硬件描述語言(HDL),其中Verilog和VHDL是最常用的兩種。以下是一個
    的頭像 發表于 10-25 09:21 ?259次閱讀

    Verilog HDL的基礎知識

    本文繼續介紹Verilog HDL基礎知識,重點介紹賦值語句、阻塞與非阻塞、循環語句、同步與異步、函數與任務語法知識。
    的頭像 發表于 10-24 15:00 ?394次閱讀
    <b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>的基礎知識

    FPGA Verilog HDL代碼如何debug?

    今天給大俠帶來FPAG技術交流群里平時討論的問題答疑合集(十一),以后還會多推出本系列,話不多說,上貨。 FPGA技術交流群目前已有十多個群,QQ和微信均覆蓋,需要的大俠可以進群,一起交流學習
    發表于 09-24 19:16

    FPGA算法工程師、邏輯工程師、原型驗證工程師什么區別?

    電路的設計和實現。他們使用硬件描述語言(如 Verilog 或 VHDL)來編寫代碼,構建復雜的數字邏輯系統。工作包括模塊的設計、功能的實現
    發表于 09-23 18:26

    FPGA芯片架構和資源深入的理解,精通Verilog HDL、VHDL

    、計算機相關專業,具有良好的專業基礎知識。 2.工作年限不限,工作經驗或優秀應屆畢業生亦可。 3.對FPGA芯片架構和資源深入的理解,精通Verilog
    發表于 09-15 15:23

    FPGA Verilog HDL什么奇技巧?

    相加去乘? A:硬件乘法器具有重要意義,主要體現在以下幾個方面: 速度優勢:在數字電路中,直接使用移位相加的方法實現乘法速度上通常比通過軟件或簡單的邏輯運算(如在 Verilog
    發表于 09-12 19:10

    FPGA設計中 Verilog HDL實現基本的圖像濾波處理仿真

    今天給大俠帶來FPGA設計中用Verilog HDL實現基本的圖像濾波處理仿真,話不多說,上貨。 1、用matlab代碼,準備好把圖片轉化成Vivado Simulator識別的
    發表于 05-20 16:44

    什么好用的verilog HDL編輯工具可用?

    什么好用的verilog HDL編輯工具可用?最好能集成實時的verilog HDL語法檢測、自定義模塊識別觸發等功能,最好能夠免費;
    發表于 04-28 11:00

    讀《FPGA入門教程》

    設計的代碼風格明顯差異,特別是功耗、速度、時序等要求上。例如ASIC設計中根據要求會有意識地采用某些組合邏輯、門控時鐘等,以降低功耗或提高速度。 第三章詳細介紹了
    發表于 03-29 16:42

    fpga是用c語言還是verilog

    FPGA(現場可編程邏輯門陣列)開發主要使用的編程語言是硬件描述語言(HDL),其中Verilog是最常用的編程語言之一。而C語言通常用于傳
    的頭像 發表于 03-27 14:38 ?1999次閱讀

    fpga通用語言是什么

    FPGA(現場可編程門陣列)的通用語言主要是指用于描述FPGA內部邏輯結構和行為的硬件描述語言。目前,V
    的頭像 發表于 03-15 14:36 ?513次閱讀

    fpga芯片工作原理 fpga芯片哪些型號

    部分。這些部分共同構成了FPGA的基本結構,使其具有高度的靈活性和可配置性。 FPGA中,小型查找表(LUT)是實現組合
    的頭像 發表于 03-14 17:17 ?1505次閱讀

    fpga用的是什么編程語言 fpga用什么語言開發

    fpga用的是什么編程語言 FPGA(現場可編程邏輯門陣列)主要使用的編程語言是硬件描述語言(HDL)。
    的頭像 發表于 03-14 17:09 ?3506次閱讀
    主站蜘蛛池模板: 午夜国产高清精品一区免费| 四虎精品影院4hutv四虎| 天天久久影视色香综合网| 四虎在线永久免费视频网站| 色.com| 国产高清在线视频| 久久综合色播| 2021成人国产精品| 两性色视频| 又大又粗进出白浆直流动态图| 国产精品看片| 午夜爱爱免费视频| 国产papa| 欧美肥胖女人bbwbbw视频| 日本一区二区三区在线 视频观看免费 | 喷潮白浆| 99久久国产免费 - 99久久国产免费| 男女免费网站| 在线观看免费高清| 国产精品区在线12p| 日韩精品午夜| 藏经阁在线观看| 日本69xxxx| 日韩三级一区| 手机在线看福利| 27pao强力打造高清免费高| 色视频在线网站| 天堂资源地址在线| aaaaa级毛片免费视频| 国产裸体美女视频全黄| 欧美性猛交xxxx黑人喷水| 日韩高清性爽一级毛片免费| 天天色操| 亚洲无线视频| 精品三级三级三级三级三级| 天天摸夜夜添夜夜添国产| 久久精品国产99国产精品免费看| 日本特黄特色大片免费播放视频| 手机看片1024欧美| 亚洲精品黄色| 午夜精品福利视频|