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

 
 
 
Reply to this topicStart new topic
> XC9572 Binary Counter, Простой счетчик чудит
shell_inspector
сообщение Jan 11 2006, 15:15
Сообщение #1





Группа: Новичок
Сообщений: 3
Регистрация: 11-01-06
Пользователь №: 13 061



Мужики, делаю элементарный 8-и битовый двоичный счетчик на ISE7.1 для XC9572-PC44 CPLD. Сигналы счетчика вывожу через IO выходы. По идее, частота каждого следущего бита досжна делиться на два. У меня же частота всех равна половине CLK (CLK/2) плюс некоторые биты "дергаются" словно шум по фазе. Не могу понять в чем дело. Вроде нет ни ошибок с компиляцией ни с загрузкой.
С сигналом CLEAR и CLK Все нормально. Исходник взят из справочника на инете:
--------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;


entity counter is
Port (
CLEAR: in std_logic;
Q5: out std_logic_vector(7 downto 0);
CLK : in std_logic);
end counter;

architecture Behavioral of counter is

signal Q5_IN : std_logic_vector(7 downto 0); -- Defines internal signals
begin
Q5 <= Q5_IN; -- Set output
process(CLEAR, CLK) begin
if CLEAR='1' then -- Clear counter ?
Q5_IN <= "00000000"; -- Yes. Clear counter
elsif CLK='1' and CLK'event then -- Clock rising edge ?

if Q5_IN=128 then -- Yes. Count = 4 ?
Q5_IN <= "00000000"; -- Yes. Clear counter
else -- No
Q5_IN <= Q5_IN + '1'; -- Count-up
end if;

end if;
end process;
end Behavioral;
Go to the top of the page
 
+Quote Post
Elresearch
сообщение Jan 11 2006, 15:56
Сообщение #2


Местный
***

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



Вот два примера из Active-HDL. попробуйте их.

--library IEEE;
--use IEEE.std_logic_1164.all;
--use IEEE.STD_LOGIC_UNSIGNED.all;
-- CLK: in STD_LOGIC;
-- RESET: in STD_LOGIC;
-- CE: in STD_LOGIC;
-- LOAD: in STD_LOGIC;
-- DIR: in STD_LOGIC;
-- DIN: in STD_LOGIC_VECTOR (3 downto 0);
-- COUNT: out STD_LOGIC_VECTOR (3 downto 0)
signal COUNT_INT: STD_LOGIC_VECTOR(3 downto 0);
begin
process (CLK, RESET)
begin
if RESET = '1' then
COUNT_INT <= (others => '0');
elsif CLK'event and CLK='1' then
-- elsif rising_edge(CLK) then
if LOAD = '1' then
COUNT_INT <= DIN;
else
if CE = '1' then
if DIR = '1' then --count up
COUNT_INT <= COUNT_INT + 1;
else --count down
COUNT_INT <= COUNT_INT - 1;
end if;
end if;
end if;
end if;
end process;
COUNT <= COUNT_INT;

=========================


-- 0 to 15 Synchronous Counter (for INTEGERS)
-- CLK: in STD_LOGIC;
-- RESET: in STD_LOGIC;
-- CE, LOAD, DIR: in STD_LOGIC;
-- DIN: in INTEGER range 0 to 15;
-- COUNT: out INTEGER range 0 to 15;

--auxiliary signal COUNTER declaration
--the output port "COUNT" cannot appear on the right side of assignment
--statements
signal COUNTER: INTEGER range 0 to 15;

begin
process (CLK, RESET)
begin
if RESET='1' then
COUNTER <= 0;
elsif CLK='1' and CLK'event then
if LOAD='1' then
COUNTER <= DIN;
else
if CE='1' then
if DIR='1' then
if COUNTER = 15 then
COUNTER <= 0;
else
COUNTER <= COUNTER + 1;
end if;
else
if COUNTER = 0 then
COUNTER <= 15;
else
COUNTER <= COUNTER - 1;
end if;
end if;
end if;
end if;
end if;
end process;
COUNT <= COUNTER;
Go to the top of the page
 
