Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Power-Up Level
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
TailWind
Как им управлять?

У меня много триггеров в дизайне.
После конфигурации нужно чтобы они были в заданных состояниях.

Для каждого триггера прописывать атрибут Power-Up Level - не удобно.

Когда у меня был QuartusII 2.2 я делал так:
Код
always @(posedge Clk or negedge Reset_)
if (!Reset_)  trigger <= 1;
else          trigger <= ....;

Обычный вериложный ресет.
Только вход Reset_ не был выведен на pin.
И всё работало.

Теперь я работаю с Cyclone, а он в Quartus 2.2 не поддерживается.
Поставил Quartus 4 - он не понимает такую конструкцию.
Quartus 6 - понимает для половины триггеров!!!

Как быть?
Чувствую придётся на ACEX и Quartus2.2 возвращаться ;(((
sazh
always @(posedge Clk or negedge Reset_)
if (!Reset_) trigger <= 1;
else trigger <= ....;

дело не в квартусе. Дело в самой конструкции. При опции NOT-GATE PUSH-BACK ON при моделировании отрабатывается установка в 1 до активного уровня reset. Но по первому же фронту клока перезаписывается нулевое состояние предыдущего триггера.
Нужна конструкция типа
if (!Reset_) trigger <= 1;
else if (enable) trigger <= input_data;
TailWind
Объясни пожалуйста подробнее help.gif

Как поставить:
-Power-Up Don't Care
-NOT Gate Push Back

Цитата
Но по первому же фронту клока перезаписывается нулевое состояние предыдущего триггера
Не понял какой предыдущий триггер имеется в виду.

Цитата
Дело в самой конструкции. При опции NOT-GATE PUSH-BACK ON при моделировании отрабатывается установка в 1 до активного уровня reset.

Я так понимаю, что активного уровня никогда не будет, потому что Reset_ я никуда не вывел.
А входные unused pins имеют по умолчанию пассивный уровень.

Цитата
Нужна конструкция типа
if (!Reset_) trigger <= 1;
else if (enable) trigger <= input_data;

Так и есть.
Только у меня обычный автомат.
И (enable) - функция от входов и триггеров.

Например:
Код
always @(posedge Clk or negedge Reset_)
if (!Reset_)
begin    
  Page        <= 0;
  Flash_RE_   <= 1;      
  //
  USB_WR_     <= 1;  
  USB_OE_Out_ <= 0;
  //
  USB_OE_     <= 1;
  USB_Dr      <= 0;    
  //
  ws          <= 0;
end else
begin        
  if (StartFlag) ws <= WaitState; else  
  if (!WaitFlag && (ws != 0)) ws <= ws - 1;
  //
  Flash_RE_ <= !( StartFlag || WaitFlag || (ws != 0));
  //
  USB_WR_ <= !(!Flash_RE_ && !WaitFlag && (ws == 0));
  USB_OE_ <= !(!Flash_RE_ && !WaitFlag && (ws == 0));
  //  
  if (ReadFlash_Start) Page <= Flash_Read_Page; else
  if (!USB_WR_)        Page <= Page - 1;
  //
  USB_OE_Out_ <= (Page != 0);  
  //
  USB_Dr       <= Flash_D;
end
TailWind
Чёрт возьми!
А ведь это не от Quartusa зависит.

Дело в том, что в Cyclone есть асинхронный Load, а в ACEX нет.

Цитата
Due to these effects, if you specify a particular reset value (other than 0),
you may cause your synthesis tool to use the asynchronous clear (aclr)
signals available on the registers to implement the high bits with NOT gate
push-back. In that case, the registers will look as though they power up
to the specified reset value. You will see this behavior, for example, if your
design targets FLEX 10KE or ACEX devices.
When a load signal is available in the device, your synthesis tools can
implement a reset of 1 or 0 value by using an asynchronous load of 1 or 0.
When the synthesis tool uses an asynchronous load signal, it is not
performing NOT gate push-back, so the registers will power up to a 0 logic
level.
sazh
Дело в том, что в Cyclone есть асинхронный Load, а в ACEX нет.//////////////
Ну и что. Если есть асинхронный load, нет aset.
Вот пример. одинаково ведет на обоих кристаллах. (При моделировании. rest_n можно ведь и не активизировать). Все базируется на инициализации регистров в ноль.
А Ваше описание на автомат не похоже. неужели в RTL просмотрщике Вы видите машину состояний?

//Assignments > Settings > Analysis & Synthesis Settings > More Settings
module power_up
#(parameter [7:0] set_out_data = 8'h07)
(
input clk,
input reset_n,
input [7:0] in_data,
input enable,
output reg [7:0] out_data_a,
output [7:0] out_data_b
);

reg [7:0] out_data;

always @ (posedge clk or negedge reset_n) //// /* NOT-GATE PUSH-BACK ON (FPGA)
begin
if (reset_n == 1'b0) out_data_a <= set_out_data;
else if (enable) out_data_a <= in_data;
end

always @ (posedge clk)
begin
if (enable) out_data <= in_data ^ set_out_data;
end

assign out_data_b = out_data ^ set_out_data;

endmodule
klop
Ребяты а почему бы не сделать вход ресет у FPGA. И пропадет куча проблем сразу. Да кстати SM которые кодируются one-hot без ресета могут себя совсем плохо себя вести.
TailWind
Цитата(sazh @ Oct 31 2006, 17:55) *
Дело в том, что в Cyclone есть асинхронный Load, а в ACEX нет.//////////////
Ну и что. Если есть асинхронный load, нет aset.

Я так понял, что в ACEX триггер имеющий асинхронный пресет автоматом получает NOT Gate Push Back.

А в Cyclone - нет.
У него свободы больше.
Он может иметь асинхронный пресет и нулевой power-up level.

Цитата(sazh @ Oct 31 2006, 17:55) *
При моделировании. rest_n можно ведь и не активизировать.

Я моделирую RTL в ncsim.
А поведение кристала смотрю асциллографом.
Часть триггеров получают NOT Gate push back, а часть нет.

Цитата(sazh @ Oct 31 2006, 17:55) *
А Ваше описание на автомат не похоже. неужели в RTL просмотрщике Вы видите машину состояний?

Я не знаю я, как эту схему правильно назвать wink.gif

///////////////////////////////
Цитата(klop @ Oct 31 2006, 18:17) *
Ребяты а почему бы не сделать вход ресет у FPGA. И пропадет куча проблем сразу. Да кстати SM которые кодируются one-hot без ресета могут себя совсем плохо себя вести.

Я уже к этому и склоняюсь!
klop
Цитата(TailWind @ Oct 31 2006, 19:04) *
Я уже к этому и склоняюсь!


Я думаю что сэкономите много времени и нервов. Кроме ряда специальных случаев ресет (синхронный или асинхронный) применим везде.
vetal
reset можно сформировать внутри fpga(sram) 1-dff-dff-reset, триггерам задать значение после конфигурирования - '0' и запретить их оптимизацию, тогда после загрузки сформируется коротенький импульс.
TailWind
Цитата(vetal @ Oct 31 2006, 20:26) *
reset можно сформировать внутри fpga(sram) 1-dff-dff-reset, триггерам задать значение после конфигурирования - '0' и запретить их оптимизацию, тогда после загрузки сформируется коротенький импульс.


У меня Cyclon во время конфигурации подключён к рабочей шине.
Пока прошивки нет, на выводах weak-pullup. (то что нужно).
Пока не подействует Reset может получиться пичок.

Я вот думаю затянутый conf_done подать на DEV_OE и Reset_.
TailWind
Чёрт, vetal, работает!!! ;)))

Спасибо ;)
vetal
Цитата
Чёрт, vetal, работает!!! wink.gif))

