新聞中心

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

大神教你如何做好邏輯設(shè)計(jì)

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

  規(guī)范很重要

本文引用地址:http://butianyuan.cn/article/246996.htm

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

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

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

  2.代碼規(guī)范。

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

  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è)計(jì)中的時(shí)鐘是40ns,復(fù)位周期不變,我們只需對(duì)CLK_PERIOD進(jìn)行重新例化就行了,從而使得代碼更加易于重用。

  b.信號(hào)命名要規(guī)范化。

  1) 信號(hào)名一律小寫,參數(shù)用大寫。

  2) 對(duì)于低電平有效的信號(hào)結(jié)尾要用_n標(biāo)記,如rst_n。

  3) 端口信號(hào)排列要統(tǒng)一,一個(gè)信號(hào)只占一行,最好按輸入輸出及從哪個(gè)模塊來(lái)到哪個(gè)模塊去的關(guān)系排列,這樣在后期仿真驗(yàn)證找錯(cuò)時(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è)計(jì)中涉及到跨時(shí)鐘域的設(shè)計(jì)中最好有專門一個(gè)模塊做時(shí)鐘域的隔離。這樣做可以讓綜合器綜合出更優(yōu)的結(jié)果。

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

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

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

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

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

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

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

  _out

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

  -

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

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

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

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

  不要這樣做:

  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機(jī)械鍵盤相關(guān)社區(qū):機(jī)械鍵盤DIY


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

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

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

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