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