Я не черт! smile.gif
У меня так ниос сбрасывается.
Krys
Господа, нельзя ли разжувать это:
Цитата
reset можно сформировать внутри fpga(sram) 1-dff-dff-reset, триггерам задать значение после конфигурирования - '0' и запретить их оптимизацию

Я новичёк (сравнительно) в плисах. Подскажите, пожалуйста, как такое нарисовать в виде графических блоков (интересует фраза: "fpga(sram) 1-dff-dff-reset"), и где "задать значение после конфигурирования - '0' и запретить их оптимизацию". Спасибо. Сильно не ругайтесь, пожалуйста на вопрос :))
vetal
Цитата
"задать значение после конфигурирования - '0' и запретить их оптимизацию".

Код
library ieee;
use ieee.std_logic_1164.all;

entity reset_module is
    port (
    clock        : in std_logic; -- system clock
    reset_n    : out std_logic
    );
end reset_module;

architecture altera_rtl of reset_module is

signal dff1    : std_logic:='0';
signal dff2    : std_logic:='0';

attribute syn_preserve: boolean;
attribute altera_attribute : string;
attribute syn_preserve of dff1: signal is true;
attribute syn_preserve of dff2: signal is true;
attribute altera_attribute of dff1 : signal is "-name POWER_UP_LEVEL LOW";
attribute altera_attribute of dff2 : signal is "-name POWER_UP_LEVEL LOW";

