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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> VHDL против СХЕМАТИКИ, задача намба ту
andreichk
сообщение May 4 2008, 10:58
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 507
Регистрация: 15-04-06
Из: Германия
Пользователь №: 16 143



Привет народ. Вот такой вопрос имею.
Есть схема
http://electronix.ru/forum/index.php?act=A...st&id=20422
в которой на вход подаётся тактовая частота 80МГц.
на выходе мультиплексора(любого из двух), в зависимости от состояния на управляющих ножках имеется сигнал с частотой от 80МГц и далее делением на 2, то есть 40МГц, 20Мгц, 10МГц, 5Мгц, 2.5МГц, 1.25МГц и 625кГц.
При этом, чтобы показания соответствовали истиным, на ЖКИ выводятся следующие значения 0.4мксек, 0.8 мксек, 1.6мксек, 3.2мксек, 6.4 мксек, 12.8 мксек, 25.6 мксек и 51.2 мксек.
Так вот вопрос- можно ли сделать вставку в схематику ,написанную в VHDL, или точнее будет сказать заменить обычные двоичные счётчики, кодом , чтобы деление частот не было кратным двум, а на выходе мультиплексора были такие частоты, чтобы я мог на ЖКИ написать0.2мксек, 0.5мксек, 1.0мксек, 2.0мксек, 5.0мксек, 10мксек, 20мксек и 50мксек ? Спасибо заранее beer.gif help.gif
забыл сказать- использую ISE 9.2i XILINX
Посчитал частоты, получилось 160МГц, 64МГц, 32МГц, 16МГц, 6.4МГц, 3.2МГц, 1.6МГц, 640кГц.
Однако, внешний кварцгенератор на 160МГц- потянет ли его ПЛИСка? 07.gif
для показаний в 0.25мксек правда нужен на 128МГц


--------------------
Go to the top of the page
 
+Quote Post
=AK=
сообщение May 4 2008, 11:48
Сообщение #2


pontificator
******

Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483



Цитата(andreichk @ May 4 2008, 20:28) *
заменить обычные двоичные счётчики, кодом , чтобы деление частот не было кратным двум

Некратным 2? Можно. Можно и на 3 делить, и на 5, нет проблем. Можно даже на дробное число делить, например, так: сначала делим на 2, потом на 3, потом опять на 2, и т.д.

Только к "схематике" или "VHDL" это не имеет отношения. Если хочется такое сделать, то можно и в схематике сделать, и в VHDL.
Go to the top of the page
 
+Quote Post
andreichk
сообщение May 4 2008, 12:06
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 507
Регистрация: 15-04-06
Из: Германия
Пользователь №: 16 143



тогда расскажите плиз как в схематике разделить 80 на 1.25


--------------------
Go to the top of the page
 
+Quote Post
=AK=
сообщение May 4 2008, 12:13
Сообщение #4


pontificator
******

Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483



Цитата(andreichk @ May 4 2008, 21:36) *
тогда расскажите плиз как в схематике разделить 80 на 1.25

Так же, как в VHDL. Поставить делитель 80 МГц на 2, получится 40 МГц. Поставить мультиплексор, который будет переключать сигнал между 80 МГц и 40 МГц. Поставить автомат, управляющий мультиплексором, который будет обеспечивать на выходе мультиплексора нужную вам смесь импульсов частоты 80 МГц и 40 МГц, чтобы в среднем, за большой интервал времени, получалась частота 64 МГц (то есть, 80 Мгц : 1.25)
Go to the top of the page
 
+Quote Post
andreichk
сообщение May 4 2008, 12:31
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 507
Регистрация: 15-04-06
Из: Германия
Пользователь №: 16 143



насчёт автомата, управляющего мультиплексором, можно поподробней


--------------------
Go to the top of the page
 
+Quote Post
chds
сообщение May 4 2008, 12:35
Сообщение #6


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

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



А почему не использовать для деления DLL/DCM, запрожить их на разные частоты, а потм выбирать нужную?
Go to the top of the page
 
+Quote Post
andreichk
сообщение May 4 2008, 12:39
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 507
Регистрация: 15-04-06
Из: Германия
Пользователь №: 16 143



Цитата(chds @ May 4 2008, 14:35) *
А почему не использовать для деления DLL/DCM, запрожить их на разные частоты, а потм выбирать нужную?

