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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Как посмотреть диаграмму работы при больших задержках от начала работы?, Значение счетчика тактов больше тысячи
Гвоздик
сообщение May 23 2006, 13:19
Сообщение #1


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

Группа: Свой
Сообщений: 153
Регистрация: 2-12-04
Из: Чебоксары
Пользователь №: 1 289



Хочу посмотреть на диаграмме работы значения сигналов, а значения счетчика тактов при этом довольно большие, отсчитывая от начального нуля (подачи питания) - на экране не помещаются такие значения. Что вы делаете в таком случае?
Привожу отрывок кода, чтобы было понятней:
Код
process(reset,clk_counter)
    begin
        if (reset = '0') then
            lcd_rs_sig <= '0';
            lcd_rw_sig <= '0';
            lcd_e_sig <= '0';
            lcd_data_sig <= X"00";
        else
            case clk_counter(31 downto 0) is
            -- clear screen command (3 times sequentially)
            -- 15 ms is gone after reset
                when X"000F1B30" =>
                    lcd_rs_sig <= '0';
                    lcd_rw_sig <= '0';
                    lcd_e_sig <= '0';
                    lcd_data_sig <= X"30";
            -- 1 us is gone after data setting                    
                when X"000F1B72" =>
                    lcd_rs_sig <= '0';
                    lcd_rw_sig <= '0';
                    lcd_e_sig <= '1';
                    lcd_data_sig <= X"30";
            -- 2 us for data latching
                when X"000F1BF6" =>
                    lcd_rs_sig <= '0';
                    lcd_rw_sig <= '0';
                    lcd_e_sig <= '0';
                    lcd_data_sig <= X"30";
            -- 5 ms delay after each clear screen command
                when X"00142506" =>
                    lcd_rs_sig <= '0';
                    lcd_rw_sig <= '0';
                    lcd_e_sig <= '1';
                    lcd_data_sig <= X"30";
            end case;    
        end if;
    end process;
Go to the top of the page
 
+Quote Post
iosifk
сообщение May 23 2006, 13:28
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(Гвоздик @ May 23 2006, 17:19) *
Хочу посмотреть на диаграмме работы значения сигналов, а значения счетчика тактов при этом довольно большие, отсчитывая от начального нуля (подачи питания) - на экране не помещаются такие значения. Что вы делаете в таком случае?
Привожу отрывок кода, чтобы было понятней:
Код
process(reset,clk_counter)
    begin
        if (reset = '0') then
            lcd_rs_sig <= '0';
            lcd_rw_sig <= '0';
            lcd_e_sig <= '0';
            lcd_data_sig <= X"00";
        else
            case clk_counter(31 downto 0) is
            -- clear screen command (3 times sequentially)
            -- 15 ms is gone after reset
                when X"000F1B30" =>
                    lcd_rs_sig <= '0';
                    lcd_rw_sig <= '0';
                    lcd_e_sig <= '0';
                    lcd_data_sig <= X"30";
            -- 1 us is gone after data setting                    
                when X"000F1B72" =>
                    lcd_rs_sig <= '0';
                    lcd_rw_sig <= '0';
                    lcd_e_sig <= '1';
                    lcd_data_sig <= X"30";
            -- 2 us for data latching
                when X"000F1BF6" =>
                    lcd_rs_sig <= '0';
                    lcd_rw_sig <= '0';
                    lcd_e_sig <= '0';
                    lcd_data_sig <= X"30";
            -- 5 ms delay after each clear screen command
                when X"00142506" =>
                    lcd_rs_sig <= '0';
                    lcd_rw_sig <= '0';
                    lcd_e_sig <= '1';
                    lcd_data_sig <= X"30";
            end case;    
        end if;
    end process;


Не вдаваясь в детали:
Написать в тест-бенче, что после такого-то времени, такие-то сигналы, например старшие разряды счетчика "зафорсены" в 1. Соответственно после "зафорсивания" счетчик отсчитает только то, что останется до переполнения.
К сожалению, не могу привести пример, это есть только на той машие, которая дома. Но поищете force
Удачи!


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
des00
сообщение May 23 2006, 13:32
Сообщение #3


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Самопроверяющийся тест бенч, спасет отца руской демократии!!!!!!!!!


