Проблема с Verilog Dataflow testbench, вызывающая разные ошибки на разных сайтах - PullRequest
0 голосов
/ 22 февраля 2019

Эта программа находится в Dataflow Verilog.Я пытаюсь сделать сумматор и вычитатель зависимыми от селектора.В настоящее время я получаю некоторые ошибки, такие как «синтаксическая ошибка в непрерывном назначении» для строки 10 (assign {cout ...},) или «Ошибка запуска EPWave: [Не удалось проанализировать файл: $ timescale не найден в заголовке».]. Не удалось загрузить './dataflow_hw_1.vcd' ".

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

Вот код:

module dataflow_1 (a[7:0],b[7:0],out[7:0],cout);

  input a,b;
  output out,cout;
  //if a have odd number of 1s, output = a + b
  //else if even positions have even number of 1s in total, output = a-b

  assign selectorOdd = (a[1]^ a[3]^ a[5] ^ a[7]);
  assign selectorEven = (~selectorOdd & ~(a[0] ^ a[2] ^ a[4] ^ a[6])); 
  assign {cout,out[7:0]} = (selectorOdd & ({a[7:0] + b[7:0}) | (selectorEven & ({a[7:0] - b[7:0]}));


endmodule

Вот код тестового стенда:

// Code your testbench here
module dataflow_1();

  reg [7:0] a;
  reg [7:0] b;
  wire [7:0] out;


   dataflow_1  test(
     .a(a),
     .b(b),
     .out(out)
  );

  initial begin
    $dumpfile("dump.vcd");
    $dumpvars(0, out);

    a = 8'b01010101;
    b = 8'b00000001;
  #100;

  end



endmodule

1 Ответ

0 голосов
/ 22 февраля 2019

Проблема в этой строке:

assign {cout,out[7:0]} = (selectorOdd & ({a[7:0] + b[7:0}) | (selectorEven & ({a[7:0] - b[7:0]}));

вы неправильно использовали {} и [], {}, используемые для объединения битов.Это должно быть исправлено следующим образом:

assign {cout,out} = selectorOdd ? (a + b) : (selectorEven ? (a - b) : {9{1'b0}});

Ваш код должен иметь большее значение для всего остального.В этом коде, если selectorOdd и selectorEven равны 0, я присваиваю {cout,out}={9{1'b0}}.

...