在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
答案 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等。