да мне без разницы как, вы только научите


--------------------
Go to the top of the page
 
+Quote Post
chds
сообщение May 4 2008, 12:41
Сообщение #8


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

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



Цитата(andreichk @ May 4 2008, 15:39) *
да мне без разницы как, вы только научите

Какой кристалл планируется использовать?
Go to the top of the page
 
+Quote Post
andreichk
сообщение May 4 2008, 12:45
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 507
Регистрация: 15-04-06
Из: Германия
Пользователь №: 16 143



Цитата(chds @ May 4 2008, 14:41) *
Какой кристалл планируется использовать?

всё тот же ХС9572 РС44


--------------------
Go to the top of the page
 
+Quote Post
=AK=
сообщение May 4 2008, 12:48
Сообщение #10


pontificator
******

Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483



Цитата(andreichk @ May 4 2008, 22:01) *
насчёт автомата, управляющего мультиплексором, можно поподробней

Скажем, нужно вам, чтобы на выходе мультиплексора за 8 интервалов тактовой 80 МГц было 7 импульсов. То есть, 6 импульсов частотой 80 МГц и один импульс частотой 40 МГц.

Ставите счетчик на 8, который клокается от 80 МГц. На его выходе ставите компараторы, которые сравнивают с 0 и с 6. Когда счетчик досчитает до 6, устанавливаете триггер, выход которого управляет мультиплексором. После этого на выходе мультиплексора пойдет 40 МГц. Когда счетчик переполнится и станет равным 0, сбрасываете триггер, после этого на выходе мультиплексора идет частота 80 МГц.
Go to the top of the page
 
+Quote Post
chds
сообщение May 4 2008, 13:08
Сообщение #11


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

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



Цитата
всё тот же ХС9572 РС44


Ну тогда DLL/DCM в пролете. Нет у этого кристалла такого.

На этом кристалле я думаю единственное, что вам доступно - это деление на 2частоты на обычных счетчиках. Если Вам нужно разные сетки частот, то нужно поставить внешние например 100 МГц кварц и тот же 80 МГц. От них делением и выбором можно получить мксек:
0.01,0.02,0.04,0.08,0.16,0.32,0.64,1.28,2.56,5.12,10.24,20.48,40.96 от 100МГц
0.0125,0.025,0.05,0.1,0.2,0.4,0.8,1.6,3.2,6.4,12.8,25.6,51.2 от 80Мгц

Другого выхода я не вижу. Переключаться так как предлагал =AK= не вижу смысла, т.к. частота корреллируема и разницы по фронтам нет.
А вот от разных генераторов можно попробовать, сейчас прикину.
Go to the top of the page
 
+Quote Post
andreichk
сообщение May 4 2008, 13:17
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 507
Регистрация: 15-04-06
Из: Германия
Пользователь №: 16 143



нашёл, где можно купить кварцгенераторы на 125 и 133 МГц. Может на них чегось получить можно?


--------------------
Go to the top of the page
 
+Quote Post
=AK=
сообщение May 4 2008, 13:18
Сообщение #13


pontificator
******

Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483



Цитата(chds @ May 4 2008, 22:38) *
Переключаться так как предлагал =AK= не вижу смысла, т.к. частота корреллируема и разницы по фронтам нет.

Насчет "смысла" - это к автору топика. Бог его знает, что ему нужно. Если нужна "честная" частота, то без PLL не сделаешь.

Но он-то не этого просит. Он просит рассказать, как можно в схематике сделать то, что можно сделать в VHDL. PLL и к схематику, и к VHDL относится одинаково фиолетово.

Но может, ему годится "дерганная" частота, то положение фронтов не играет рояли, главное иметь нужное кол-во фронтов за заданное время, кто его знает. Но опять, нефиг противопоставлять схематик и VHDL, и там и там это делается одинаково.
Go to the top of the page
 
+Quote Post
andreichk
сообщение May 4 2008, 13:26
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 507
Регистрация: 15-04-06
Из: Германия
Пользователь №: 16 143



Цитата
Насчет "смысла" - это к автору топика. Бог его знает, что ему нужно. Если нужна "честная" частота, то без PLL не сделаешь.

Да, нужна нормальнаая частота для тактирования ФИФО

