FPGA参数定义 regwire 详解
在寫FPGA代碼進行參數(shù)類型定義時,對于寫reg還是wire常常叫人迷惑,下面我將分為以下三種情況,詳細解釋如何定義參數(shù)類型
目錄
一 、輸入輸出定義
二 、例化定義
三 、 仿真定義
一 、輸入輸出定義
輸入輸出定義是指,在寫程序的時候,向各個程序模塊里面輸入和輸出某些參數(shù),例如下面的流水燈程序,PLL,time,water_led三個模塊分別有不同的輸入輸出
針對這種情況應(yīng)該這樣定義
input 都為wire型;
output 若在always塊下定義為reg型,寫作output reg xxxxx
(不加reg默認wire,不用寫output wire xxxx)
(原因:在設(shè)計中,輸入信號一般來說你是不知道上一級是寄存器輸出還是組合邏輯輸出,那么對于本級來說就是一根導(dǎo)線,也就是wire型。而輸出信號則由你自己來決定是寄存器輸出還是組合邏輯輸出,wire型、reg型都可以。always塊下面進行賦值時,參數(shù)相當(dāng)于被寄存器寄存,所以需要寫reg型)
二 、例化定義
這種情況是指,top層匯總各個模塊時進行的例化,如上面的圖就是system上需要例化PLL,time,water_led三個模塊
針對這種情況應(yīng)該這樣定義:
首先top層的輸入和輸出依然按照上面的定義方法寫
把不包含在輸入輸出里的參數(shù)(如上面的圖就是clk_25m,locked,time_en)挑出來,寫wire型
(原因:例化時,可以把里面的參數(shù)都當(dāng)做信號線,只有連接作用)
三 、 仿真定義
這種情況是指在寫TB文件的時候進行參數(shù)定義
首先說一下寫TB文件的過程,TB文件可以測試小模塊也可以測試top層,比如我要測試time模塊,那么我就需要把time模塊的輸入輸出復(fù)制到TB文件里面,也就是module后面的(....);
復(fù)制過去按照例化的步驟進行例化
先將模塊里面為input的變量寫reg型,為output的變量寫wire型
(注意不要忘寫位寬,reg[ x:x]? wire[ x:x])
但是有些時候會報錯,所以按照上面的方法寫完之后需要進行一些檢測修改:
TB文件里面的參數(shù)在initial進行賦值的寫reg型,其他的寫wire型
?然后就沒有問題了
輸入輸出定義,例化定義,仿真定義已經(jīng)幾乎包含了FPGA里面所有的參數(shù)定義情況,按照我上面的方法定義不會有問題,下面來介紹一下原理:
Verilog 中變量的物理數(shù)據(jù)分為線型和寄存器型,線型數(shù)據(jù)包括wire,wand,wor等幾種類型,其中wire最常用,對應(yīng)于實際的數(shù)字電路,線型wire實際上就對應(yīng)著硬件的連線,起到連接作用。寄存器是存儲單元的抽象,寄存器數(shù)據(jù)類型的關(guān)鍵字是reg。常用來表示always模塊內(nèi)的指定信號,代表觸發(fā)器。在always模塊內(nèi)被賦值的每一個信號都必須定義成reg型。
所以reg相當(dāng)于存儲單元,wire相當(dāng)于物理連線
在需要賦值計算的時候就用reg,只是連接作用就用wire
總結(jié)
以上是生活随笔為你收集整理的FPGA参数定义 regwire 详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机专业技能考核方案,巩义市计算机专业
- 下一篇: 双绞线的标准做法