Verilog 中的条目总是敏感度列表
Entries in Verilog always sensitivity list
在此找不到任何内容,它与关键字不匹配。我在某处遇到一个声明,将某些内容放在始终阻止的敏感列表中是不好的做法。根据声明,除 clk
和设备内的其他相关内部信号外,其他因素可能会导致路由效率低下。
我发现在编写相对较慢的应用程序时生成细分时钟信号并在 always 块中使用这些信号很方便。
例如:
reg Counter [12:0] ;
reg SlowClk ;
always @ (posedge clk)
begin
Counter <= Counter + 13'h1 ;
SlowClk <= Counter[12] ;
end
always @ (posedge SlowClk)
注意:我的文本条目每行一个语句,如果最后几行连接在一起post,那是网站的原因。
这有什么问题吗?
这没有错。如果设计需要分频时钟,我们必须这样做。
但最佳做法是将 en 信号用于时钟分频器,以便您可以在每个 always 块中使用相同的时钟。是的,在 clcok 潜水器中使用重置很好
(任何顺序的 ckt 都需要重置)。
reg Counter [12:0] ;
reg SlowClk ;
reg div_clk ;
wire en;
always @ (posedge clk)
begin
if(!reset)
Counter <= 13'h0;
else
Counter <= Counter + 13'h1;
end
assign en = (Counter ==13'h0)? 1'b1 : 1'b0;
always @ (posedge clk)
begin
if(!reset)
div_clk = 1'b0;
else(en)
div_clk <= ~div_clk;
end
是的,这确实是一种不好的做法。所以你可以做一些不同的事情来获得 SlowClk
优势。
你可以拿一根线来检测SlowClk
上升沿。
wire got_SlowClk_posedge;
现在要检测,SlowClk
,上升沿,你需要有它的当前和下一个时钟值(当前时钟值应该是 0,下一个时钟值应该是 1) 但幸运的是,在你的例子中,SlowClk
,下一个时钟值是 Counter[12]
的当前值。所以你可以使用它。
assign got_SlowClk_posedge = Counter[12] & ~SlowClk;
所以现在你的第二个 always 块可能看起来像这样:
// Instead of @(posedge SlowClk)
always @(posedge clk)
begin
if(got_SlowClk_posedge)
begin
// Your code for positive edge of SlowClk
end
end
在此找不到任何内容,它与关键字不匹配。我在某处遇到一个声明,将某些内容放在始终阻止的敏感列表中是不好的做法。根据声明,除 clk
和设备内的其他相关内部信号外,其他因素可能会导致路由效率低下。
我发现在编写相对较慢的应用程序时生成细分时钟信号并在 always 块中使用这些信号很方便。
例如:
reg Counter [12:0] ;
reg SlowClk ;
always @ (posedge clk)
begin
Counter <= Counter + 13'h1 ;
SlowClk <= Counter[12] ;
end
always @ (posedge SlowClk)
注意:我的文本条目每行一个语句,如果最后几行连接在一起post,那是网站的原因。
这有什么问题吗?
这没有错。如果设计需要分频时钟,我们必须这样做。 但最佳做法是将 en 信号用于时钟分频器,以便您可以在每个 always 块中使用相同的时钟。是的,在 clcok 潜水器中使用重置很好 (任何顺序的 ckt 都需要重置)。
reg Counter [12:0] ;
reg SlowClk ;
reg div_clk ;
wire en;
always @ (posedge clk)
begin
if(!reset)
Counter <= 13'h0;
else
Counter <= Counter + 13'h1;
end
assign en = (Counter ==13'h0)? 1'b1 : 1'b0;
always @ (posedge clk)
begin
if(!reset)
div_clk = 1'b0;
else(en)
div_clk <= ~div_clk;
end
是的,这确实是一种不好的做法。所以你可以做一些不同的事情来获得 SlowClk
优势。
你可以拿一根线来检测SlowClk
上升沿。
wire got_SlowClk_posedge;
现在要检测,SlowClk
,上升沿,你需要有它的当前和下一个时钟值(当前时钟值应该是 0,下一个时钟值应该是 1) 但幸运的是,在你的例子中,SlowClk
,下一个时钟值是 Counter[12]
的当前值。所以你可以使用它。
assign got_SlowClk_posedge = Counter[12] & ~SlowClk;
所以现在你的第二个 always 块可能看起来像这样:
// Instead of @(posedge SlowClk)
always @(posedge clk)
begin
if(got_SlowClk_posedge)
begin
// Your code for positive edge of SlowClk
end
end