Цитата
Но он-то не этого просит. Он просит рассказать, как можно в схематике сделать то, что можно сделать в VHDL. PLL и к схематику, и к VHDL относится одинаково фиолетово.

я этого не знал

Цитата
Но может, ему годится "дерганная" частота, то положение фронтов не играет рояли, главное иметь нужное кол-во фронтов за заданное время, кто его знает.

не годится наверное

Цитата
Но опять, нефиг противопоставлять схематик и VHDL, и там и там это делается одинаково.

а я и не противопоставляю, просто не представляю себе как то , о чём я просил сделать в схематике.Спасибо за то, что вы мне разьяснили beer.gif
а насчёт одинаково, тут вы неправы, одно дело кубики складывать и совсем другое букоФки писать


--------------------
Go to the top of the page
 
+Quote Post
chds
сообщение May 4 2008, 13:36
Сообщение #15


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

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



Цитата(=AK= @ May 4 2008, 16:18) *
Насчет "смысла" - это к автору топика. Бог его знает, что ему нужно....

Тут 100% солидарен
Просто на схеме увидел надписи FIFO_WR и решил, что нужна честная частота.

Цитата
а насчёт одинаково, тут вы неправы, одно дело кубики складывать и совсем другое букоФки писать

Кубики складывают и обезьянки на опятах зоологов, только от этого они людьми не становятся.
Знание и умение адекватно использовать языки описания аппаратных средств, аки VHDL, Verilog это совершено другой уровень проектировщика. Я не против визуального отображения структуры проекта в виде крупноузловой схемы, но реализации на схематике сложнее счетчика до 8 приведет к таким неоправданным тратам временного ресурса, что я не считаю возможным применять его в своих проектах.

А как было справедливо замечено использование особенностей любого кристалла одинаково как для схематики так и для HDL. Кстати, схематик в 90% переводится на HDL средами проектирования.
Go to the top of the page
 
+Quote Post
andreichk
сообщение May 4 2008, 14:05
Сообщение #16


Знающий
****

Группа: Свой
Сообщений: 507
Регистрация: 15-04-06
Из: Германия
Пользователь №: 16 143



Цитата
На этом кристалле я думаю единственное, что вам доступно - это деление на 2частоты на обычных счетчиках. Если Вам нужно разные сетки частот, то нужно поставить внешние например 100 МГц кварц и тот же 80 МГц. От них делением и выбором можно получить мксек:

за идею спасибо beer.gif

Цитата
А вот от разных генераторов можно попробовать, сейчас прикину.

давайте вернёмся к этому вопросу


--------------------
Go to the top of the page
 
+Quote Post
andreichk
сообщение May 4 2008, 15:29
Сообщение #17


Знающий
****

Группа: Свой
Сообщений: 507
Регистрация: 15-04-06
Из: Германия
Пользователь №: 16 143



Ну вот , все куда-то убежали, а я уже научился делать свои символы и переносить их в проект.Только он пустой.Научите меня заполнять его кодом на VHDL ну хотябы для простоты понимания двумя двоичными счётчиками. beer.gif


--------------------
Go to the top of the page
 
+Quote Post
chds
сообщение May 4 2008, 15:43
Сообщение #18


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

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



Код делителя:
Код
signal cnt : std_logic_vector(7 downto 0);

