Verilog中的矢量分配

时间:2017-09-19 04:24:05

标签: verilog

这是我第一次尝试使用verilog。 我通过以下方式定义了一个8位双向端口,一个数据寄存器和一个数据方向寄存器:

inout [7:0] pa;  //  8-bit bidirectional parallel port
reg [7:0] data_reg;
reg [7:0] data_dir_reg; // 0 --> input; 1 --> output

assign pa [7] = (data_dir_reg [7]) ? data_reg [7] : 1'bZ;
assign pa [6] = (data_dir_reg [6]) ? data_reg [6] : 1'bZ;
assign pa [5] = (data_dir_reg [5]) ? data_reg [5] : 1'bZ;
assign pa [4] = (data_dir_reg [4]) ? data_reg [4] : 1'bZ;
assign pa [3] = (data_dir_reg [3]) ? data_reg [3] : 1'bZ;
assign pa [2] = (data_dir_reg [2]) ? data_reg [2] : 1'bZ;
assign pa [1] = (data_dir_reg [1]) ? data_reg [1] : 1'bZ;
assign pa [0] = (data_dir_reg [0]) ? data_reg [0] : 1'bZ;

它完美无缺,但是,我确信,必须有一种更简单的方法来实现相同的结果。

我尝试过for循环:

integer i;

for (i = 0; i < 8; i = i + 1)
  begin
    assign pa [i] = (data_dir_reg [i]) ? data_reg [i] : 1'bZ;
  end

以及一次分配整个矢量:

assign pa [7:0] = (data_dir_reg [7:0]) ? data_reg [7:0] : {8{1'bZ}}[7:0];

没有任何结果。 谢谢你的帮助。

卢卡

1 个答案:

答案 0 :(得分:1)

你想要一个generate-for循环。

genvar i;
for (i = 0; i < 8; i = i + 1)
  begin
    assign pa [i] = (data_dir_reg [i]) ? data_reg [i] : 1'bZ;
  end

这会展开你最初写的内容。