为什么 an 后面总是跟着 assign ?
Why is an always followed by assign?
这可能是一个要问的基本问题,但我在很多地方都看到过,但一直无法弄清楚为什么会这样。
always @(posedge clk)
a_temp <= so;
assign a = a_temp;
这里使用额外的 assign 语句的目的是什么?
关于 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
仍然连接到电线。
接口规范
更有经验的设计师可能会使用的另一种技术是修复界面。这样其他人连接块就有了一个固定的参考点,而不必处理设计师不断更改的名称。这允许设计人员为信号使用最合适的(语义)名称,使代码更具可读性,同时不受所选接口名称的约束。
这可能是一个要问的基本问题,但我在很多地方都看到过,但一直无法弄清楚为什么会这样。
always @(posedge clk)
a_temp <= so;
assign a = a_temp;
这里使用额外的 assign 语句的目的是什么?
关于 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
仍然连接到电线。
接口规范
更有经验的设计师可能会使用的另一种技术是修复界面。这样其他人连接块就有了一个固定的参考点,而不必处理设计师不断更改的名称。这允许设计人员为信号使用最合适的(语义)名称,使代码更具可读性,同时不受所选接口名称的约束。