+Quote Post
sazh
сообщение Jan 11 2006, 19:15
Сообщение #3


Гуру
******

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



//Мужики, делаю элементарный 8-и битовый двоичный счетчик на ISE7.1 для XC9572-PC44 CPLD. Сигналы счетчика вывожу через IO выходы. По идее, частота каждого следущего бита досжна делиться на два. У меня же частота всех равна половине CLK (CLK/2) плюс некоторые биты "дергаются" словно шум по фазе. Не могу понять в чем дело. Вроде нет ни ошибок с компиляцией ни с загрузкой.
С сигналом CLEAR и CLK Все нормально. Исходник взят из справочника на инете://

В Quartuse все работат. Нормальный делитель на 129 с асинхронной установкой в ноль.
Где дергаются биты? Если при временном моделировании, проверьте установленный в тестбенче период клока. Может на такой частоте кристалл не работает.
Go to the top of the page
 
+Quote Post
shell_inspector
сообщение Jan 11 2006, 20:49
Сообщение #4





Группа: Новичок
Сообщений: 3
Регистрация: 11-01-06
Пользователь №: 13 061



Спасибо,

Сигнал дергается во времени на осцилоцграфе, по типу: ..1,0,1,0,1,0 и врдуг опять 0,1,0... Частота "клока" маленькая - не больше 1кHz.
Тест бенч на ISE 7.1.1 я писать не умею, не знаю где что вставлять. Раньше в унив. делал что то подобное в Xilinx Foundation. В принципе подобный делитеь можно записать и в другом духе, что я и пробовал, работает нормально. Ошибки в моем исходнике нет точно, так как такими же (почти) исходниками полон и интернет и книги по VHDL. Я подозреваю ошибку в прогр. обеспечении ISE 7.1. или сам чип тормозит. Или какие установки типа user time cosntraints и прочее. Обидно, не хочется просто так бросить этот пустяк так и не разобравшись в чем дело. Два дня уже на это потратил.
Elresearch, попробую твои вещи завтра, но почти уверен что тоже не пойдет. Что то он не любит конструкцию типа:
COUNT_INT <= COUNT_INT + 1;
Go to the top of the page
 
+Quote Post
sazh
сообщение Jan 11 2006, 21:31
Сообщение #5


Гуру
******

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



//Сигнал дергается во времени на осцилоцграфе, по типу: ..1,0,1,0,1,0 и врдуг опять 0,1,0... Частота "клока" маленькая - не больше 1кHz.
Тест бенч на ISE 7.1.1 я писать не умею, не знаю где что вставлять. Раньше в унив. делал что то подобное в Xilinx Foundation. В принципе подобный делитеь можно записать и в другом духе, что я и пробовал, работает нормально. Ошибки в моем исходнике нет точно, так как такими же (почти) исходниками полон и интернет и книги по VHDL. Я подозреваю ошибку в прогр. обеспечении ISE 7.1. или сам чип тормозит. Или какие установки типа user time cosntraints и прочее. Обидно, не хочется просто так бросить этот пустяк так и не разобравшись в чем дело. Два дня уже на это потратил.
Elresearch, попробую твои вещи завтра, но почти уверен что тоже не пойдет. Что то он не любит конструкцию типа:
COUNT_INT <= COUNT_INT + 1//
К Вашему ISE нужен моделсим. Это лучше, чем осциллограф. (Наверно на внутренней синхронизации смотрите. Сколько ему лет). ISE точно не причем. И ограничения тут нет. На одной частоте все работает.
И конструкция эта самая любимая. Скачайте с сайта xilinx xst.pdf (синтезабельное hdl описание библиотечных элементов).
Go to the top of the page
 
+Quote Post
des00
сообщение Jan 12 2006, 05:50
Сообщение #6


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

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



Цитата(sazh @ Jan 11 2006, 16:31) *
И конструкция эта самая любимая. Скачайте с сайта xilinx xst.pdf (синтезабельное hdl описание библиотечных элементов).


