|
VHDL против СХЕМАТИКИ, задача намба ту |
|
|
|
May 4 2008, 10:58
|

Знающий
   
Группа: Свой
Сообщений: 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мксек ? Спасибо заранее  забыл сказать- использую ISE 9.2i XILINX Посчитал частоты, получилось 160МГц, 64МГц, 32МГц, 16МГц, 6.4МГц, 3.2МГц, 1.6МГц, 640кГц. Однако, внешний кварцгенератор на 160МГц- потянет ли его ПЛИСка?  для показаний в 0.25мксек правда нужен на 128МГц
--------------------
|
|
|
|
|
May 4 2008, 11:48
|

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

|
Цитата(andreichk @ May 4 2008, 20:28)  заменить обычные двоичные счётчики, кодом , чтобы деление частот не было кратным двум Некратным 2? Можно. Можно и на 3 делить, и на 5, нет проблем. Можно даже на дробное число делить, например, так: сначала делим на 2, потом на 3, потом опять на 2, и т.д. Только к "схематике" или "VHDL" это не имеет отношения. Если хочется такое сделать, то можно и в схематике сделать, и в VHDL.
|
|
|
|
|
May 4 2008, 12:13
|

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)
|
|
|
|
|
May 4 2008, 12:41
|

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

|
Цитата(andreichk @ May 4 2008, 15:39)  да мне без разницы как, вы только научите Какой кристалл планируется использовать?
|
|
|
|
|
May 4 2008, 12:48
|

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 МГц.
|
|
|
|
|
May 4 2008, 13:08
|

Частый гость
 
Группа: Свой
Сообщений: 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= не вижу смысла, т.к. частота корреллируема и разницы по фронтам нет. А вот от разных генераторов можно попробовать, сейчас прикину.
|
|
|
|
|
May 4 2008, 13:18
|

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

|
Цитата(chds @ May 4 2008, 22:38)  Переключаться так как предлагал =AK= не вижу смысла, т.к. частота корреллируема и разницы по фронтам нет. Насчет "смысла" - это к автору топика. Бог его знает, что ему нужно. Если нужна "честная" частота, то без PLL не сделаешь. Но он-то не этого просит. Он просит рассказать, как можно в схематике сделать то, что можно сделать в VHDL. PLL и к схематику, и к VHDL относится одинаково фиолетово. Но может, ему годится "дерганная" частота, то положение фронтов не играет рояли, главное иметь нужное кол-во фронтов за заданное время, кто его знает. Но опять, нефиг противопоставлять схематик и VHDL, и там и там это делается одинаково.
|
|
|
|
|
May 4 2008, 13:26
|

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

|
Цитата Насчет "смысла" - это к автору топика. Бог его знает, что ему нужно. Если нужна "честная" частота, то без PLL не сделаешь. Да, нужна нормальнаая частота для тактирования ФИФО Цитата Но он-то не этого просит. Он просит рассказать, как можно в схематике сделать то, что можно сделать в VHDL. PLL и к схематику, и к VHDL относится одинаково фиолетово. я этого не знал Цитата Но может, ему годится "дерганная" частота, то положение фронтов не играет рояли, главное иметь нужное кол-во фронтов за заданное время, кто его знает. не годится наверное Цитата Но опять, нефиг противопоставлять схематик и VHDL, и там и там это делается одинаково. а я и не противопоставляю, просто не представляю себе как то , о чём я просил сделать в схематике.Спасибо за то, что вы мне разьяснили а насчёт одинаково, тут вы неправы, одно дело кубики складывать и совсем другое букоФки писать
--------------------
|
|
|
|
|
May 4 2008, 13:36
|

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

|
Цитата(=AK= @ May 4 2008, 16:18)  Насчет "смысла" - это к автору топика. Бог его знает, что ему нужно.... Тут 100% солидарен Просто на схеме увидел надписи FIFO_WR и решил, что нужна честная частота. Цитата а насчёт одинаково, тут вы неправы, одно дело кубики складывать и совсем другое букоФки писать Кубики складывают и обезьянки на опятах зоологов, только от этого они людьми не становятся. Знание и умение адекватно использовать языки описания аппаратных средств, аки VHDL, Verilog это совершено другой уровень проектировщика. Я не против визуального отображения структуры проекта в виде крупноузловой схемы, но реализации на схематике сложнее счетчика до 8 приведет к таким неоправданным тратам временного ресурса, что я не считаю возможным применять его в своих проектах. А как было справедливо замечено использование особенностей любого кристалла одинаково как для схематики так и для HDL. Кстати, схематик в 90% переводится на HDL средами проектирования.
|
|
|
|
|
May 4 2008, 14:05
|

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

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

Частый гость
 
Группа: Свой
Сообщений: 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 к схемотехническому проекту, на сколько я помню, я Вам пошагово отписывал. Так что обратитесь к истории.
|
|
|
|
|
May 4 2008, 15:49
|

Знающий
   
Группа: Свой
Сообщений: 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;
--------------------
|
|
|
|
|
May 4 2008, 18:19
|

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

|
на эту строку Цитата cnt : process (clk80) пишет Line 46. parse error, unexpected IDENTIFIER  я её закрываю , а он на эту строчку Цитата 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а если и её закрыть, то все ошибки исчезают, но работать наверное не будет, щас проверю точно, не работает
--------------------
|
|
|
|
|
May 4 2008, 20:22
|

Силовик-затейник
   
Группа: Модераторы
Сообщений: 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
|
|
|
|
|
May 6 2008, 08:43
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(andreichk @ May 4 2008, 16:45)  всё тот же ХС9572 РС44 Можно попробовать сделать DSS, ресурсов должно хватить, но может не хватить быстродействия  (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
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|