2009年5月30日 星期六

wire v.s. reg...

記錄...
轉載自網路:

簡單來說硬體描述語言有兩種用途:1. 仿真,2. 綜合
對於wirereg,也要從這兩個角度來考慮:
--------------------------------------------------------------------------------------------

仿真的角度來說,HDL語言面對的是編譯器 (如Modelsim等),相當於軟體思路
這時:
wire對應於連續賦值,如assign
reg對應於過程賦值,如always、initial
--------------------------------------------------------------------------------------------

綜合的角度來說,HDL語言面對的是綜合器 (如DC等),要從電路的角度來考慮。
這時:
1. wire變數綜合出來一般是一根導線
2. reg變數在always區塊中有兩種情況:
(1). always後是 (a or b or c) 型式的,也就是不帶Clock Edge
綜合出來還是組合邏輯電路 (Combinational Logic)
(2). always後是 (posedge clk) 型式的,也就是帶Clock Edge
綜合出來一般是循序邏輯電路 (Sequential Logic),會包含觸發器 (Flip-Flop)

在設計中:
1. 輸入信號一般來說你是不知道上一級是暫存器輸出還是組合邏輯輸出
=> 那麼對於本級來說就是一根導線,也就是wire型
2. 而輸出信號則由你自己來決定是組合邏輯輸出還是暫存器輸出
=> wire型reg型都可以
3. 但一般的,整個設計的外部輸出 (即最頂層module的輸出),要求是暫存器輸出
=> 也就是reg型,較穩定、扇出能力也較好

以上轉載自
--------------------------------------------------------------------------------------------

大體上來說wirereg都類似於C/C++的變數

但若此變數要放在:
begin...end內
,該變數須使用reg
begin...end外,則該變數須使用wire

另外使用wire時,須搭配assignreg不必

inputouputinout預設值都是wire

wirereg用錯地方,compiler都會提醒,所以不必太擔心

一個很重要的觀念:
在Verilog中使用reg,並不表示合成後就是暫存器(register)
1. 若在組合邏輯電路 (Combinational Logic)中使用reg,合成後仍只是net
2. 在循序邏輯電路 (Sequential Logic)中使用reg,合成後才會以flip-flop型式表示成暫存器(register)

以上轉載自

沒有留言: