微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > verilog中,module一开始声明I/O时,output和reg连用是什么意思?

verilog中,module一开始声明I/O时,output和reg连用是什么意思?

时间:10-02 整理:3721RD 点击:
以下是quartus ii中一个verilog template的一部分

  1. module unsigned_multiply_with_input_and_output_registers
  2. #(parameter WIDTH=8)
  3. (
  4.         input clk,
  5.         input [WIDTH-1:0] dataa,
  6.         input [WIDTH-1:0] datab,
  7.         output reg [2*WIDTH-1:0] dataout //问题就在这里...
  8. );
  9. //...

  10. endmodule

复制代码


以前没见过 output reg 这种连用的表示,我对此的臆测是,它等价于下面的代码:

  1. module unsigned_multiply_with_input_and_output_registers
  2. #(parameter WIDTH=8)
  3. (
  4.         input clk,
  5.         input [WIDTH-1:0] dataa,
  6.         input [WIDTH-1:0] datab,
  7.         output  [2*WIDTH-1:0] dataout //先声明 output 变量
  8. );  reg [2*WIDTH-1:0] dataout;//再声明 reg 同名变量  //...

复制代码


请问这样理解对吗?如果不对,这种连用是什么意思?

这是verilog-2002规范

这是verilog2001的语法。
你不觉得你写的第二段代码很冗长吗?一个端口为什么要分两行来写呢?在verilog95里甚至要用3行写。
所以verilog2001引入了这种类似C的定义方法,一句话就把端口所有的属性全交代清楚了。

lz猜对 了。



    连verilog95的细节都有了解,想必是为老前辈了,我是新手,多谢您的指教

verilog 2001的syntax。

hao  a   hao  hao hoa

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top