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

А почему Gowin игнорирует конструкцию "initial" для выводов с постоянным состоянием?

Добро-бы поругался - так нет, просто держит их в третьем состоянии не инициализируя - приходится в always запихивать...

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


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

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

 

logic slon = 1;

 

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


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

1 hour ago, dxp said:

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

 


logic slon = 1;

 

Всё хитрее Gowin не может заинитить только выходные ноги - другие регистры вроде может...

 

Рабочие варианты в Gowin:

module G_TOP ( output wire slon);

assign slon=1;

endmodule

или как вы предложили

module G_TOP ( output wire slon);

reg slon_r=1;

assign slon=slon_r;

endmodule

и даже такой работает

module G_TOP ( output wire slon);

reg slon_r;

initial 
   begin
   slon_r=1;
   end

assign slon=slon_r;

endmodule

 

 

А вот следующие варианты выкидывает этот регистр и переводит вывод в Z

module G_TOP ( output reg slon);

initial 
   begin
   slon=1;
   end

endmodule

или

module G_TOP ( output reg slon=1);


endmodule

 

Вариант

module G_TOP ( output slon);

reg slon=1;

endmodule

не синтезируется.

 

 

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


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

А почему не написать ровно то, чего вы хотите получить?

 

Хотите регистр с асинхронным ресетом - пишете
 

always @(posedge clk, negedge rst_n)
begin
   if (~rst_n) begin
        my_reg <= RST_VAL;
   end else begin
        my_reg <= my_reg_next;
   end
end

Если надо с синхронным ресетом - тогда так:

always @(posedge clk)
begin
   if (~rst_n) begin
        my_reg <= RST_VAL;
   end else begin
        my_reg <= my_reg_next;
   end
end

Зачем городить initial?

Изменено пользователем Raven
Incomplete

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


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

43 minutes ago, Raven said:

А почему не написать ровно то, чего вы хотите получить?

Зачем городить initial?

Нет ноги ресета снаружи ПЛИС и ФАПЧи пока не используются

А если загородить внутри ресет от счётчика - ему всё-равно надо от чего-то заинитится :)

 

PS: initial из TOP убрал и все сигналы на ногах ПЛИС сделал wire.

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


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

Ну, не знаю, как можно без reset'а жить (IMHO). Если нет внешнего, можно соорудить внутренний - хотя бы тот же Power-On Reset.

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


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

1 hour ago, Raven said:

Ну, не знаю, как можно без reset'а жить (IMHO). Если нет внешнего, можно соорудить внутренний - хотя бы тот же Power-On Reset.

Как соорудить внутренний Power-On Reset без инита регистра в конкретное значение?

Внешний - есть, хоть и не нужен для таких простых микросхем как эта ПЛИС - POWERGOOD источника питания подключена к RECONFIG

Т.е. при хорошем питании начнётся чтение битстрима, но эта нога будет всегда в 1 при работе прошивки.

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


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

32 минуты назад, _4afc_ сказал:

Как соорудить внутренний Power-On Reset без инита регистра в конкретное значение?

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

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


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

Quote

Как соорудить внутренний Power-On Reset без инита регистра в конкретное значение?

Использовать выход LOCK от модуля PLL

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


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

При запуске программы плата не делает, что должна

Создается проект -> создается файл Verilog -> туда пишется код для мигания лампочки (код ниже) -> Нажимается "Place & Route -> Return All" -> Далее в программере выбирается подключенная плата, режим SRAM Program, где указывается файл с кодом. После запуска плата приходит в состояние как на фото и ничего больше не происходит.

Плата GW1NS-UX2CLQ144C5/I4

module demo (  //  Declare our demo module.
    clk_50M,   //  Declare 3 pins: clk_50M, rst_n, led.
    rst_n,     //  We will connect these pins to the
    led);      //  actual clock signal, reset signal and LEDs.

input clk_50M;    //  Declare the clock pin as an Input signal.
input rst_n;      //  Reset pin is also an Input, triggered by board restart or reset button.
output[3:0] led;  //  LED is actually 4 discrete LEDs at 4 Output signals. Each LED Output is 1 bit.
                  //  So think of "output[3:0] led" as an Output array of 4 bits: "output led[0], led[1], led[2], led[3]"