begin
    bechavior:process(clock)
    begin
    if (rising_edge(clock)) then
        dff2<=dff1;    
        dff1<='1';
    end if;
    reset_n<=dff2;
    end process;
end rtl;
Postoroniy_V
Цитата(vetal @ Oct 31 2006, 21:20) *
Цитата
Чёрт, vetal, работает!!! wink.gif))

Я не черт! smile.gif
У меня так ниос сбрасывается.

жестко Вы с ним (с ниосом) smile.gif
PLL же есть наверняка..от запуска PLL сброс и сформировали бы smile.gif
TailWind
Цитата(Krys @ Nov 1 2006, 09:24) *
Господа, нельзя ли разжувать это:
Цитата
reset можно сформировать внутри fpga(sram) 1-dff-dff-reset, триггерам задать значение после конфигурирования - '0' и запретить их оптимизацию

Я новичёк (сравнительно) в плисах. Подскажите, пожалуйста, как такое нарисовать в виде графических блоков (интересует фраза: "fpga(sram) 1-dff-dff-reset"), и где "задать значение после конфигурирования - '0' и запретить их оптимизацию". Спасибо. Сильно не ругайтесь, пожалуйста на вопрос smile.gif)

Код
(*preserve*)
reg Reset_d;  always @(posedge Clk) Reset_d  <= 1;
reg Reset_dd; always @(posedge Clk) Reset_dd <= Reset_d;
reg Reset_;   always @(posedge Clk) Reset_   <= Reset_dd;
Krys
простите, но я не знаю HDL, поэтому нельзя ли рассказать, как это нарисовать в виде графических блоков и где поставить галочки, чтобы "триггерам задать значение после конфигурирования - '0' и запретить их оптимизацию"
Спасибо.
klop
Цитата(Krys @ Nov 7 2006, 15:56) *
простите, но я не знаю HDL, поэтому нельзя ли рассказать, как это нарисовать в виде графических блоков и где поставить галочки, чтобы "триггерам задать значение после конфигурирования - '0' и запретить их оптимизацию"
Спасибо.


Читайте www.sunburst-design.com/papers/CummingsSNUG2003Boston_Resets.pdf
sazh
Читайте внимательно.
Здесь рассматривается случай, когда не используется асинхронный сброс.
Все выкладки основаны на утверждении, что после инициализации кристалла (FPGA) все регистры устанавливаются в 0. Тогда если подать на вход сдвигающего регистра 1. то через n тактов на выходе сдвигающего регистра буде навсегда 1. Вот и получили по включению питания 0 на n тактов.
такую схему синтезатор обычно оптимизирует по умолчанию (выбрасывает такие регистры и заменяет константой).
Отключить оптимизацию у Альтеры это NOT-GATE PUSH-BACK в положение off

Ошибся.
Power Up Don't Care
Krys
Спасибо! Теперь всё стало понятно!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.