<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 電源與新能源 > 牛人業(yè)話(huà) > 大神教你如何做好邏輯設計

大神教你如何做好邏輯設計

作者: 時(shí)間:2014-05-16 來(lái)源:網(wǎng)絡(luò ) 收藏

  規范很重要

本文引用地址:http://dyxdggzs.com/article/246996.htm

  工作過(guò)的朋友肯定知道,公司里是很強調規范的,特別是對于大的設計(無(wú)論軟件還是硬件),不按照規范走幾乎是不可實(shí)現的。邏輯設計也是這樣:如果不按規范做的話(huà),過(guò)一個(gè)月后調試時(shí)發(fā)現有錯,回頭再看自己寫(xiě)的代碼,估計很多信號功能都忘了,更不要說(shuō)檢錯了;如果一個(gè)項目做了一半一個(gè)人走了,接班的估計得從頭開(kāi)始設計;如果需要在原來(lái)的版本基礎上增加新功能,很可能也得從頭來(lái)過(guò),很難做到設計的可重用性。

  在邏輯方面,我覺(jué)得比較重要的規范有這些:

  1.設計必須文檔化。要將設計思路,詳細實(shí)現等寫(xiě)入文檔,然后經(jīng)過(guò)嚴格評審通過(guò)后才能進(jìn)行下一步的工作。這樣做乍看起來(lái)很花時(shí)間,但是從整個(gè)項目過(guò)程來(lái)看,絕對要比一上來(lái)就寫(xiě)代碼要節約時(shí)間,且這種做法可以使項目處于可控、可實(shí)現的狀態(tài)。

  2.代碼規范。

  a.設計要參數化。比如一開(kāi)始的設計時(shí)鐘周期是30ns,復位周期是5個(gè)時(shí)鐘周期,我們可以這么寫(xiě):

  parameter CLK_PERIOD = 30;

  parameter RST_MUL_TIME = 5;

  parameter RST_TIME = RST_MUL_TIME * CLK_PERIOD;

  ...

  rst_n = 1'b0;

  # RST_TIME rst_n = 1'b1;

  ...

  # CLK_PERIOD/2 clk <= ~clk;

  如果在另一個(gè)設計中的時(shí)鐘是40ns,復位周期不變,我們只需對CLK_PERIOD進(jìn)行重新例化就行了,從而使得代碼更加易于重用。

  b.信號命名要規范化。

  1) 信號名一律小寫(xiě),參數用大寫(xiě)。

  2) 對于低電平有效的信號結尾要用_n標記,如rst_n。

  3) 端口信號排列要統一,一個(gè)信號只占一行,最好按輸入輸出及從哪個(gè)模塊來(lái)到哪個(gè)模塊去的關(guān)系排列,這樣在后期仿真驗證找錯時(shí)后 方便很多。如:

  module a(

  //input

  clk,

  rst_n, //globle signal

  wren,

  rden,

  avalon_din, //related to avalon bus

  sdi, //related to serial port input

  //output

  data_ready,

  avalon_dout, //related to avalon bus

  ...

  );

  4) 一個(gè)模塊盡量只用一個(gè)時(shí)鐘,這里的一個(gè)模塊是指一個(gè)module或者是一個(gè)entity。在多時(shí)鐘域的設計中涉及到跨時(shí)鐘域的設計中最好有專(zhuān)門(mén)一個(gè)模塊做時(shí)鐘域的隔離。這樣做可以讓綜合器綜合出更優(yōu)的結果。

  5) 盡量在底層模塊上做邏輯,在高層盡量做例化,頂層模塊只能做例化,禁止出現任何膠連邏輯(glue logic),哪怕僅僅是對某個(gè)信號取反。理由同上。

  6) 在的設計上禁止用純組合邏輯產(chǎn)生latch,帶D觸發(fā)器的latch的是允許的,比如配置寄存器就是這種類(lèi)型。

  7) 一般來(lái)說(shuō),進(jìn)入的信號必須先同步,以提高系統工作頻率(板級)。

  8)所有模塊的輸出都要寄存器化,以提高工作頻率,這對設計做到收斂也是極有好處的。

  9) 除非是低功耗設計,不然不要用門(mén)控時(shí)鐘--這會(huì )增加設計的不穩定性,在要用到門(mén)控時(shí)鐘的地方,也要將門(mén)控信號用時(shí)鐘的下降沿 打一拍再輸出與時(shí)鐘相與。

  clk_gate_en -------- ----

  -----------------|D Q |------------------| gate_clk

  _out

  | | ---------| )--------

  -

  ------o|> | | | /

  clk | -------- | ----

  ------------------------------------

  10)禁止用計數器分頻后的信號做其它模塊的時(shí)鐘,而要用改成時(shí)鐘使能的方式,否則這種時(shí)鐘滿(mǎn)天飛的方式對設計的可靠性極為不利,也大大增加了靜態(tài)分析的復雜性。如的輸入時(shí)鐘是25M的,現在系統內部要通過(guò)RS232與PC通信,要以rs232_1xclk的速率發(fā)送數據。

  不要這樣做:

  always (posedge rs232_1xclk or negedge rst_n)

  begin

  ...

  end

  而要這樣做:

  always (posedge clk_25m or negedge rst_n)

  begin

  ...

  else if ( rs232_1xclk == 1'b1 )

  ...

  end

DIY機械鍵盤(pán)相關(guān)社區:機械鍵盤(pán)DIY


塵埃粒子計數器相關(guān)文章:塵埃粒子計數器原理

上一頁(yè) 1 2 3 下一頁(yè)

關(guān)鍵詞: FPGA 時(shí)序 電路

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>