VHDL輸出端口std_logic_vector什么時候綜合為寄存器輸出?


1.信號 

    信號是描述硬件系統的基本數據對象,它的性質類似於連接線。信號可以作為設計實

體中並行語句模塊間的信息交流通道。
      信號作為一種數值容器,不但可以容納當前值,也可以保持歷史值(這決定於語句的
表達方式)。這一屬性與觸發器的記憶功能有很好的對應關系,只是不必注明信號上數據流
動的方向。信號定義的語句格式與變量相似,信號定義也可以設置初始值,定義格式是:
   SIGNAL 信號名: 數據類型 := 初始值 ;
      同樣,信號初始值的設置也不是必需的,而且初始值僅在 VHDL 的行為仿真中有效。
與變量相比,信號的硬件特征更為明顯,它具有全局性特征。例如,在實體中定義的信號,
在其對應的結構體中都是可見的,即在整個結構體中的任何位置,任何語句結構中都能獲
得同一信號的賦值。 

      此外還需要注意,信號的使用和定義范圍是實體、結構體和程序包,在進程和子程序

的順序語句中不允許定義信號。此外,在進程中只能將信號列入敏感表,而不能將變量列
入敏感表。可見進程只對信號敏感,而對變量不敏感,這是因為只有信號才能把進程外的
信息帶入進程內部,或將進程內的信息帶出進程。

2. 信號與端口

      事實上,除了沒有方向說明以外,信號與實體的端口(Port)概念是一致的。對於端口來
說,其區別只是輸出端口不能讀入數據,輸入端口不能被賦值。信號可以看成是實體內部(設
計芯片內部)的端口。反之,實體的端口只是一種隱形的信號,在實體中對端口的定義實質
上是作了隱式的信號定義,並附加了數據流動的方向,而信號本身的定義是一種顯式的定
義。因此,在實體中定義的端口,在其結構體中都可以看成是一個信號,並加以使用,而
不必另作定義。
     

參考:http://eelab.jmu.edu.cn/_eelab2/jiangyi/EDA%E6%8A%80%E6%9C%AF%E4%B8%8EVHDL%E7%AC%AC5%E7%AB%A0.pdf

3. verilog中reg和wire類型的區別和用法 

reg相當於存儲單元,wire相當於物理連線 

Verilog 中變量的物理數據分為線型和寄存器型。這兩種類型的變量在定義時要設置位寬,缺省為1位。變量的每一位可以是0,1,X,Z。其中x代表一個未被預置初始狀態的變量或者是由於由兩個或多個驅動裝置試圖將之設定為不同的值而引起的沖突型線型變量。z代表高阻狀態或浮空量。 

線型數據包括wire,wand,wor等幾種類型在被一個以上激勵源驅動時,不同的線型數據有各自決定其最終值的分辨辦法。 

兩者的區別是:即存器型數據保持最后一次的賦值,而線型數據需要持續的驅動 

輸入端口可以由net/reg驅動,但輸入端口只能是net;輸出端口可以使net/reg類型,輸出端口只能驅動net;若輸出端口在過程塊中賦值則為reg型,若在過程塊外賦值則為net型用關鍵詞inout聲明一個雙向端口, inout端口不能聲明為寄存器類型,只能是net類型。

    wire表示直通,即只要輸入有變化,輸出馬上無條件地反映;reg表示一定要有觸發,輸出才會反映輸入。 

        不指定就默認為1位wire類型。專門指定出wire類型,可能是多位或為使程序易讀。wire只能被assign連續賦值,reg只能在initial和always中賦值。wire使用在連續賦值語句中,而reg使用在過程賦值語句中。 

        在連續賦值語句中,表達式右側的計算結果可以立即更新表達式的左側。在理解上,相當於一個邏輯之后直接連了一條線,這個邏輯對應於表達式的右側,而這條線就對應於wire。在過程賦值語句中,表達式右側的計算結果在某種條件的觸發下放到一個變量當中,而這個變量可以聲明成reg類型的。根據觸發條件的不同,過程賦值語句可以建模不同的硬件結構:如果這個條件是時鍾的上升沿或下降沿,那么這個硬件模型就是一個觸發器;如果這個條件是某一信號的高電平或低電平,那么這個硬件模型就是一個鎖存器;如果這個條件是賦值語句右側任意操作數的變化,那么這個硬件模型就是一個組合邏輯。 

        輸入端口可以由wire/reg驅動,但輸入端口只能是wire;輸出端口可以使wire/reg類型,輸出端口只能驅動wire;若輸出端口在過程塊中賦值則為reg型,若在過程塊外賦值則為net型。用關鍵詞inout聲明一個雙向端口, inout端口不能聲明為reg類型,只能是wire類型;輸入和雙向端口不能聲明為寄存器類型。 

       簡單來說硬件描述語言有兩種用途:1、仿真,2、綜合。 

對於wire和reg,也要從這兩個角度來考慮。 

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

從綜合的角度來說,HDL語言面對的是綜合器(如DC等),要從電路的角度來考慮。這時:1、wire型的變量綜合出來一般是一根導線;2、reg變量在always塊中有兩種情況:(1)、always后的敏感表中是(a or b or c)形式的,也就是不帶時鍾邊沿的,綜合出來還是組合邏輯(2)、always后的敏感表中是(posedge clk)形式的,也就是帶邊沿的,綜合出來一般是時序邏輯,會包含觸發器(Flip-Flop) 

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

參考:http://m.oschina.net/blog/96149

也就是說VHDL綜合出來輸出端口一定帶寄存器,Verilog不一定?   

不對   :不管是verilog 還是VHDL都要看輸出端口是時序電路驅動還是邏輯電路驅動,

即使     verilog   中定義了        output     reg      shuchu,    綜合后如果輸出信號shuchu是邏輯電路驅動,電路也沒有寄存器輸出

            VHDL     定義了     flash_en                : out     std_logic;    是不是寄存器輸出還是要看信號是由時序電路驅動還是邏輯電路驅動

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM