Как исправить ошибку [ICPSD] Неверная комбинация драйверов?

Я пытаюсь отлаживать свой код, показанный ниже. Я новичок в SystemVerilog и, надеюсь, смогу извлечь из этого уроки. Дайте мне знать о любых предложениях.

** Ошибки, которые я получаю:

  Error-[ICPSD] Invalid combination of drivers
  Variable "Q" is driven by an invalid combination of structural and 
  procedural drivers. Variables driven by a structural driver cannot have any 
  other drivers.
  "divide.v", 13: logic [7:0] Q;
  "divide.v", 16: divide8bit testcase1(x, y, clk, Q, R);
  "divide.v", 23: Q = 8'b0;

  Error-[ICPSD] Invalid combination of drivers
  Variable "R" is driven by an invalid combination of structural and 
  procedural drivers. Variables driven by a structural driver cannot have any 
  other drivers.
  "divide.v", 13: logic [7:0] R;
  "divide.v", 16: divide8bit testcase1(x, y, clk, Q, R);
  "divide.v", 24: R = y;

**Мой код SystemVerilog:

module divide8bit(
  input logic [7:0] x,y,
  input logic clk,
  output logic [7:0] Q,R);

  always_ff @(posedge clk)
    begin
      R <= R-x;
      Q <= Q + 8'd1;
    end
endmodule

module test1;

  logic [7:0] x,y,Q,R;
  logic clk;

  divide8bit testcase1 (x,y,clk,Q,R);

  initial 
    begin
            x = 8'd2;
            y = 8'd8;
            Q = 8'd0;
            R = y;
            clk = 1'd0;
            while(x <= R)
                begin
                    #5 clk = ~clk;
                end
            #5 $finish; 
        end
endmodule

person codewarrior453    schedule 21.09.2014    source источник
comment
Я нахожу вопрос более читаемым при отделении testharness от DUT. Меньшие отдельные блоки кода, которые мне легче анализировать и понимать иерархию, возможно, стоит рассмотреть это для будущих вопросов.   -  person Morgan    schedule 22.09.2014
comment
Спасибо за понимание. Я их пока разделю!   -  person codewarrior453    schedule 23.09.2014


Ответы (1)


Та же проблема здесь: вы назначаете Q и R внутри module test1. В то же время module testcase1 также пытается подлизаться к Q и R. Не назначайте Q и R в test1!

person Ari    schedule 21.09.2014
comment
Как бы вы назначали их в начале и откладывали всегда. Это моя единственная проблема. Я часами занимался этой проблемой. Дело в том, что все мои инициализации всегда повторяются, и мне нужно, чтобы они начинались с Q = 0 и R = y только один раз. - person codewarrior453; 21.09.2014
comment
Вы реализуете Q и R, чтобы они вели себя как флоп, который можно инициализировать с помощью сигнала сброса. Используйте флоп с асинхронным сбросом: asic-world.com/examples/verilog/d_ff .html - person Ari; 21.09.2014