【问题标题】:Vector assignment in VerilogVerilog 中的向量分配
【发布时间】:2023-03-23 23:07:01
【问题描述】:

这是我第一次尝试使用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];

没有任何结果。 感谢您的帮助。

卢卡

【问题讨论】:

    标签: verilog


    【解决方案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
    

    这将展开为您最初编写的内容。

    【讨论】:

    • 非常感谢。我不知道 generate-for 循环,但在你的回答和更多阅读之后,我认为我已经了解了在编译时评估循环与运行时之间的区别。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多