这可能是一个要问的基本问题,但我已经看过很多地方,并且无法弄清楚为什么会这样。
always @(posedge clk)
a_temp <= so;
assign a = a_temp;
在这里使用额外的assign语句的意图是什么?
答案 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
仍然连接到电线。
可能与更有经验的设计师一起使用的另一种技术是修复界面。因此,其他布线块有一个固定的参考点,而不必处理设计师不断更改的名称。这允许设计人员为信号使用最合适的(语义)名称,使代码更具可读性,同时不依赖于所选择的接口名称。