Перейти к содержанию
    

RTL View

Имеется описание двоичного счетчика на VHDL (vector <= vector +1).

После синтеза в RTL View вижу триггеры и сумматор.

Как развернуть вид сумматора до вентилей, кто может подсказать?

 

(ISE 9.2.04i)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Имеется описание двоичного счетчика на VHDL (vector <= vector +1).

После синтеза в RTL View вижу триггеры и сумматор.

Как развернуть вид сумматора до вентилей, кто может подсказать?

 

(ISE 9.2.04i)

 

Можешь предоставить код?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Использовать 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;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это понятно, но к технологии привязка не нужна.

Необходимо увидеть счетчик в 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;

 

Попробуй, надеюсь получится! Удачи!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробуй, надеюсь получится! Удачи!!!

 

Ну и к чему эти навороты в процессе. Этож нечитаемо.

 

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;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну и к чему эти навороты в процессе. Этож нечитаемо.

 

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;

 

Можно поподробнее, что за навороты Вы имеете ввиду??? И почему нечитаемо, в чем сложность кода??

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно поподробнее, что за навороты Вы имеете ввиду??? И почему нечитаемо, в чем сложность кода??

 

Вы описали провод в теле процесса. Перечислели его. Надо считать if - else. Чтобы убедиться, что это провод, а не регистр.

Вне процесса по клоку регистр не опишешь. Впрочем я не настаиваю. Я не пишу на VHDL.

Но xst.pdf мне по нраву.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы описали провод в теле процесса. Перечислели его. Надо считать if - else. Чтобы убедиться, что это провод, а не регистр.

Вне процесса по клоку регистр не опишешь. Впрочем я не настаиваю. Я не пишу на VHDL.

Но xst.pdf мне по нраву.

 

 

Просто когда я добавил строку

 

count <= cnt;

 

вне процесса и только тогда я увидел нормальные осцилограммы работы на осцилографе :)

 

И про это прочитал в статейке.

 

http://chipnews.gaw.ru/html.cgi/arhiv_i/99_02/stat-33.htm

 

Тоже самое во вложении

 

А сейчас это использую уже как говорится на автомате и не задумываясь. Синтезатор меня понимает :) :) :)

Coding_FPGA.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это понятно, но к технологии привязка не нужна.

Необходимо увидеть счетчик в RTL-примитивах,

пуст это будут многовходовые вентили, но не до уровня сумматора.

 

Сумматор, это вроде и есть RTL примитив, также как умножитель и т.д. Поставьте на схему сумматор из библиотеке и войдите внутрь. Вы увидите, что он уже привязан к технологии, так что ниже спускаться некуда.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...