为什么总是随后分配?

时间:2015-01-04 18:00:25

标签: verilog system-verilog

这可能是一个要问的基本问题,但我已经看过很多地方,并且无法弄清楚为什么会这样。

always @(posedge clk)
  a_temp <= so;

assign a = a_temp;

在这里使用额外的assign语句的意图是什么?

1 个答案:

答案 0 :(得分:3)

似乎对verilog类型的工作方式存在常见的误解,即如果模块端口连接到线路,则必须将端口定义为模块内的线路。所以你经常得到:

module example (
  output wire a_wire
);

  reg a_reg;

  always @(posedge clk) begin
    a_reg <= so;
  end

  assign a_wire = a_reg;
endmodule

可能只是:

module example (
  output reg a_reg
);

always @(posedge clk) begin
  a_reg <= so;
end
endmodule

在层次结构的下一级a_reg仍然连接到电线。

接口规范

可能与更有经验的设计师一起使用的另一种技术是修复界面。因此,其他布线块有一个固定的参考点,而不必处理设计师不断更改的名称。这允许设计人员为信号使用最合适的(语义)名称,使代码更具可读性,同时不依赖于所选择的接口名称。