如何修改Verilog代码以避免多个驱动程序?

时间:2016-06-06 08:26:52

标签: verilog fpga

Quartus 11.0说:

  

错误(10028):无法解决网络的多个常量驱动因素[9]"

代码如下:

module make_counter(h, clk, P);

input wire h;
input wire clk; 
output wire P;
reg r=1'b1;
reg[9:0] n=10'b0000000000;

always @(posedge h)
begin
    n<=0;
end

always @(negedge clk)
begin
if(n<600) 
    n<=n+1'b1;

if(n==106)  
    r<=1'b0;
else if(n==517)  
    r<=1'b1;
else;
end
assign P=r;

endmodule

########### image is here ###########

图像是我想要的。当flag1开始设置n = 0,并计数clk;   当count到flag2时,设置P = 0;当计数到红色箭头时,设置P = 1;

4 个答案:

答案 0 :(得分:0)

正如警告所示,n[9]有多个驱动程序,实际上nr都有,nr都被驱动在initialalways中,在合成设计时,reg只能有一个驱动程序。 n由多个always块驱动。

对于综合,reg应该只从一个always块驱动。

对于驱动n的多个始终块,只将它们组合成一个,并且只使用一个时钟,例如clk

如果目的是为nr指定默认值,请在声明中进行设置,然后删除initial,如:

reg r = 1'b1;
reg[9:0] n = 0;

但是,如果可能,请考虑添加复位信号,然后使用此复位信号将复位值同步或异步地分配给寄存器。

答案 1 :(得分:0)

假设hclk同步,只需抽样h并找出样本值何时为低且当前值为高(例如h上升)。这种方式n在一个始终块(这是合成所需)内分配,并且所有内容都是相同的时钟域。

always @(negedge clk) begin
  past_h <= h;
  if(!past_h && h) begin // detect 0->1
    n <= 10'h000;
  end
  else begin
    n <= n + 1'b1;
  end
end

如果h是异步的,那么保持信号清洁会变得更加复杂。在这种情况下,我建议阅读Cliff Cummings的Clock Domain Crossing (CDC) Design & Verification Techniques

答案 2 :(得分:0)

您可以尝试将posege h移动到与negedge Clock相同的总是块中,并根据输入逻辑对h和clk进行采样。如果h在忽略clk之前变低,则可能会发生这种情况。

driver.get ("https://example.com")

driver.switch_to.window(driver.window_handles[1])
wait = WebDriverWait(driver, 30)
abc = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,, ".blue > .fa")))
abc.click()

actionChains = ActionChains(driver)
element = driver.find_element_by_id("myid")
actionChains.move_to_element(element).perform();

答案 3 :(得分:-1)

我认为它会帮助你。我已经在xilinx 14.5中完成了这个合成。

    module make_counter(h, clk, P);
    input wire h;
    input wire clk; 

output wire P;
reg r=1'b1;
reg[9:0] n=10'b0000000000;


task cpu_write;
   begin
      @ (posedge h);
    n <= 0;
      @ (posedge clk);
      if(n<600) 
    n<=n+1'b1;
    if(n==106)  
        r<=1'b0;
    else if(n==517)  
        r<=1'b1;
    else;
    end
  endtask
assign P=r;

endmodule