Имхо не самая хорошая smile.gif я бы заменил clr на синхронный ресет + в зависимости от частоты работы счетчика, сделал бы конвееризированный сброс.

Хотя ИМХО это для FPGA хорошо smile.gif


--------------------
Go to the top of the page
 
+Quote Post
sazh
сообщение Jan 12 2006, 07:24
Сообщение #7


Гуру
******

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



В зависимости от частоты работы счетчика, сделал бы конвееризированный сброс.
Поясните пожалуйста.
Go to the top of the page
 
+Quote Post
Hilter
сообщение Jan 12 2006, 07:43
Сообщение #8


Участник
*

Группа: Новичок
Сообщений: 23
Регистрация: 18-11-04
Из: Чернигов, Украина
Пользователь №: 1 167



возможная проблема Вашего кода - это именование сигнала,
Q5 - не очень удачное название для вектора (названия векторов
не должны заканчиваться на цифру) при этом возможно разный
синтез на разных синтезаторах (некоторые из них образуют
названия сигналов вектора дописыванием цифры к имени вектора)


--------------------
WBR KNK
Go to the top of the page
 
+Quote Post
des00
сообщение Jan 12 2006, 11:45
Сообщение #9


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

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



Цитата(sazh @ Jan 12 2006, 02:24) *
В зависимости от частоты работы счетчика, сделал бы конвееризированный сброс.
Поясните пожалуйста.


Хмм ну как, в данной конкретной схеме на выходе счетчика сидит компаратор и уже с его выхода сигнал идет на сброс.
тут есть +, есть минусы, в зависимости от разрядности счечтика. Если разрядность большая, то получаеться "большая" многовходовая функция, что не есть хорошо для ФПГА, но нормально для ЦПЛД, т.к. увеличиваеться кол-во уровнй логики + сигнал же еще на тригеры тащить, по этому ИМХО сравниваем с числом на 1 меньше и на тригер, след. тактом будет нормальный "сильный" сигнал с тригера и времянка этой цепи ИМХО улучшиться.

smile.gif


--------------------
Go to the top of the page
 
+Quote Post
shell_inspector
сообщение Jan 12 2006, 12:39
Сообщение #10





Группа: Новичок
Сообщений: 3
Регистрация: 11-01-06
Пользователь №: 13 061



Ну вот так, я и знал! Версия Webpack ISE7.1.x имеет ошибки. Как только запустил версию 8.1 сразу все заработало.
Go to the top of the page
 
+Quote Post
Elresearch
сообщение Jan 12 2006, 12:44
Сообщение #11


Местный
***

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



Мне кажется что в Вашем коде "чудит" в строке

if Q5_IN=128 then -- Yes. Count = 4 ?
Q5_IN <= "00000000"; -- Yes. Clear counter

т.к. в двоичном виде 128=10000000 , то после этого значения счетчика становится 00000000
вот вам и два идущих подряд 0 (проверять не проверял, но уж больно похоже ;-))

попробуйте

if Q5_IN=127 then -- Yes. Count = 4 ?
Q5_IN <= "00000000"; -- Yes. Clear counter

и посмотрите что произойдет.
Go to the top of the page
 
+Quote Post
kas
сообщение Jan 15 2006, 04:43
Сообщение #12


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

Группа: Свой
Сообщений: 77
Регистрация: 17-05-05
Из: Красноярск
Пользователь №: 5 108



IMXO. Может и ISE тут не причем. У Вас асинхронный сброс счетчика. Вам уже на это указывали. Сменив версию софта, вероятнее всего немного изменилась прошивка для ПЛИС. Переделайте свой проект на синхронный.
Go to the top of the page
 
+Quote Post
alexr22b
сообщение Jan 15 2006, 06:00
Сообщение #13


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

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



Надеюсь что хоть частота клока и небольшая, но фронты у него крутые ? Даташит по-моему говорит 5-10нс. Иначе будут ложные срабатывания.
Go to the top of the page
 
+Quote Post

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

 


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


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