--------------------
Go to the top of the page
 
+Quote Post
TailWind
сообщение May 23 2006, 13:35
Сообщение #4


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

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



Цитата
Хочу посмотреть на диаграмме работы значения сигналов, а значения счетчика тактов при этом довольно большие, отсчитывая от начального нуля (подачи питания) - на экране не помещаются такие значения. Что вы делаете в таком случае?
Привожу отрывок кода, чтобы было понятней:


Если не помещается на экране можно использовать zoom.

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

Ещё можно сделать `define TEST
и вот здесь
Цитата
when X"000F1B30"

если TEST поставить число поменьше.
Go to the top of the page
 
+Quote Post
Гвоздик
сообщение May 23 2006, 15:20
Сообщение #5


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

Группа: Свой
Сообщений: 153
Регистрация: 2-12-04
Из: Чебоксары
Пользователь №: 1 289



Возможно я ввел кого-то в заблуждение, никакой тестбенч я не пишу, смотрю диаграммы альтеровском квартусе в меню Tools | Simulator Tool - а там идет моделирование от начала работы, к сожалению, большие периоды времени не моделируются. Вот в чем вопрос-то весь...
Go to the top of the page
 
+Quote Post
ishergin
сообщение May 23 2006, 17:29
Сообщение #6


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

Группа: Свой
Сообщений: 130
Регистрация: 16-06-05
Из: Оренбург
Пользователь №: 6 039



Цитата(Гвоздик @ May 23 2006, 21:20) *
Возможно я ввел кого-то в заблуждение, никакой тестбенч я не пишу, смотрю диаграммы альтеровском квартусе в меню Tools | Simulator Tool - а там идет моделирование от начала работы, к сожалению, большие периоды времени не моделируются. Вот в чем вопрос-то весь...


Если можете - то попробуйте Active HDL, хороший симулятор и редактор, а для синтеза подключается квартус.

Сообщение отредактировал ishergin - May 23 2006, 17:30


--------------------
Программа выполнила невыполнимое и допустила недопустимое
Go to the top of the page
 
+Quote Post
bsp
сообщение May 23 2006, 18:38
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 339
Регистрация: 27-08-05
Пользователь №: 8 013



Тоже использую очень длинные последовательности при симуляции в Квартусе, но проблем не испытываю. Предел времени моделирования устанавливается в меню edit -> end time ( когда выбран файл vwf ). Дальше вопрос быстродействия компьютера, количества часто меняющихся сигналов и терпения. Если все данные моделирования не помещаются в ОЗУ, можно разрешить помещать их на хард. Это сильно замедляет процесс, но отобразить можно очень длинные последовательности. В качестве примера: моделирую устройство работающее с тактовой частотой 8 МГц в течении 6 мсек. Получается около 48 000 периодов, при этом 6 - 8 сигналов большую часть времени переключаются с частотой равной тактовой, еще несколько в 2 -8 раз медленнее.
Go to the top of the page
 
+Quote Post
dxp
сообщение May 24 2006, 04:37
Сообщение #8


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(bsp @ May 24 2006, 01:38) *
Тоже использую очень длинные последовательности при симуляции в Квартусе, но проблем не испытываю. Предел времени моделирования устанавливается в меню edit -> end time ( когда выбран файл vwf ). Дальше вопрос быстродействия компьютера, количества часто меняющихся сигналов и терпения. Если все данные моделирования не помещаются в ОЗУ, можно разрешить помещать их на хард. Это сильно замедляет процесс, но отобразить можно очень длинные последовательности. В качестве примера: моделирую устройство работающее с тактовой частотой 8 МГц в течении 6 мсек. Получается около 48 000 периодов, при этом 6 - 8 сигналов большую часть времени переключаются с частотой равной тактовой, еще несколько в 2 -8 раз медленнее.

Моделирование в квартусном симуляторе сродни мазохизму. Интерфейс не настраивается, зум безобразный, а главное - на больших временах при зуме тормозит безбожно. Для примера, в Active-HDL устройство на 160 МГц, прогон на 80 мс (два полных ТВ кадра). Зум работает вполне сносно. А если смотреть в Accelerated Waveform (в 7.1 появилось, из Ривьеры позаимствовано), то там вообще почти без тормозов вне зависимости от текущей развертки.

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


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
sazh
сообщение May 24 2006, 06:24
Сообщение #9


Гуру
******

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



Все правильно. Только не надо обижать Квартус. Это пакет другой ценовой категории.
Go to the top of the page
 
+Quote Post
Гвоздик
сообщение May 24 2006, 10:56
Сообщение #10


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

Группа: Свой
Сообщений: 153
Регистрация: 2-12-04
Из: Чебоксары
Пользователь №: 1 289



To bsp: Спасибо огромное, стало моделироваться, хотя, действительно, тормозит конкретно.
To all: После ваших замечаний склоняюсь к смене симулятора: а что, если заказать в Мегратэке компакт с Моделсимом, а потом его крякнуть? Кто-нибудь пробовал?
Go to the top of the page
 
+Quote Post
Jools
сообщение May 24 2006, 11:07
Сообщение #11


Патриот
***

Группа: Свой
Сообщений: 384
Регистрация: 26-12-04
Пользователь №: 1 682



Цитата(Гвоздик @ May 24 2006, 14:56) *
заказать в Мегратэке компакт с Моделсимом, а потом его крякнуть? Кто-нибудь пробовал?

Не переживай особо насчет лекарства. wink.gif
Go to the top of the page
 
+Quote Post
Гвоздик
сообщение May 24 2006, 12:03
Сообщение #12


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

Группа: Свой
Сообщений: 153
Регистрация: 2-12-04
Из: Чебоксары
Пользователь №: 1 289



Тогда еще с компилятором-синтезатором непонятное дело. Ниже приведу код и предупреждение выскакивающее при компиляции. Это у всех так или я что-то не так указал? Предупреждение такое: Warning (10631): VHDL Process Statement warning at lcd_controller.vhd(93): signal or variable "lcd_rs_sig" may not be assigned a new value in every possible path through the Process Statement. Signal or variable "lcd_rs_sig" holds its previous value in every path with no new value assignment, which may create a combinational loop in the current design. И также для lcd_rw_sig, lcd_e_sig, lcd_data. И еще: Warning: Latch lcd_e_sig has unsafe behavior. Warning: Ports D and ENA on the latch are fed by the same signal rtl~0
Код
architecture behavioural of lcd_controller is
signal lcd_rs_sig, lcd_rw_sig, lcd_e_sig : std_logic;
signal lcd_data_sig : std_logic_vector(7 downto 0);
signal clk_counter : std_logic_vector(31 downto 0) := X"00000000";
-- PCI_clk = 66 MHz => T_clk = 15 ns => T_count = 2 * T_clk = 30 ns
constant lcd_state_0 : std_logic_vector(31 downto 0) := X"00000000";
-- plus delay >= 15 ms
constant lcd_state_1 : std_logic_vector(31 downto 0) := X"0007A120";

begin
    process(reset,clk)
    begin
        if (reset = '0') then
            clk_counter <= X"00000000";
        else
            if (clk'event and clk = '1') then
                clk_counter <= clk_counter + X"00000001";
            end if;
        end if;
    end process;
    
    process(reset, clk_counter)
    begin
        if (reset = '0') then
            lcd_rs_sig <= '0';
            lcd_rw_sig <= '0';
            lcd_e_sig <= '0';
            lcd_data_sig <= X"00";
        else
            case clk_counter(31 downto 0) is
                when lcd_state_0 =>                
                    lcd_rs_sig <= '0';
                    lcd_rw_sig <= '0';
                    lcd_e_sig <= '0';
                    lcd_data_sig <= X"00";
-- first clear screen command (3 times sequentially)
                when lcd_state_1 =>                
                    lcd_rs_sig <= '0';
                    lcd_rw_sig <= '0';
                    lcd_e_sig <= '1';
                    lcd_data_sig <= X"30";
            when others =>
            end case;    
        end if;
    end process;
    
    lcd_rs <= lcd_rs_sig;
    lcd_rw <= lcd_rw_sig;
    lcd_e <= lcd_e_sig;
    lcd_data(7 downto 0) <= lcd_data_sig(7 downto 0);
end architecture behavioural;


Убрал из второго процесса reset'овскую часть - тоже самое. Смысл-то простой: по тактам счетчика инициализировать Датавижновский ЖКИ, а синтезатор чего-то не понимает, хотя скорее я не понимаю. В чем может быть дело?
Go to the top of the page
 
+Quote Post
vetal
сообщение May 24 2006, 12:19
Сообщение #13


Гуру
******

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



1. Ввести перед case(...) clk'event and clk = '1'.
или
2. Назначит сигналам значения, принимаемые в случаях отличных от lcd_state_0 и state_1.
3. Не стоит плодить защелки.
Go to the top of the page
 
+Quote Post
ishergin
сообщение May 24 2006, 15:24
Сообщение #14


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

Группа: Свой
Сообщений: 130
Регистрация: 16-06-05
Из: Оренбург
Пользователь №: 6 039



Цитата(Гвоздик @ May 24 2006, 16:56) *
To bsp: Спасибо огромное, стало моделироваться, хотя, действительно, тормозит конкретно.
To all: После ваших замечаний склоняюсь к смене симулятора: а что, если заказать в Мегратэке компакт с Моделсимом, а потом его крякнуть? Кто-нибудь пробовал?


Я заказывал версию 6.0 под Win32, прислали 2 CD под все ОС smile.gif, но версия была 5.8е. С лекарством проблемы были, пришлось использовать лиценцию, сгенерированную для всех продуктов от Mentor (объем файла составлял 640 кб), из-за этого первый запуск симулятора занимал 5 минут, короче работать было очень плохо smile.gif


--------------------
Программа выполнила невыполнимое и допустила недопустимое
Go to the top of the page
 
+Quote Post
Гвоздик
сообщение May 25 2006, 08:01
Сообщение #15


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

Группа: Свой
Сообщений: 153
Регистрация: 2-12-04
Из: Чебоксары
Пользователь №: 1 289



Ух-ты, действительно предупреждения исчезли! Видимо надо всегда привязываться к тактовой частоте, хотя счетчик тактов тоже по ней меняется. А вдруг он еще не успеет измениться, а я уже его обрабатывать начну? Чувствую, что это очень ламерский вопрос, однако спросить больше не у кого, а его понимание разрешит дальнейшие мои недопонимания. Спасибо.
Go to the top of the page
 
+Quote Post
vetal
сообщение May 25 2006, 08:16
Сообщение #16


Гуру
******

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



Цитата
А вдруг он еще не успеет измениться, а я уже его обрабатывать начну?


quartus timing analyzer укажет максимальное значение для частоты clk, в пределах которой ваша система будет работать стабильно.
Go to the top of the page
 
+Quote Post
Гвоздик
сообщение May 25 2006, 17:24
Сообщение #17


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

Группа: Свой
Сообщений: 153
Регистрация: 2-12-04
Из: Чебоксары
Пользователь №: 1 289



Спасибо, это я посмотрел, все в порядке. Однако, меня интересует другое: в первом (начиная сверху) процессе по фронту клока увеличивается счетчик, и во втором процессе мы тоже по фронту клока смотрим значение этого-же счетчика. Весь вопрос-то в том, что получается, что в один и тотже момент времени (фронт клока) мы приращаем и читаем счетчик. Не может ли так получиться, что мы будем читать его именно в момент его приращения (либо до или после)?

Код
architecture behavioural of lcd_controller is
signal lcd_rs_sig, lcd_rw_sig, lcd_e_sig : std_logic;
signal lcd_data_sig : std_logic_vector(7 downto 0);
signal clk_counter : std_logic_vector(31 downto 0) := X"00000000";
constant lcd_state_0 : std_logic_vector(31 downto 0) := X"00000000";
constant lcd_state_1 : std_logic_vector(31 downto 0) := X"0007A120";

begin
    process(reset, clk)
    begin
        if (reset = '0') then
            clk_counter <= X"00000000";
        else
            if (clk'event and clk = '1') then
                clk_counter <= clk_counter + X"00000001";
            end if;
        end if;
    end process;
    
    process(clk, clk_counter)
    begin
        if (clk'event and clk = '1') then
            case clk_counter(31 downto 0) is
                when lcd_state_0 =>                
                when lcd_state_1 =>                
                when others =>
            end case;
        end if;
    end process;
    
    lcd_rs <= lcd_rs_sig;
    lcd_rw <= lcd_rw_sig;
    lcd_e <= lcd_e_sig;
    lcd_data(7 downto 0) <= lcd_data_sig(7 downto 0);
end architecture behavioural;
Go to the top of the page
 
+Quote Post
ishergin
сообщение May 25 2006, 19:00
Сообщение #18


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

Группа: Свой
Сообщений: 130
Регистрация: 16-06-05
Из: Оренбург
Пользователь №: 6 039



Цитата(Гвоздик @ May 25 2006, 23:24) *
Спасибо, это я посмотрел, все в порядке. Однако, меня интересует другое: в первом (начиная сверху) процессе по фронту клока увеличивается счетчик, и во втором процессе мы тоже по фронту клока смотрим значение этого-же счетчика. Весь вопрос-то в том, что получается, что в один и тотже момент времени (фронт клока) мы приращаем и читаем счетчик. Не может ли так получиться, что мы будем читать его именно в момент его приращения (либо до или после)?

Код
architecture behavioural of lcd_controller is
signal lcd_rs_sig, lcd_rw_sig, lcd_e_sig : std_logic;
signal lcd_data_sig : std_logic_vector(7 downto 0);
signal clk_counter : std_logic_vector(31 downto 0) := X"00000000";
constant lcd_state_0 : std_logic_vector(31 downto 0) := X"00000000";
constant lcd_state_1 : std_logic_vector(31 downto 0) := X"0007A120";

begin
    process(reset, clk)
    begin
        if (reset = '0') then
            clk_counter <= X"00000000";
        else
            if (clk'event and clk = '1') then
                clk_counter <= clk_counter + X"00000001";
            end if;
        end if;
    end process;
    
    process(clk, clk_counter)
    begin
        if (clk'event and clk = '1') then
            case clk_counter(31 downto 0) is
                when lcd_state_0 =>                
                when lcd_state_1 =>                
                when others =>
            end case;
        end if;
    end process;
    
    lcd_rs <= lcd_rs_sig;
    lcd_rw <= lcd_rw_sig;
    lcd_e <= lcd_e_sig;
    lcd_data(7 downto 0) <= lcd_data_sig(7 downto 0);
end architecture behavioural;


Насколько я понимаю такие действия должны конвейеризироваться (тьфу, выговорить не могу huh.gif ), тоесть для второго процесса значение счетчика будет запаздывать на один такт CLK

Сообщение отредактировал ishergin - May 25 2006, 19:01


--------------------
Программа выполнила невыполнимое и допустила недопустимое
Go to the top of the page
 
+Quote Post
vetal
сообщение May 25 2006, 20:07
Сообщение #19


Гуру
******

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



Цитата
Насколько я понимаю такие действия должны конвейеризироваться (тьфу, выговорить не могу (IMG:style_emoticons/default/huh.gif) ),

Это и есть конвейер(1 ступень - счетчик, 2 ступень- анализ значения).
Для упрожения восприятия достаточно представить тактовый сигнал периодической последовательностью дельта импульсов.
Go to the top of the page
 
+Quote Post
ishergin
сообщение May 25 2006, 20:22
Сообщение #20


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

Группа: Свой
Сообщений: 130
Регистрация: 16-06-05
Из: Оренбург
Пользователь №: 6 039



Цитата(vetal @ May 26 2006, 02:07) *
Цитата
Насколько я понимаю такие действия должны конвейеризироваться (тьфу, выговорить не могу (IMG:style_emoticons/default/huh.gif) ),

Это и есть конвейер(1 ступень - счетчик, 2 ступень- анализ значения).
Для упрожения восприятия достаточно представить тактовый сигнал периодической последовательностью дельта импульсов.

Я обычно смотрю RTL схему в Симплифай, достаточно наглядно, правда УГО элементов буржуйское, непривык еще smile.gif


--------------------
Программа выполнила невыполнимое и допустила недопустимое
Go to the top of the page
 
+Quote Post
Гвоздик
сообщение May 29 2006, 16:46
Сообщение #21


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

Группа: Свой
Сообщений: 153
Регистрация: 2-12-04
Из: Чебоксары
Пользователь №: 1 289



Спасибо всем большое за науку, теперь все стало ясно и понятно!
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 17:30
Рейтинг@Mail.ru


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