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

 
 
> Вопрос новичка по Xilinx/VHDL, проблемы
Gas Wilson
сообщение May 26 2008, 12:20
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 39
Регистрация: 11-10-07
Пользователь №: 31 261



Добрый день! Начинаю осваивать vhdl... Создал простой проект в ISE 9.2 но после генерации файла и прошивки его в Spartan 3E sample pack board ничего не работает.. какой то сигнал на выходе есть, но это явно не то что нужно... При этом синтез схемы показывает правельные результаты... Сам не могу разобраться в чём проблема... 05.gif

Код
entity main is
    Port ( clk : in  STD_LOGIC;
           cl1 : out  STD_LOGIC;
           cl2 : out  STD_LOGIC;
           flm : out  STD_LOGIC;
           d0 : out  STD_LOGIC;
           d1 : out  STD_LOGIC;
           d2 : out  STD_LOGIC;
           d3 : out  STD_LOGIC);
end main;

architecture Behavioral of main is

begin

main : process(clk)

variable x_counter : integer :=0;
variable flm_counter : integer :=0;
variable cl2_counter : integer :=0;
variable cl1_counter : integer :=0;
variable clk_counter : integer :=0;
variable cl2_val : std_logic :='0';
variable cl1_val : std_logic :='0';

begin
        if (clk='1') then
        
            clk_counter := clk_counter + 1;
        
            if (clk_counter = 1) then                                        --cl2 rise
            
                cl2_val := not cl2_val;
                cl2 <= cl2_val;
                
                if (cl2_val='1') then                                        --data
            
                    d0 <= '0';
                    d1 <= '0';
                    d2 <= '1';
                    d3 <= '0';
                    
                    cl2_counter := cl2_counter + 1;
                    
                end if;
            
            elsif ((clk_counter = 2) AND (cl2_val  = '1')) then     --cl1
                    
                    cl1_val := not cl1_val;
                    cl1 <= cl1_val;
                    
            elsif (clk_counter = 5) then                                        --cl2 fall
                
                    --cl2_val := '0';
                    --cl2 <= cl2_val;
                    
                    clk_counter := 0;
                    
            end if;
                
            
                                
        end if;
        
                        
end process main;


end Behavioral;


Буду благодарен за любые подсказки! smile.gif При этом схема собранная на Schematic'е прекрасно работает...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 10)
o-henry
сообщение May 26 2008, 12:42
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 435
Регистрация: 8-03-06
Из: степей Украины
Пользователь №: 15 069



для начала, пожалуй, стоит заменить в этом месте:
Код
begin
        if (clk='1') then
        
            clk_counter := clk_counter + 1;


