Перейти к содержанию
    

Работа с ПО Gowin

Программа получена путем перевода sch файла из Xilinx в Verilog и в дальнейшем используется для Gowin. Кто пользовался таким методом, есть ли какие-то "подводные камни"?

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

 

////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 1995-2012 Xilinx, Inc.  All rights reserved.
////////////////////////////////////////////////////////////////////////////////
//   ____  ____ 
//  /   /\/   / 
// /___/  \  /    Vendor: Xilinx 
// \   \   \/     Version : 14.4
//  \   \         Application : sch2hdl
//  /   /         Filename : REGISTR.vf
// /___/   /\     Timestamp : 07/11/2023 13:35:05
// \   \  /  \ 
//  \___\/\___\ 
//
//Design Name: REGISTR
//Device: spartan6
//Purpose:
//    This verilog netlist is translated from an ECS schematic.It can be 
//    synthesized and simulated, but it should not be modified. 
//
`timescale 100 ps / 10 ps

module SR16CE_HXILINX_REGISTR(Q, C, CE, CLR, SLI) ;
  
   
   output [15:0]      Q;

   input           C;    
   input           CE;    
   input           CLR;    
   input              SLI;
   
   reg    [15:0]      Q;
   
   always @(posedge C or posedge CLR)
     begin
    if (CLR)
      Q <= 16'b0000_0000_0000_0000;
    else if (CE)
          Q <= {Q[14:0], SLI};
     end
   
   
endmodule
`timescale 1ns / 1ps

module REGISTR(T15, 
               R12,
               R13);

    input T15;
   output R12;
   output R13;

   (* LOC = "REC(9)" *) 
   wire [15:0] REC;
   wire XLXN_29;
   wire XLXN_45;
   wire XLXN_46;
   wire XLXN_48;
   wire XLXN_49;
   wire XLXN_51;
   wire XLXN_52;
   wire XLXN_55;
   wire XLXN_57;
   wire XLXN_58;
   wire XLXN_59;
   wire XLXN_63;
   
   GND  XLXI_5 (.G(XLXN_55));
   GND  XLXI_10 (.G(XLXN_51));
   VCC  XLXI_14 (.V(XLXN_52));
   (* IOSTANDARD = "DEFAULT" *) (* IBUF_DELAY_VALUE = "0" *) (* 
         IFD_DELAY_VALUE = "AUTO" *) 
   IBUF  XLXI_15 (.I(T15), 
                 .O(XLXN_29));
   BUFG  XLXI_17 (.I(XLXN_29), 
                 .O(XLXN_57));
   (* IOSTANDARD = "DEFAULT" *) (* SLEW = "SLOW" *) (* DRIVE = "12" *) 
   OBUF  XLXI_18 (.I(XLXN_45), 
                 .O(R12));
   XNOR2  XLXI_31 (.I0(XLXN_48), 
                  .I1(XLXN_46), 
                  .O(XLXN_45));
   FDCE  XLXI_34 (.C(XLXN_57), 
                 .CE(XLXN_52), 
                 .CLR(XLXN_51), 
                 .D(XLXN_45), 
                 .Q(XLXN_49));
   FDCE  XLXI_35 (.C(XLXN_57), 
                 .CE(XLXN_58), 
                 .CLR(XLXN_59), 
                 .D(XLXN_58), 
                 .Q(XLXN_48));
   (* HU_SET = "XLXI_37_0" *) 
   SR16CE_HXILINX_REGISTR  XLXI_37 (.C(XLXN_57), 
                                   .CE(XLXN_63), 
                                   .CLR(XLXN_55), 
                                   .SLI(XLXN_49), 
                                   .Q(REC[15:0]));
   XOR2  XLXI_40 (.I0(REC[9]), 
                 .I1(REC[7]), 
                 .O(XLXN_46));
   VCC  XLXI_41 (.V(XLXN_58));
   GND  XLXI_42 (.G(XLXN_59));
   VCC  XLXI_44 (.V(XLXN_63));
   OBUF  XLXI_46 (.I(XLXN_57), 
                 .O(R13));
    
endmodule


module XNOR2(I0,I1,O);
    input I0,I1;
    output O;
    assign O = ~((I0 && I1) || (~I0 && ~I1)); 
endmodule

module XOR2(I0,I1,O);
    input I0,I1;
    output O;
    assign O = (I0 && I1) || (~I0 && ~I1); 
endmodule

module FDCE(
  input CLR, CE, D, C, 
  output reg Q);

  always @(posedge C or posedge CLR)
    if(CLR)
      Q <= 0;
    else if(CE)
      Q <= D;
endmodule

image.thumb.png.dd1c5d1fd5ed41d1fe931688b6d646c0.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Коллеги по прошлой жизни, прикипевшие душой к схематику, активно пользовались таким методом. Но переводили в вивадо. Лично я не пользовался, так как уже давно со схематика соскочил. Вроде метод рабочий. Но хочу предостеречь.

Когда я впервые использовал Gowin EDA, столкнулся с неправильной работой устройства. Оказалось, что не слишком аккуратные, но корректные с точки зрения языка конструкции if-else if-else, которые раньше вполне ожидаемо синтезировались ксайлинском, у говина синтезировались в нечто другое. Он немного не так понимает приоритеты условий, если в них больше одной переменной. Так что будьте аккуратны, подсовывая говину ксайлинксовский RTL.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

20 hours ago, fingertouch said:

Когда я впервые использовал Gowin EDA, столкнулся с неправильной работой устройства. Оказалось, что не слишком аккуратные, но корректные с точки зрения языка конструкции if-else if-else, которые раньше вполне ожидаемо синтезировались ксайлинском, у говина синтезировались в нечто другое. Он немного не так понимает приоритеты условий, если в них больше одной переменной. Так что будьте аккуратны, подсовывая говину ксайлинксовский RTL.

Наблюдал такое раньше. Сейчас то-ли я стал лучше писать под Gowin, то-ли в 1.9.8.11+ это исправили - больше не замечаю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 07.08.2023 в 15:52, Evgenij сказал:

Программа получена путем перевода sch файла из Xilinx в Verilog и в дальнейшем используется для Gowin. Кто пользовался таким методом, есть ли какие-то "подводные камни"?

Я первые свои проекты для GW переводил из схематика для Xilinx Spartan3A на VHDL для GW1N. Проблем не было ни каких, языковые структуры при таком переводе получаются очень простыми, но при этом, естественно, не такими наглядными как на схеме, поэтому надо быть просто внимательным и аккуратным. По объему в логических блоках и по времянке все получалось практически один в один с Xilinx.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...