verilog中,module一开始声明I/O时,output和reg连用是什么意思?
时间:10-02
整理:3721RD
点击:
以下是quartus ii中一个verilog template的一部分
以前没见过 output reg 这种连用的表示,我对此的臆测是,它等价于下面的代码:
请问这样理解对吗?如果不对,这种连用是什么意思?
- module unsigned_multiply_with_input_and_output_registers
- #(parameter WIDTH=8)
- (
- input clk,
- input [WIDTH-1:0] dataa,
- input [WIDTH-1:0] datab,
- output reg [2*WIDTH-1:0] dataout //问题就在这里...
- );
- //...
- endmodule
以前没见过 output reg 这种连用的表示,我对此的臆测是,它等价于下面的代码:
- module unsigned_multiply_with_input_and_output_registers
- #(parameter WIDTH=8)
- (
- input clk,
- input [WIDTH-1:0] dataa,
- input [WIDTH-1:0] datab,
- output [2*WIDTH-1:0] dataout //先声明 output 变量
- ); reg [2*WIDTH-1:0] dataout;//再声明 reg 同名变量 //...
请问这样理解对吗?如果不对,这种连用是什么意思?
这是verilog-2002规范
这是verilog2001的语法。
你不觉得你写的第二段代码很冗长吗?一个端口为什么要分两行来写呢?在verilog95里甚至要用3行写。
所以verilog2001引入了这种类似C的定义方法,一句话就把端口所有的属性全交代清楚了。
lz猜对 了。
连verilog95的细节都有了解,想必是为老前辈了,我是新手,多谢您的指教
verilog 2001的syntax。
hao a hao hao hoa
