XBG432 0 24 июня, 2008 Опубликовано 24 июня, 2008 · Жалоба Имеется описание двоичного счетчика на VHDL (vector <= vector +1). После синтеза в RTL View вижу триггеры и сумматор. Как развернуть вид сумматора до вентилей, кто может подсказать? (ISE 9.2.04i) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MKS 0 24 июня, 2008 Опубликовано 24 июня, 2008 · Жалоба Использовать technology view Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 24 июня, 2008 Опубликовано 24 июня, 2008 · Жалоба Имеется описание двоичного счетчика на VHDL (vector <= vector +1). После синтеза в RTL View вижу триггеры и сумматор. Как развернуть вид сумматора до вентилей, кто может подсказать? (ISE 9.2.04i) Можешь предоставить код? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
XBG432 0 24 июня, 2008 Опубликовано 24 июня, 2008 · Жалоба Использовать technology view Это понятно, но к технологии привязка не нужна. Необходимо увидеть счетчик в RTL-примитивах, пуст это будут многовходовые вентили, но не до уровня сумматора. Можешь предоставить код? Все просто ... signal count: std_logic_vector(N-1 downto 0); ... Counter:process(CLK,RST) begin if RST='1' then count <= (others=>'0'); elsif CLK'event and CLK='1' then count <= count +1; end if; end process; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 24 июня, 2008 Опубликовано 24 июня, 2008 · Жалоба Это понятно, но к технологии привязка не нужна. Необходимо увидеть счетчик в RTL-примитивах, пуст это будут многовходовые вентили, но не до уровня сумматора. Все просто ... signal count: std_logic_vector(N-1 downto 0); ... Counter:process(CLK,RST) begin if RST='1' then count <= (others=>'0'); elsif CLK'event and CLK='1' then count <= count +1; end if; end process; Извини, еще вопрос, а что в отчете Synthesis Report, пишется? По логике вещей там должно писаться, что-то в таком стиле ========================================================================= * HDL Synthesis * ========================================================================= Performing bidirectional port resolution... Synthesizing Unit <XXX>. Found finite state machine <FSM_0> for signal <s_present>. ----------------------------------------------------------------------- | States | 128 | | Transitions | 128 | | Inputs | 0 | | Outputs | 128 | | Clock | clk (rising_edge) | | Clock enable | en (positive) | | Reset | enab (negative) | | Reset type | asynchronous | | Reset State | s0 | | Power Up State | s0 | | Encoding | compact | | Implementation | LUT | ----------------------------------------------------------------------- Found 16-bit adder for signal <$addsub0000> created at line 98. Found 16-bit comparator lessequal for signal <$cmp_le0000>. Found 16-bit adder for signal <$share0000> created at line 114. Found 8-bit up counter for signal <data>. Found 8-bit register for signal <data_int>. Found 8-bit register for signal <data_out>. Found 1-bit register for signal <en>. Found 1-bit register for signal <enab>. Found 8-bit up counter for signal <num>. Found 8-bit register for signal <receive>. Found 16-bit register for signal <rx_state>. Found 1-bit register for signal <tx_int>. Found 16-bit register for signal <tx_state>. Summary: inferred 1 Finite State Machine(s). inferred 2 Counter(s). inferred 59 D-type flip-flop(s). inferred 2 Adder/Subtractor(s). inferred 1 Comparator(s). Unit <XXX> synthesized. HDL Synthesis Report Macro Statistics # Adders/Subtractors : 2 16-bit adder : 2 # Counters : 2 8-bit up counter : 2 # Registers : 15 1-bit register : 11 16-bit register : 2 8-bit register : 2 # Comparators : 1 16-bit comparator lessequal : 1 Там ты должен увидеть что применен правильный макрос для соответствующего описания цифровой схемы. ВСЕ ПРАВИЛЬНО: Конструкция: count <= count +1; дает сумматор на выходе а конструкция, вида: count <= count + "00000001"; даст счетчик. Ниже привожу пример 8 разрядного счетчика Описание портов: clk − вход тактовой частоты; en − вход разрешения; clear − вход сброса счетчика; count – 8 разрядный выход. library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity counter is Port ( clk : in std_logic; en : in std_logic; rst : in std_logic; count : out std_logic_vector(7 downto 0)); end counter; architecture behavioral of counter is signal cnt: std_logic_vector (7 downto 0):= "00000000"; begin pr_d_e: process (clk, en, cnt, rst) begin if (rst = '0') then cnt <= (others => '0'); elsif (clk'event and clk = '1') then if (en = '1') then cnt <= cnt + "00000001"; end if; end if; count <= cnt; end process pr_d_e; end behavioral; Попробуй, надеюсь получится! Удачи!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
avesat 0 24 июня, 2008 Опубликовано 24 июня, 2008 · Жалоба FPGA Editor или Floorplanner Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 24 июня, 2008 Опубликовано 24 июня, 2008 · Жалоба Попробуй, надеюсь получится! Удачи!!! Ну и к чему эти навороты в процессе. Этож нечитаемо. signal cnt: std_logic_vector (7 downto 0):= "00000000"; begin pr_d_e: process (clk, rst) begin if (rst = '0') then cnt <= (others => '0'); elsif (clk'event and clk = '1') then if (en = '1') then cnt <= cnt + "00000001"; end if; end if; end process pr_d_e; count <= cnt; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 24 июня, 2008 Опубликовано 24 июня, 2008 · Жалоба Ну и к чему эти навороты в процессе. Этож нечитаемо. signal cnt: std_logic_vector (7 downto 0):= "00000000"; begin pr_d_e: process (clk, rst) begin if (rst = '0') then cnt <= (others => '0'); elsif (clk'event and clk = '1') then if (en = '1') then cnt <= cnt + "00000001"; end if; end if; end process pr_d_e; count <= cnt; Можно поподробнее, что за навороты Вы имеете ввиду??? И почему нечитаемо, в чем сложность кода?? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 24 июня, 2008 Опубликовано 24 июня, 2008 · Жалоба Можно поподробнее, что за навороты Вы имеете ввиду??? И почему нечитаемо, в чем сложность кода?? Вы описали провод в теле процесса. Перечислели его. Надо считать if - else. Чтобы убедиться, что это провод, а не регистр. Вне процесса по клоку регистр не опишешь. Впрочем я не настаиваю. Я не пишу на VHDL. Но xst.pdf мне по нраву. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 24 июня, 2008 Опубликовано 24 июня, 2008 · Жалоба Вы описали провод в теле процесса. Перечислели его. Надо считать if - else. Чтобы убедиться, что это провод, а не регистр. Вне процесса по клоку регистр не опишешь. Впрочем я не настаиваю. Я не пишу на VHDL. Но xst.pdf мне по нраву. Просто когда я добавил строку count <= cnt; вне процесса и только тогда я увидел нормальные осцилограммы работы на осцилографе :) И про это прочитал в статейке. http://chipnews.gaw.ru/html.cgi/arhiv_i/99_02/stat-33.htm Тоже самое во вложении А сейчас это использую уже как говорится на автомате и не задумываясь. Синтезатор меня понимает :) :) :) Coding_FPGA.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kuzis 0 24 июня, 2008 Опубликовано 24 июня, 2008 · Жалоба Это понятно, но к технологии привязка не нужна. Необходимо увидеть счетчик в RTL-примитивах, пуст это будут многовходовые вентили, но не до уровня сумматора. Сумматор, это вроде и есть RTL примитив, также как умножитель и т.д. Поставьте на схему сумматор из библиотеке и войдите внутрь. Вы увидите, что он уже привязан к технологии, так что ниже спускаться некуда. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться