Ошибка выполнения выполнения.это моя кодировка не так? - PullRequest
0 голосов
/ 02 октября 2018

У меня ошибка при запуске реализации в vivado 2018.2

Это подробности ошибки Информация:

[Место 30-494] Дизайн пуст. Разрешение: Проверьте, не был ли удален opt_designвсе листовые клетки вашего дизайна.Проверьте, были ли созданы и подключены все порты верхнего уровня.[Common 17-69] Команда не выполнена: Placer не может разместить все экземпляры

, и мои коды следующие:

`timescale 1ns/1ns

module fa_seq(a, b, cin, sum, cout);
    input a, b, cin;
    output reg sum, cout;
    reg t1, t2, t3;
    always
         @(a or b or cin) begin
             sum <= (a ^ b & cin);
             t1 = a & cin;
             t2 = b & cin;
             t3 = a & b;
             cout = (t1 | t2) | t3;
    end
endmodule

module fa_top;
    reg pa, pb, pci;
    wire pco, psum;

    fa_seq uf1(pa, pb, pci, psum, pco);
    initial
        begin: blk_only_once
            reg[3:0] pal;

            for(pal = 0; pal < 8; pal = pal + 1)
                begin
                    {pa,pb,pci} <= pal;
                    #5 $display("pa,pb,pci = %b%b%b",pa,pb,pci,":::pco,psum=%b%b",pco,psum);
                end
        end
endmodule

спасибо за ваш ответ.

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Ваш код имеет предполагаемую защелку.Более того, вы использовали как блокирующие, так и неблокирующие назначения в одном и том же блоке всегда.

always
     @(a or b or cin) begin //Not all dependencies are mentioned
         sum <= (a ^ b & cin); //Non-blocking assignment
         t1 = a & cin;
         t2 = b & cin;
         t3 = a & b;
         cout = (t1 | t2) | t3;
end

Я предлагаю вам переписать блок всегда, как показано ниже.

always
     @(*) begin
         sum  = (a ^ b & cin);
         t1   = a & cin;
         t2   = b & cin;
         t3   = a & b;
         cout = (t1 | t2) | t3;
end

На самом делевам не нужен блок всегда для вышеуказанной комбинационной логики.Просто используйте операторы assign.

module fa_seq(a, b, cin, sum, cout);
input a, b, cin;
output sum, cout;
wire t1, t2, t3;

   assign sum = (a ^ b & cin);
   assign  t1 = a & cin;
   assign  t2 = b & cin;
   assign  t3 = a & b;
   assign  cout = (t1 | t2) | t3;

endmodule

Однако эффективный способ написания полного кода сумматора был бы: -

module fa_seq(a, b, cin, sum, cout);
input a, b, cin;
output sum, cout;

   assign {cout,sum} = (a + b + cin);

 endmodule
0 голосов
/ 02 октября 2018

Проверьте, были ли созданы и подключены все порты верхнего уровня.

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

Вы должны разбить свой дизайн на файлы, которые содержат RTL, и файлы, которые содержат код тестового стенда / симуляции.В Vivado вы должны указать, какой это тип, если вы «добавляете файл», вот снимок экрана: enter image description here

...