相比`define的全局scope,“let” 可以只作用在局部scope。
“let”和`define一样也是定义了一个文本替换。
define是验证环境开发以及RTL开发过程中的一个非常常用的技巧,但是define是全局的,这是优点也是缺点,很容易就会对其他模块的验证环境产生干扰。
相比来说,“let” 的使用更加安全,因为“let”只会作用到局部。
module example; logic r1,r2, r3,r4,clk,clk1; let exDefLet = r1 || r2; always @ (posedge clk) begin: ablock let exDefLet = r1 & r2; r3=exDefLet; end always @ (posedge clk1) begin: bblock r4=exDefLet; end endmodule
就等价于
module example; logic r1,r2, r3,r4,clk,clk1; always @ (posedge clk) begin :ablock r3=r1 & r2; end always @ (posedge clk1) begin: bblock r4=r1 || r2 ; end endmodule
如果我们使用的是`define,而不是“let”。
module example; logic r1,r2, r3,r4,clk,clk1; `defne exDefLet r1 || r2; always @ (posedge clk) begin :ablock `defne exDefLet r1 & r2; r3=`exDefLet; end always @ (posedge clk1) begin: bblock r4=`exDefLet; end endmodule
后面的全局define会覆盖前面的define,那上面的例子就等价于
module example; logic r1,r2, r3,r4,clk,clk1; always @ (posedge clk) begin: ablock r3 = r1 & r2; end always @ (posedge clk1) begin: bblock r4 = r1 & r2; end endmodule
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !