Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: VHDL против СХЕМАТИКИ
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
andreichk
Привет народ. Вот такой вопрос имею.
Есть схема
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МГц
=AK=
Цитата(andreichk @ May 4 2008, 20:28) *
заменить обычные двоичные счётчики, кодом , чтобы деление частот не было кратным двум

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

Только к "схематике" или "VHDL" это не имеет отношения. Если хочется такое сделать, то можно и в схематике сделать, и в VHDL.
andreichk
тогда расскажите плиз как в схематике разделить 80 на 1.25
=AK=
Цитата(andreichk @ May 4 2008, 21:36) *
тогда расскажите плиз как в схематике разделить 80 на 1.25

Так же, как в VHDL. Поставить делитель 80 МГц на 2, получится 40 МГц. Поставить мультиплексор, который будет переключать сигнал между 80 МГц и 40 МГц. Поставить автомат, управляющий мультиплексором, который будет обеспечивать на выходе мультиплексора нужную вам смесь импульсов частоты 80 МГц и 40 МГц, чтобы в среднем, за большой интервал времени, получалась частота 64 МГц (то есть, 80 Мгц : 1.25)
andreichk
насчёт автомата, управляющего мультиплексором, можно поподробней
chds
А почему не использовать для деления DLL/DCM, запрожить их на разные частоты, а потм выбирать нужную?
andreichk
Цитата(chds @ May 4 2008, 14:35) *
А почему не использовать для деления DLL/DCM, запрожить их на разные частоты, а потм выбирать нужную?

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

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

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

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

Ставите счетчик на 8, который клокается от 80 МГц. На его выходе ставите компараторы, которые сравнивают с 0 и с 6. Когда счетчик досчитает до 6, устанавливаете триггер, выход которого управляет мультиплексором. После этого на выходе мультиплексора пойдет 40 МГц. Когда счетчик переполнится и станет равным 0, сбрасываете триггер, после этого на выходе мультиплексора идет частота 80 МГц.
chds
Цитата
всё тот же ХС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= не вижу смысла, т.к. частота корреллируема и разницы по фронтам нет.
А вот от разных генераторов можно попробовать, сейчас прикину.
andreichk
нашёл, где можно купить кварцгенераторы на 125 и 133 МГц. Может на них чегось получить можно?
=AK=
Цитата(chds @ May 4 2008, 22:38) *
Переключаться так как предлагал =AK= не вижу смысла, т.к. частота корреллируема и разницы по фронтам нет.

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

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

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

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

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

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

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

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

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

а я и не противопоставляю, просто не представляю себе как то , о чём я просил сделать в схематике.Спасибо за то, что вы мне разьяснили beer.gif
а насчёт одинаково, тут вы неправы, одно дело кубики складывать и совсем другое букоФки писать
chds
Цитата(=AK= @ May 4 2008, 16:18) *
Насчет "смысла" - это к автору топика. Бог его знает, что ему нужно....

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

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

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

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

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

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

давайте вернёмся к этому вопросу
andreichk
Ну вот , все куда-то убежали, а я уже научился делать свои символы и переносить их в проект.Только он пустой.Научите меня заполнять его кодом на VHDL ну хотябы для простоты понимания двумя двоичными счётчиками. beer.gif
chds
Код делителя:
Код
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 к схемотехническому проекту, на сколько я помню, я Вам пошагово отписывал. Так что обратитесь к истории.
andreichk
Спасибо за код.Вы мне описывали как его встраивать, это я усвоил.А как заполнять не научили
А , вот нашёл.
Это оно так должно выглядеть ?
Код
----------------------------------------------------------------------------------
-- 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;
andreichk
на эту строку
Цитата
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
а если и её закрыть, то все ошибки исчезают, но работать наверное не будет, щас проверю
точно, не работает
Very_hard
После строки
signal cnt : std_logic_vector(7 downto 0);

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

Цитата
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
Very_hard
Знаете, если просто читать лог ошибок и предупреждений, можно многое понять самостоятельно... а не постить каждую ошибку на форуме. Да и книги по вхдлу не отменяли.
В данном случае в схеме у Вас нет ни сигнала, ни порта clk80, а Вы описываете процесс с его участием, вот и получается ошибка. Замените clk80 на IN80, например, т.к. IN80 у Вас есть в портах.
andreichk
знаете, я догадался заменить, то , о чём вы пишете и получил вот это
Цитата
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
Omen_13
Цитата
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 и т.д.
andreichk
Вот спасибо мил человек 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;
XVR
Цитата(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
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.