реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Power-Up Level, Altera, verilog
TailWind
сообщение Oct 28 2006, 09:31
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 125
Регистрация: 15-11-04
Пользователь №: 1 135



Как им управлять?

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

Для каждого триггера прописывать атрибут 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 возвращаться ;(((
Go to the top of the page
 
+Quote Post
sazh
сообщение Oct 28 2006, 17:36
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



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;
Go to the top of the page
 
+Quote Post
TailWind
сообщение Oct 28 2006, 19:29
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 125
Регистрация: 15-11-04
Пользователь №: 1 135



Объясни пожалуйста подробнее 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
Go to the top of the page
 
+Quote Post
TailWind
сообщение Oct 31 2006, 12:56
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 125
Регистрация: 15-11-04
Пользователь №: 1 135



Чёрт возьми!
А ведь это не от 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.
Go to the top of the page
 
+Quote Post
sazh
сообщение Oct 31 2006, 14:55
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Дело в том, что в 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
Go to the top of the page
 
+Quote Post
klop
сообщение Oct 31 2006, 15:17
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 433
Регистрация: 28-02-06
Пользователь №: 14 788



Ребяты а почему бы не сделать вход ресет у FPGA. И пропадет куча проблем сразу. Да кстати SM которые кодируются one-hot без ресета могут себя совсем плохо себя вести.
Go to the top of the page
 
+Quote Post
TailWind
сообщение Oct 31 2006, 16:04
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 125
Регистрация: 15-11-04
Пользователь №: 1 135



Цитата(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 без ресета могут себя совсем плохо себя вести.

Я уже к этому и склоняюсь!
Go to the top of the page
 
+Quote Post
klop
сообщение Oct 31 2006, 16:12
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 433
Регистрация: 28-02-06
Пользователь №: 14 788



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


Я думаю что сэкономите много времени и нервов. Кроме ряда специальных случаев ресет (синхронный или асинхронный) применим везде.
Go to the top of the page
 
+Quote Post
vetal
сообщение Oct 31 2006, 17:26
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 2 095
Регистрация: 27-08-04
Из: Россия, СПб
Пользователь №: 553



reset можно сформировать внутри fpga(sram) 1-dff-dff-reset, триггерам задать значение после конфигурирования - '0' и запретить их оптимизацию, тогда после загрузки сформируется коротенький импульс.
Go to the top of the page
 
+Quote Post
TailWind
сообщение Oct 31 2006, 17:51
Сообщение #10


Частый гость
**

Группа: Свой
Сообщений: 125
Регистрация: 15-11-04
Пользователь №: 1 135



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


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

Я вот думаю затянутый conf_done подать на DEV_OE и Reset_.
Go to the top of the page
 
+Quote Post
TailWind
сообщение Oct 31 2006, 18:15
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 125
Регистрация: 15-11-04
Пользователь №: 1 135



Чёрт, vetal, работает!!! ;)))

Спасибо ;)
Go to the top of the page
 
+Quote Post
vetal
сообщение Oct 31 2006, 18:20
Сообщение #12


Гуру
******

Группа: Модераторы
Сообщений: 2 095
Регистрация: 27-08-04
Из: Россия, СПб
Пользователь №: 553



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

Я не черт! smile.gif
У меня так ниос сбрасывается.
Go to the top of the page
 
+Quote Post
Krys
сообщение Nov 1 2006, 06:24
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



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

Я новичёк (сравнительно) в плисах. Подскажите, пожалуйста, как такое нарисовать в виде графических блоков (интересует фраза: "fpga(sram) 1-dff-dff-reset"), и где "задать значение после конфигурирования - '0' и запретить их оптимизацию". Спасибо. Сильно не ругайтесь, пожалуйста на вопрос :))
Go to the top of the page
 
+Quote Post
vetal
сообщение Nov 1 2006, 08:02
Сообщение #14


Гуру
******

Группа: Модераторы
Сообщений: 2 095
Регистрация: 27-08-04
Из: Россия, СПб
Пользователь №: 553



Цитата
"задать значение после конфигурирования - '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;
Go to the top of the page
 
+Quote Post
Postoroniy_V
сообщение Nov 1 2006, 10:35
Сообщение #15


МедвеД Инженер I
****

Группа: Свой
Сообщений: 816
Регистрация: 21-10-04
Пользователь №: 951



Цитата(vetal @ Oct 31 2006, 21:20) *
Цитата
Чёрт, vetal, работает!!! wink.gif))

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

жестко Вы с ним (с ниосом) smile.gif
PLL же есть наверняка..от запуска PLL сброс и сформировали бы smile.gif


--------------------
Cogito ergo sum
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th June 2025 - 11:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.01482 секунд с 7
ELECTRONIX ©2004-2016