reg[3:0] led;     //  Declare led (4 bits), cnt (25 bits) and clk_led (1 bit) as Registers that
reg[24:0] cnt;    //  can remember a value in volatile FPGA memory (similar to RAM).
reg clk_led;      //  So led refers to a 4-bit Output signal that is remembered when it gets updated.

//  This block increments a counter and flips the clk_led bit on or off upon overflow.
always@(                //  Code below is always triggered when these conditions are true...
    posedge clk_50M or  //  When the clock signal transitions from low to high (positive edge) OR
    negedge rst_n       //  When the reset signal transitions from high to low (negative edge) which
    ) begin             //  happens when the board restarts or reset button is pressed.

    if (!rst_n) begin     //  If board restarts or reset button is pressed...
        clk_led <= 1'b0;  //  Init clk_led and cnt to 0. "1'b0" means "1-Bit, Binary Value 0"
        cnt <= 25'd0;     //  "25'd0" means "25-bit, Decimal Value 0"
    end
    else begin
        if (cnt == 25'd2499_9999) begin  //  If our counter has reached its limit...
            clk_led <= ~clk_led;  //  Toggle the clk_led from 0 to 1 (and 1 to 0).
            cnt <= 25'd0;         //  Reset the counter to 0.
        end
        else begin
            cnt <= cnt + 25'd1;  //  Else increment counter by 1. "25'd1" means "25-bit, Decimal Value 1"
        end
    end
end

always@(                //  Code below is always triggered when these conditions are true...
    posedge clk_led or  //  When the clk_led register transitions from low to high (positive edge) OR
    negedge rst_n       //  When the reset signal transitions from high to low (negative edge) which
    ) begin             //  happens when the board restarts or reset button is pressed.

    if (!rst_n) begin  //  If board restarts or reset button is pressed...
        led <= 4'h1;   //  Init the 4-bit led value to 1.  "4'h1" means "4-bit, Hexadecimal Value 1".
    end                //  Value 1 means ON, ON, ON, OFF for the 4 LEDs (see above)
    else begin
        led <= { led[2:0], led[3] };  //  Else we shift the LEDs left 1 place (see above)
    end
end
endmodule

9Ijs9Vtr8NQ.jpg?size=1200x1600&quality=9

 

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


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

17 часов назад, Dinogo сказал:

Создается проект -> создается файл Verilog -> туда пишется код для мигания лампочки (код ниже) -> Нажимается "Place & Route

Проверьте подключены ли к проекту кроме Верилоговских у Вас файлы .sdc и .cst и верно ли их содержание.

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


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

 

При выборе любого fs файла появляется данная ошибка. На тестовый проект ругается и на свой. Плата совпадает с надписью на кристалле.

image.thumb.png.c0dd0f004bd8054680262f649becdf1d.pngimage.thumb.png.50e95f463e7526059e434a4abf7e112d.pngimage.thumb.png.0f340637c3459ea6ce919de11f211095.png

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


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

53 минуты назад, Dinogo сказал:

При выборе любого fs файла появляется данная ошибка. На тестовый проект ругается и на свой. Плата совпадает с надписью на кристалле.

Пожалуйста, не дублируйте темы!!! На нарушайте правил форума!

Ответил в параллельной ветке.

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


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

Всем доброго дня!

Намечается тенденция на трудности в поставках интеловских плисов, в связи с этим вопрос:

Возможно ли заменить чем-нибудь из gowin 10M02DCV36 (BGA6x6, 0.5мм шаг), размер можно до 7х7мм. Ключевое требование - проект должен работать на 150МГц. Может кто сказать, на практике такие частоты достижимы в маленьких ПЛИС gowin? Понятно, что окончательно известны частоты будут только после сборки, но наверно у кого-то есть какие-то цифры? Хотел заменить на ICE5LP4K - по частотам проект тянет только на 75 МГц, т.е. в 2 раза ниже требуемого.

Вторая замена - 10CL010YU256. Тут наверно попроще заменить, но проект тоже работает на 150мгц.  

Посоветуйте, стоит, исходя из практики работы с gowin, рассматривать их как возможную замену?

 

 

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


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

3 часа назад, alexPec сказал:

Намечается тенденция на трудности в поставках интеловских плисов

Добрый день!

А по нашей информации, наоборот, намечается упрощение поставок продукции данного вендора!

А сроки на то, что на TSMC делается, у всех большие.

У Интела есть ПЛИС с собственных заводов - там сроки вполне приличные - 2-3 мес.

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


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

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

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

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

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

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

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

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

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

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