終於 發問時間: 電腦與網際網路程式設計 · 1 0 年前

如何寫VHDL程式 才能減少暫存器的產生

請問一下怎樣的VHDL程式,在合成電路時會產生暫存器?

我用的是Xilinx ISE 7.1i,寫完程式後想看到合成後的電路

我指的是組合電路不是序向電路

好像我按View RTL Schematic 會產生序向電路

按View Technology Schematic會產生8個子圖

不知道它代表的意義

這方面我還滿沒有概念的,希望清楚這方面的人能給我個方向

已更新項目:

我遇到的問題就像你寫的,因為我是寫時鐘程式

所以我大量用了

process(clk,reset,start)

begin

.

.

elseif clk'event and clk='1' then

有其他發法能取代這種寫法且避免暫存器的產生呢?

?

還有你所說的任何 process ,指的是指又用到process 就會有暫存器的問題嗎?

2 個已更新項目:

if (rising_edge(clk) and start='1')then

我的系統clock是外部給的(我的設定是2Hz方波)

而我ㄧ定要正緣處發也就是說我需要rising_edge(clk) 此指令的功能

但聽你解說後 ,好像只要有這個指令就會產生暫存器

這是不可避免的還是有其他指令代替此功能而不會產生暫存器

我翻了幾本書都沒有什麼發現

感謝你的解答!

2 個解答

評分
  • 1 0 年前
    最佳解答

    VHDL 之所以會被合成暫存器

    通常只有兩種原因

    1. 任何 process 像是這樣

    process(clk,reset)

    begin

    .

    .

    elseif clk'event and clk='1' then

    .

    .

    end

    都是會被合成 registers. 少用這樣的 statement

    registers 就會減少

    缺點是 這樣表示這個電路組合邏輯會很多 速度較慢

    要看你的 target speed 是多少

    2. 不完整的 if-else 或是 case 程序

    都會被合成 Latch. 這種情形通常是不小心的

    在用 if-else 或是 case 的時候

    只要確定你考慮到每一種可能性 不要漏掉任何可能的

    assignment. 就應該不會有這一類的問題

    這兩個原則是很一般性的

    有可能你的問的不是這個 那就對不起 誤解了你的問題

    2008-10-01 04:09:30 補充:

    Process 不一定會被(synthesized to)合成暫存器 (register). 除非裡頭有

    clk'event 的敘述. Process 可以是純組合電路(combinational logic)

    也可以是序向(sequential)電路 如同原本的那個有 clk'event 的 process.

    至於你的時鐘程式 這樣說好了 你的程式碼裡面 應該只有計數器(counter)會是暫存器

    因為要計算時脈 (counting clocks) 其他的部分應該不用

    你手邊有VHDL/Verilog的書嗎 可以參考一下各種不同的

    Finite State Machine 的寫法

    2008-10-01 16:01:00 補充:

    我愈看你的補充 愈覺得不太對勁

    時鐘程式一定需要暫存器 只是多和少

    你的合成電路一定會包含組合電路和序向電路才會動。

    這樣說好了 像一個加法器 就不用clock rising edge產生 但是需要一定數量的暫存器來記錄結果。合成器是完全依照你的coding style 來運作的 沒有clock rising edge的敘述

    2008-10-01 16:09:41 補充:

    就不會有暫存器

    你要不要再仔細想一下 那些是輸入 那些是輸出

    還有那些是內部控制訊號 再來寫code 就比較不會搞錯

    什麼process要clock rising edge. process

    2008-10-01 16:11:02 補充:

    什麼process不

    參考資料: 自己
  • ?
    Lv 6
    1 0 年前

    "RTL Schematic"是指VHDL經過合成之後的一般邏輯電路圖,它忠實的反應了哪裡有一個AND閘、或哪裡有一個正反器等等。

    "Technology Schematic"是指"RTL Schematic"經過對應到目標IC之後的線路圖,例如我們的目標IC只有4輸入的AND閘,那RTL裡頭的二輸入AND閘將全部轉換成4輸入的AND閘。

    2008-10-01 05:31:54 補充:

    是否合成暫存器、有多少暫存器,並不是問題,重點是描述的內容要符合大大的需求,建議寫完VHDL碼之後,一定要先跑Simulation,以便確認功能。

    合成的線路,合成器的想法,很難與人的想法一致。

    請參考!

還有問題?馬上發問,尋求解答。