在Verilog中声明一个端口,其中一些位是输入,有些是输出

时间:2019-08-02 10:00:32

标签: verilog fpga quartus

在Cyclone 3的Verilog中,我想声明一个端口,其中一些引脚是输入,有些是输出,在Web的许多示例中,我看到端口的定义类似于

input wire [0:10]p;

但是如果我需要bit0作为IC的输入而其他人作为输出时该怎么办。尝试过这种方式和其他一些不同的变体,但是每次我从编译器中收到错误时。请注意,IO [1]在代码中未使用,但在“赋值编辑器”中存在。

module main(
      tx,
      rx,
      IO[0],
      IO[2]
     );
output wire tx;
input wire rx;
input wire IO[0];
output wire IO[2];

assign IO[2] = rx;
assign tx = IO[0];

endmodule

3 个答案:

答案 0 :(得分:2)

您可以使用 port_expression 。这会将端口的名称与连接到该端口的信号(或信号表示)分开。创建模块实例时,您可能会认识到这种语法,但是在Verilog中,该语法也始终可用于模块声明

module m(input .rx(a[0]), output .tx(a[1]));

  wire [1:0] a;
endmodule

module top;
  wire  a,b;  
  m m1(.rx(a),.tx(b));
endmodule

答案 1 :(得分:1)

在verilog中无法对单个矢量端口的不同位声明不同的方向。该方向适用于整个港口的申报。唯一的方法是将单个端口拆分为多个名称不同的端口,例如

 module main(
  output wire tx,
  input wire rx,
  output wire out,
  input wire in
 );

然后,在实例化它时,您可以定义哪些位会到达哪里:

 main inst(.tx(tx), .rx(rx), .out(IN[0]), .in(IN[2]);

答案 2 :(得分:1)

由于顶级模块本身并未实例化,因此似乎无法在此处使用端口表达式。

您应该尝试的一件事是更改要加载到Quartus中以对fpga进行编程的引脚分配文件(我认为是.csv)中的引脚名称。在此处给不同的引脚指定不同的名称,例如不是In [0]或In [1],而是in0,in1等。