如何避免verilog中的多个常量驱动程序
我在如何避免verilog中的多个常量驱动程序,verilog,system-verilog,Verilog,System Verilog,我在初始块中有一些变量 initial begin i = 32'b0; j = 32'b1; end 我想在每次按下按钮时用这样的初始值初始化它们 always @(posedge btn) begin i = 32'b0; j = 32'b1; end 这样做会导致错误“无法解析多个常量驱动程序”,我知道为什么会发生这种情况,但是,还有其他方法吗???听起来您正在创建可合成代码(基于您需要按下按钮的情况)。初始块不合成为逻辑,它
初始
块中有一些变量
initial
begin
i = 32'b0;
j = 32'b1;
end
我想在每次按下按钮时用这样的初始值初始化它们
always @(posedge btn)
begin
i = 32'b0;
j = 32'b1;
end
这样做会导致错误“无法解析多个常量驱动程序”,我知道为什么会发生这种情况,但是,还有其他方法吗???听起来您正在创建可合成代码(基于您需要按下按钮的情况)。初始块不合成为逻辑,它们仅用于模拟。通常使用重置信号来设置初始值 此外,您通常希望将任何一个信号的逻辑保留在单个块中,而不是将其分为单独的块。(同样,这是针对可合成代码的,对于模拟而言,这并不重要) 最后,您通常不希望使用外部异步信号为某些逻辑计时(除非您知道自己在做什么)。您可以编写如下代码:
//---- detect rising edge of btn ----
reg btn_prev;
wire rising_edge_btn;
always @(posedge clk)
btn_prev <= btn;
assign rising_edge_btn = ~btn_prev & btn;
// ---- i and j logic --------------
always @(posedge clk) begin
if( rst || rising_edge_btn) begin
i <= 0;
j <= 1;
end
else
//some other logic here
end
end
/----检测btn的上升沿----
注册btn_prev;
电线上升沿;
始终@(posedge clk)
btn_prev哪个工具会给您错误?这里应该没有错误。