на такой вариант:
Код
begin
        if ( clk'event  and clk='1')
        
            clk_counter := clk_counter + 1;
Go to the top of the page
 
+Quote Post
Gas Wilson
сообщение May 26 2008, 12:54
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 39
Регистрация: 11-10-07
Пользователь №: 31 261



не помогло....
Go to the top of the page
 
+Quote Post
chds
сообщение May 26 2008, 12:56
Сообщение #4


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

Группа: Свой
Сообщений: 173
Регистрация: 5-11-07
Из: Чернигов, Украина
Пользователь №: 32 078



А ножки проекта правильно развели на ножки ПЛИС макетной платы? Т.н. ucf файлец все там правильно и раскоментировано?
Go to the top of the page
 
+Quote Post
Boris_TS
сообщение May 26 2008, 14:01
Сообщение #5


Злополезный
****

Группа: Свой
Сообщений: 608
Регистрация: 19-06-06
Из: Russia Taganrog
Пользователь №: 18 188



А Вы напишите, что хотели сделать... ну или тот самый схематик приложите, что ли... А то непонятно, что же Вы хотели сделать этим кодом.

Вот, например, это место очень подозрительно выглядит:
Код
            clk_counter := clk_counter + 1;
        
            if (clk_counter = 1) then                                        --cl2 rise
            
                cl2_val := not cl2_val;
                cl2 <= cl2_val;
                
                if (cl2_val='1') then
            
                    d0 <= '0';
                    d1 <= '0';
                    d2 <= '1';
                    d3 <= '0';
                    
                    cl2_counter := cl2_counter + 1;
                    
                end if;
Переменная clk_counter "мгновенно" перейдет в состояние '+1' (= 1), и if обязательно сработает... Затем cl2_val "мгновенно" поменяет свое состояние с '0' на '1' и следующий if сработает.... А т.к. сигналам D(3:0) больше нигде не присваиваются значения, то они ВСЕГДА равны D(3:0) = 0100. А зачем тогда весь этот огород городить ??? Даже XST ругается на это:
INFO:Xst:2679 - Register <d0> in unit <main> has a constant value of 0 during circuit operation. The register is replaced by logic.

Прочитайте внимательно про разницу между присвоением переменных и сигналов.
Go to the top of the page
 
+Quote Post
Gas Wilson
сообщение May 26 2008, 17:33
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 39
Регистрация: 11-10-07
Пользователь №: 31 261



Это ещё не доконца дописанная версия - поэтому данные и не меняются. Вообще хочу написать контроллер лсд панельки... clk - тики системы, clk2 - clk/2, clk1 - 1,5clk2 и задержан относительно clk2... Про переменные/сигналы в vhdl знаю. В данном примере важна не логика выполнения а что совсем ничего не генерится... Я хочу понять - почему совсем ничего не генерится...

Цитата(chds @ May 26 2008, 16:56) *
А ножки проекта правильно развели на ножки ПЛИС макетной платы? Т.н. ucf файлец все там правильно и раскоментировано?

Ножки правильно разведены... Завтра с работы кину ucf файл...
Go to the top of the page
 
+Quote Post
hitower1
сообщение May 26 2008, 18:54
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 16-12-05
Пользователь №: 12 301



Gas Wilson Вам имеет смысл посмотреть как подобные вещи делают другие и много вопросов уйдут сами сабой.Например http://opencores.org/projects.cgi/web/lcd/overview
Go to the top of the page
 
+Quote Post
Boris_TS
сообщение May 27 2008, 06:51
Сообщение #8


Злополезный
****

Группа: Свой
Сообщений: 608
Регистрация: 19-06-06
Из: Russia Taganrog
Пользователь №: 18 188



Цитата(Gas Wilson @ May 26 2008, 20:33) *
Вообще хочу написать контроллер лсд панельки... clk - тики системы, clk2 - clk/2, clk1 - 1,5clk2 и задержан относительно clk2...
Лучше приложите временую диаграмку, а то не очень понятно про задержку.

Цитата(Gas Wilson @ May 26 2008, 20:33) *
Про переменные/сигналы в vhdl знаю.
Искрене надеюсь, что так. Но у вас использованы переменные integer - счетчики для них синтезируются 32 разрядные (!!!) и если повезет, как в случае с clk_counter, то после анализа возможных состояний обрезаются до 2 битового счетчика. Лучше используйте std_logic_vector для таких переменных/сигналов, тогда вы сможет правильно задать разрядность вашего счетчика и не будете заставлять синтезатор стадать маразмом. (обязательно ознакомтесь с документом XST.DOC, там расписано как лучше описывать разные синтезируемые конструкции, обратите внимание на то, что в примерах использование integer старательно сведено к необходимому минимому, заменяя его std_logic_vector'ом дабы синтезатору легче было работать - абстракция это хорошо... но Вы же не Visual Basic осваиваете; к томуже, если Вы научитесь видет за языковым описанием схему на примитивах - то сможете проектировать компактные высокоскоростные решения)

Цитата(Gas Wilson @ May 26 2008, 20:33) *
В данном примере важна не логика выполнения а что совсем ничего не генерится... Я хочу понять - почему совсем ничего не генерится...
По поводу логики сильное утвердждение получилось - ценю шутку. Поглядите "View RTL Scematic" может появятся идеи как ненадо описявать логику wink.gif. Также стоит поглядеть "View/Edit Routed Design (FPGA Editor)" - так сказать, увидете результат своих описаний.
С логикой работы в вашей схеме проблема из-за того, что разрешений счете счетчиков "cl1_val" и "cl2_val" (название даны по FPGA_editor'у - вот сделали бы Вы signal и совпадали бы названия линий и языкового описания wink.gif ) берется с компоратора, сравнивающего выход 32 разрядных счеткиков с чем-то... ну что написали (абстракцию) - то и получили.

А Вы проводили PostPar симуляцию ??? Еще ни разу её результаты у меня не расходились с практикой (ну только если ноги поперепутал в UCF).

Поясните, пожалуйса, какие сигналы выведены на осиллограме - уж больно странно выглядит верхний - ни разу не удавалось видеть на выходах ПЛИС трехуровневые сигналы (ну только если она не конфликтовала с другой микросхемой или на конце метровой несогласованной линии). Может там высокочестотное переключение состояний ? (мачштабчик-то у Вас уж больно сжатый, растяните его до 1-5 ns на клетку)
Укажите частоту clk - без нее осциллограма не понятна.
Go to the top of the page
 
+Quote Post
Gas Wilson
сообщение May 27 2008, 08:40
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 39
Регистрация: 11-10-07
Пользователь №: 31 261



Цитата(Boris_TS @ May 27 2008, 10:51) *
Лучше приложите временую диаграмку, а то не очень понятно про задержку.



АААААААААААА ну вот что я сделал - не понятно, но всё заработало...



Сообщение отредактировал Gas Wilson - May 27 2008, 08:42
Go to the top of the page
 
+Quote Post
Wild
сообщение May 27 2008, 12:49
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 216
Регистрация: 26-05-06
Из: Коломна
Пользователь №: 17 479



У вас по коду генерируется асинхронная логика с обратными связями.
А это:
Цитата(Gas Wilson @ May 26 2008, 16:20) *
clk_counter := clk_counter + 1;


cl2_counter := cl2_counter + 1;

что?
Счетчики считают в + бесконечность?
Go to the top of the page
 
+Quote Post
Boris_TS
сообщение May 27 2008, 15:09
Сообщение #11


Злополезный
****

Группа: Свой
Сообщений: 608
Регистрация: 19-06-06
Из: Russia Taganrog
Пользователь №: 18 188



Цитата(Wild @ May 27 2008, 15:49) *
Счетчики считают в + бесконечность?
Ну какая + бесконечность в VHDL... в нем у каждого типа есть свой предел (для integer это всего лишь 2^32-1), о чем и писалось ранее (про 32 битный счетчик). А счетчик clk_counter - считает только до 4 (при 5 так сказать "сброс" в 0).
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 4th August 2025 - 08:48
Рейтинг@Mail.ru


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