Jump to content

    

Recommended Posts

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

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

Share this post


Link to post
Share on other sites

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

 

logic slon = 1;

 

Share this post


Link to post
Share on other sites
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

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

 

 

Share this post


Link to post
Share on other sites

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

 

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

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?

Edited by Raven
Incomplete

Share this post


Link to post
Share on other sites
43 minutes ago, Raven said:

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

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

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

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

 

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
1 hour ago, Raven said:

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

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

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

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

Share this post


Link to post
Share on other sites
32 минуты назад, _4afc_ сказал:

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

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

Share this post


Link to post
Share on other sites
Quote

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

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

Share this post


Link to post
Share on other sites

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

Создается проект -> создается файл 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

 

Share this post


Link to post
Share on other sites
17 часов назад, Dinogo сказал:

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

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

Share this post


Link to post
Share on other sites
53 минуты назад, Dinogo сказал:

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

 

 

Share this post


Link to post
Share on other sites
3 часа назад, alexPec сказал:

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

Добрый день!

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

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.