如何使用regs修改电线?

How to use regs to modify wires?

我是 Verilog 的新手,想知道如何修改连线。我知道你不能修改 always 块中的电线。

我见过这样的事情,您可以在其中声明一些 regs 并将线路分配给这些 regs(然后您可以修改 reg 来修改线路?)

module something
#(parameter D_W = 8)
(
    input  wire clk,
    input  wire rst,

    output wire valid,
    output wire [D_W-1:0] data,
);

reg valid_rg = 0;
reg [D_W-1:0] data_rg = 0;
    
assign valid = valid_rg;
assign data  = data_rg;

我想知道如何为这样的电线做类似的事情:

wire    [7:0] wire_a  [7:0];

最初我的猜测是有这样的东西

reg [7:0] wire_a_rg [7:0];
assign wire_a[7:0] = wire_a_rg[7:0];

但我觉得这可能是错误的。我该如何处理?

除非您需要对 bi-directional 总线或具有多个驱动器的任何类型的电路建模,否则无需在 SystemVerilog 中使用连线。你可以写

module something
#(parameter D_W = 8)
(
    input  logic clk,
    input  logic rst,

    output logic valid,
    output logic [D_W-1:0] data,
);

然后您可以在 always 块或连续的 assign 语句(但不是两者)中对 valid/data 进行程序分配。

顺便说一句,SystemVerilog 更喜欢使用 logic 关键字而不是同义词 reg.

你应该阅读我关于 the difference between nets and variables 的 post。