【verilog语法】关于testbench与被测module的输入输出数据类型定义:reg/wire原因
testbench的輸入輸出數(shù)據(jù)類型正好與被測模塊相反
1、被測module中,輸入為wire,輸出為reg
輸入信號是由模塊外部決定的,輸入數(shù)據(jù)的狀態(tài)是變化的,與外部模塊是通過線連接,所以用wire,不用reg
2、testbench中,輸入為reg,輸出為wire
所謂寄存器類型就是暫存一個數(shù)據(jù),保持數(shù)據(jù)不變。
在testbenchb里定義的A,B輸出給被測模塊
因此對于testbench來說,A,B是輸出,數(shù)據(jù)需要存儲才能輸出給被測module,用reg型
在testbenchb里定義的result用來接收從被測模塊中輸入的數(shù)據(jù)
因此對于testbenchb來說,result是輸入,用導線與被測模塊連接,用wire型
也就是說,tb的輸出對應著被測模塊的輸入;tb的輸入對應著被測模塊的輸出
- 注意:只要是always塊內(nèi)部的變量輸出,都用reg型
代碼示例
文件名稱:alu_tb
`timescale 1ns/1ns //仿真時間單位/時間精度 `include "alu.v" module ALU_tb;reg [31:0] A;reg [31:0] B;reg [4:0] sl; //左移的位數(shù)reg [2:0] ALUctr; //3位ALU控制信號wire [31:0] Result; //wire zero; //零標志位ALU myalu(A,B,sl,ALUctr,Result,zero);always #2 A<=A+1;initialbegin A=32'hffff_fff0;B=0;sl=0;ALUctr=3'b010;#0 B<=1; //因為begin-end是串行,實際上是第5+5ns開始對b賦值endinitialbegin$monitor($time,,"%d + %d = %d",A,B,Result);#100$finish;end endmodulealways與reg辨析(轉(zhuǎn)自百度知道)
問:
verilog里面always與reg分別代表什么意思,有什么功用?
為什么只對輸出用reg,對輸入不用?
答:
首先搞清楚,verilog不是用來編程的軟件語言,不要老想著與C/C++對比。
其二,verilog是用來描述硬件的,也就是說你要做什么硬件,先要在腦筋里想好,做到胸有成竹以后,再用verilog描述出來。
有了以上概念,再來可以告訴你答案,你比較容易接受:
always是用來描述電平觸發(fā)的組合邏輯電路或鎖存器,還可以用來描述邊沿觸發(fā)的時序邏輯電路。
reg本來是用來描述寄存器輸出的,但實際上與verilog本身的語法有關(guān),這一點個人感覺verilog的語法并不嚴謹,至少讓初學者無所適從。這個語法是:只要是always塊內(nèi)部的變量輸出,都用reg型。但正如上面所說的,always塊并不總是時序邏輯,有時是組合邏輯,所以reg型變量有時候可能實際上是線網(wǎng)。
所謂寄存器類型就是暫存一個數(shù)據(jù),保持數(shù)據(jù)不變,而輸入數(shù)據(jù)的狀態(tài)是變化的,只能用作wier型。
由于輸入信號是由模塊外部決定的,與外部模塊是通過線連接的,所以用wire,不用reg。
總結(jié)
以上是生活随笔為你收集整理的【verilog语法】关于testbench与被测module的输入输出数据类型定义:reg/wire原因的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Verilog语法】PC-relatv
- 下一篇: 【Verilog语法】读文件