cnt : process (clk80)
begin
   if (clk80=1 and clk80'event) then
       cnt <= cnt+1;
   end if;
end process;

out1 <= cnt(0);
out2 <= cnt(1);
out3 <= cnt(2);
...
out8 <= cnt(7);


А как добавлять VHDL к схемотехническому проекту, на сколько я помню, я Вам пошагово отписывал. Так что обратитесь к истории.
Go to the top of the page
 
+Quote Post
andreichk
сообщение May 4 2008, 15:49
Сообщение #19


Знающий
****

Группа: Свой
Сообщений: 507
Регистрация: 15-04-06
Из: Германия
Пользователь №: 16 143



Спасибо за код.Вы мне описывали как его встраивать, это я усвоил.А как заполнять не научили
А , вот нашёл.
Это оно так должно выглядеть ?
Код
----------------------------------------------------------------------------------
-- Company:
-- Engineer:
--
-- Create Date:    17:55:55 05/04/2008
-- Design Name:
-- Module Name:    counter - Behavioral
-- Project Name:
-- Target Devices:
-- Tool versions:
-- Description:
--
-- Dependencies:
--
-- Revision:
-- Revision 0.01 - File Created
-- Additional Comments:
--
----------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;

entity counter is
    Port ( IN80 : in  STD_LOGIC;
           IN100 : in  STD_LOGIC;
           OUT1 : out  STD_LOGIC;
           OUT2 : out  STD_LOGIC;
           OUT3 : out  STD_LOGIC;
           OUT4 : out  STD_LOGIC;
           OUT5 : out  STD_LOGIC;
           OUT6 : out  STD_LOGIC;
           OUT7 : out  STD_LOGIC;
           OUT8 : out  STD_LOGIC);
end counter;

architecture Behavioral of counter is

signal cnt : std_logic_vector(7 downto 0);

cnt : process (clk80)
begin
   if (clk80=1 and clk80'event) then
       cnt <= cnt+1;
   end if;
end process;

out1 <= cnt(0);
out2 <= cnt(1);
out3 <= cnt(2);
out4 <= cnt(3);
out5 <= cnt(4);
out6 <= cnt(5);
out7 <= cnt(6);
out8 <= cnt(7);
end Behavioral;


--------------------
Go to the top of the page
 
+Quote Post
andreichk
сообщение May 4 2008, 18:19
Сообщение #20


Знающий
****

Группа: Свой
Сообщений: 507
Регистрация: 15-04-06
Из: Германия
Пользователь №: 16 143



на эту строку
Цитата
cnt : process (clk80)

пишет Line 46. parse error, unexpected IDENTIFIER help.gif
я её закрываю , а он на эту строчку
Цитата
if (clk80=1 and clk80'event) then

пишет Line 50. parse error, unexpected IF
я её закрываю, а он на эту строчку
Цитата
end if;
пишет Line 52. parse error, unexpected IF, expecting SEMICOLON
я и её закрываю, а он на эту строчку
Цитата
end process;
а он пишет
Line 53. parse error, unexpected PROCESS, expecting SEMICOLON
а если и её закрыть, то все ошибки исчезают, но работать наверное не будет, щас проверю
точно, не работает


--------------------
Go to the top of the page
 
+Quote Post
Very_hard
сообщение May 4 2008, 18:27
Сообщение #21


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

Группа: Свой
Сообщений: 183
Регистрация: 10-02-06
Из: Киев, Украина
Пользователь №: 14 188



После строки
signal cnt : std_logic_vector(7 downto 0);

нужно добавить
begin
Go to the top of the page
 
+Quote Post
andreichk
сообщение May 4 2008, 18:45
Сообщение #22


Знающий
****

Группа: Свой
Сообщений: 507
Регистрация: 15-04-06
Из: Германия
Пользователь №: 16 143



должно быть два бегина?

Цитата
ERROR:HDLParsers:3312 - "F:/Projekte/XilinxProjekte/SCOP_SPECTR/OSZILLOGRAF/counter.vhd" Line 47. Undefined symbol 'clk80'.
ERROR:HDLParsers:1209 - "F:/Projekte/XilinxProjekte/SCOP_SPECTR/OSZILLOGRAF/counter.vhd" Line 47. clk80: Undefined symbol (last report in this block)
ERROR:HDLParsers:808 - "F:/Projekte/XilinxProjekte/SCOP_SPECTR/OSZILLOGRAF/counter.vhd" Line 51. = can not have such operands in this context.
ERROR:HDLParsers:1202 - "F:/Projekte/XilinxProjekte/SCOP_SPECTR/OSZILLOGRAF/counter.vhd" Line 54. Redeclaration of symbol cnt.
WARNING:HDLParsers:1406 - "F:/Projekte/XilinxProjekte/SCOP_SPECTR/OSZILLOGRAF/counter.vhd" Line 47. No sensitivity list and no wait in the process


--------------------
Go to the top of the page
 
+Quote Post
Very_hard
сообщение May 4 2008, 19:51
Сообщение #23


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

Группа: Свой
Сообщений: 183
Регистрация: 10-02-06
Из: Киев, Украина
Пользователь №: 14 188



Знаете, если просто читать лог ошибок и предупреждений, можно многое понять самостоятельно... а не постить каждую ошибку на форуме. Да и книги по вхдлу не отменяли.
В данном случае в схеме у Вас нет ни сигнала, ни порта clk80, а Вы описываете процесс с его участием, вот и получается ошибка. Замените clk80 на IN80, например, т.к. IN80 у Вас есть в портах.
Go to the top of the page
 
+Quote Post
andreichk
сообщение May 4 2008, 20:01
Сообщение #24


Знающий
****

Группа: Свой
Сообщений: 507
Регистрация: 15-04-06
Из: Германия
Пользователь №: 16 143



знаете, я догадался заменить, то , о чём вы пишете и получил вот это
Цитата
F:/Projekte/XilinxProjekte/SCOP_SPECTR/OSZILLOGRAF/counter.vhd" Line 53. = can not have such operands in this context.
ERROR:HDLParsers:1202 - "F:/Projekte/XilinxProjekte/SCOP_SPECTR/OSZILLOGRAF/counter.vhd" Line 56. Redeclaration of symbol cnt.

и книжку по теме нашёл, автор П.Н.Бибило, уже как часа три читаю, не хотите не помагйте, вас сюда никто не тащил насильно. До свидания beer.gif


--------------------
Go to the top of the page
 
+Quote Post
Omen_13
сообщение May 4 2008, 20:22
Сообщение #25


Силовик-затейник
****

Группа: Модераторы
Сообщений: 766
Регистрация: 18-02-07
Из: Столица солнечного Башкортостана
Пользователь №: 25 467



Цитата
cnt : process (clk80)
begin
if (clk80=1 and clk80'event) then
cnt <= cnt+1;
end if;
end process;

чего шумите?
Попробуй так:
Код
process (IN80 )
begin
   if (IN80'event and IN80 ='1') then
       cnt <= cnt+'1';
   end if;
end process;

Внимательнее прочитай разделы о переменных. К сигналу пишется '1', для вектора "111", просто 1 для integer и т.д.

Сообщение отредактировал Omen_13 - May 4 2008, 20:24


--------------------
"Вперёд на мины, ордена потом!"
"инжинер/разработчик создает нечто, в отличии от многих других профессий. В этом есть сходность с художниками или музыкантами"(с)CodeWarrior1241
Go to the top of the page
 
+Quote Post
andreichk
сообщение May 4 2008, 20:23
Сообщение #26


Знающий
****

Группа: Свой
Сообщений: 507
Регистрация: 15-04-06
Из: Германия
Пользователь №: 16 143



Вот спасибо мил человек a14.gif всё и заработало

Код
entity counter is
    Port ( IN80 : in  STD_LOGIC;
           IN100 : in STD_LOGIC;
           OUT1 : out STD_LOGIC;
           OUT2 : out STD_LOGIC;
           OUT3 : out STD_LOGIC;
           OUT4 : out STD_LOGIC;
           OUT5 : out STD_LOGIC;
           OUT6 : out STD_LOGIC;
           OUT7 : out STD_LOGIC;
           OUT8 : out STD_LOGIC);
end counter;

architecture Behavioral of counter is

signal counter : std_logic_vector(7 downto 0);

begin

process (IN80 )
begin
if (IN80 ='1' and IN80 'event) then
counter <= counter+'1';
end if;
end process;
    
out1 <= counter(0);
out2 <= counter(1);
out3 <= counter(2);
out4 <= counter(3);
out5 <= counter(4);
out6 <= counter(5);
out7 <= counter(6);
out8 <= counter(7);
end Behavioral;


--------------------
Go to the top of the page
 
+Quote Post
XVR
сообщение May 6 2008, 08:43
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(andreichk @ May 4 2008, 16:45) *
всё тот же ХС9572 РС44
Можно попробовать сделать DSS, ресурсов должно хватить, но может не хватить быстродействия sad.gif

(Verilog, 8ми разрядный DSS,минимальный коэфициент деления - 2)

Код
  

module DSS(input clk, input [6:0] freq, output f_out);

reg [7:0] cnt = 8'b0;

always @(posedge clk)

cnt <= cnt + {1'b0,freq};

assign f_out = cnt[7];

endmodule
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd August 2025 - 16:15
Рейтинг@Mail.ru


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