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

 
 
> Заливка проекта на плату DE0. некорректная работа
Ensom ulv
сообщение Mar 3 2015, 18:30
Сообщение #1





Группа: Участник
Сообщений: 11
Регистрация: 16-02-15
Пользователь №: 85 190



Здравствуйте!
Только начал изучать ПЛИС и Quartus II.
В интернете нашел маленький проект счетчика, немного переделал его под себя (сделал его не 16-ти разрядным, а 10-разрядным). Компилируется все нормально. НО, после того, как заливаю проект на плату (к слову плата Altera DE0), светодиоды при нажатии на кнопку моргают как хотят, в совершенно произвольном порядке. Перепробовал кучу разных вариантов, но ошибку найти не удалось.

Выводы ПЛИС назначал в соответствии с документацией, уверен, что все подключено верно.
На что обратить внимание и где стоит искать ошибку?
P.s. этап из разряда "поморгать светодиодами" прошел успешно.
Код проекта в файле.
Прикрепленные файлы
Прикрепленный файл  counter.vhd ( 573 байт ) Кол-во скачиваний: 15
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Ensom ulv
сообщение Mar 3 2015, 21:39
Сообщение #2





Группа: Участник
Сообщений: 11
Регистрация: 16-02-15
Пользователь №: 85 190



Сделал как Вы сказали, и на всякий случай убрал асинхронный сброс, так же в начале проинициализировал "cnt".
В общем ничего не помогло. Проверял логику в симуляторе, все работает верно.
Прикладываю измененный код.
Прикрепленные файлы
Прикрепленный файл  counter.vhd ( 598 байт ) Кол-во скачиваний: 12
 
Go to the top of the page
 
+Quote Post
Александр77
сообщение Mar 4 2015, 15:44
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 608
Регистрация: 10-07-09
Из: Дубна, Московская область
Пользователь №: 51 111



Цитата(Ensom ulv @ Mar 4 2015, 00:39) *
В общем ничего не помогло. Проверял логику в симуляторе, все работает верно.

Я правильно понимаю, тактовый сигнал частотой 50МГц Вы делите на 2в10-й?
Если да, то получаемая частота (~48.8 кГц) слишком высока для "надежного" наблюдения при помощи глаз
Go to the top of the page
 
+Quote Post
Ensom ulv
сообщение Mar 4 2015, 21:49
Сообщение #4





Группа: Участник
Сообщений: 11
Регистрация: 16-02-15
Пользователь №: 85 190



Цитата(Александр77 @ Mar 4 2015, 15:44) *
Я правильно понимаю, тактовый сигнал частотой 50МГц Вы делите на 2в10-й?
Если да, то получаемая частота (~48.8 кГц) слишком высока для "надежного" наблюдения при помощи глаз

CLK я вывел на кнопку, как работать с кварцем я пока не разобрался толком.
На плате стоит защита от дребезка.
Так же замена cnt с variable на signal ситуации не изменило.
Go to the top of the page
 
+Quote Post
Александр77
сообщение Mar 5 2015, 17:31
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 608
Регистрация: 10-07-09
Из: Дубна, Московская область
Пользователь №: 51 111



Цитата(Ensom ulv @ Mar 5 2015, 00:49) *
CLK я вывел на кнопку, как работать с кварцем я пока не разобрался толком.
На плате стоит защита от дребезка.
Так же замена cnt с variable на signal ситуации не изменило.

Кварцевый генератор начинает работать сразу же после подачи питания, все что Вам надо - посмотреть в мануале на какой вывод он заведен.
Не претендуя на истину в последней инстанции, выкладываю пример моего счетчика.
Код
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity Count16 is
port(
    clk, rst, ena,up:in std_logic;
    Dout:out std_logic_vector(15 downto 0);
    carry:out std_logic    
    );
end entity;

architecture cn of count16 is

begin
process(clk)
variable cnt_v:unsigned(16 downto 0);
variable car_v:std_logic;
constant zero:unsigned(16 downto 0):="00000000000000000";
constant step:unsigned(16 downto 0):="00000000000000001";
constant max:unsigned(16 downto 0):="10000000000000000";
variable up_v:std_logic_vector(2 downto 0);
begin
    if(rising_edge(clk))then
        up_v:=up_v(1 downto 0)&up;--shift for detect rising edge
        if(rst='1')then
            cnt_v:=zero;
            car_v:='0';
            up_v:="000";
        else
            if(ena='1')then
                if(car_v='0')then
                    if(up_v="011")then
                        cnt_v:=cnt_v+step;
                        if(cnt_v>=max)then
                            car_v:='1';
                        else
                            car_v:='0';
                        end if;
                    end if;
                end if;
            end if;
        end if;
        Dout<=std_logic_vector(cnt_v(15 downto 0));
        carry<=car_v;
    end if;
end process;

end cn;

Сигнал clk-тактирование, ena -разрешение счета, rst-сброс, up- инкремент счетчика (при rst=0 и ena =1).
Dout- выход счетчика, carry- признак достижения максимума.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Ensom ulv   Заливка проекта на плату DE0. некорректная работа   Mar 3 2015, 18:30
- - Александр77   1) счетчик у Вас с асинхронным сбросом, но на стар...   Mar 3 2015, 19:21
|- - Stewart Little   Цитата(Александр77 @ Mar 3 2015, 22:21) 2...   Mar 7 2015, 07:02
|- - DuHast   Цитата(Ensom ulv @ Mar 5 2015, 00:49) CLK...   Mar 5 2015, 18:39
- - XVR   Цитата(Ensom ulv @ Mar 3 2015, 21:30) све...   Mar 4 2015, 12:45
- - novartis   Замените свой счетчик cnt сигналом, сейчас он у ва...   Mar 4 2015, 13:55
- - Ensom ulv   Все заработало! Хоть и не так, как планировало...   Mar 6 2015, 12:23
|- - DuHast   Цитата(Ensom ulv @ Mar 6 2015, 15:23) Но ...   Mar 6 2015, 17:36
|- - Александр77   Цитата(Ensom ulv @ Mar 6 2015, 15:23) А е...   Mar 7 2015, 07:01
- - Ensom ulv   буду разбираться!) всем большое спасибо за пом...   Mar 6 2015, 22:19
- - iosifk   Цитата(Ensom ulv @ Mar 7 2015, 01:19) буд...   Mar 7 2015, 07:56


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

 


RSS Текстовая версия Сейчас: 29th July 2025 - 16:26
Рейтинг@Mail.ru


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