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

 
 
 
Reply to this topicStart new topic
> Как найти "провода" и элементы схемы RTL Viewer на кристалле?
Fynjisx
сообщение May 15 2010, 05:34
Сообщение #1


студент
****

Группа: Свой
Сообщений: 571
Регистрация: 3-07-08
Из: Russia
Пользователь №: 38 712



Привет Всем! НАписал вот такой код:

CODE
LIBRARY ieee;
USE ieee.std_logic_1164.all;

ENTITY u_ctrl_wr IS
port (clk : in std_logic;
en_skip: in std_logic;
ready_fs: in std_logic;
ready_ct2 : in std_logic;
rst : in std_logic;
do : out std_logic_vector(7 downto 0);
c_ct2 : out std_logic;
c_rg : out std_logic;
le_rg : out std_logic;
c_fs : out std_logic
);
END u_ctrl_wr;

ARCHITECTURE BEHAVIOR of u_ctrl_wr is




type tState is (IDLE, SKIP, STB_RG, STB_FSLOT, WAIT_RDY, FINE);


signal state: tState;
signal n_state: tState;
signal c_rg_w: std_logic;
signal le_rg_w: std_logic;



begin

c_rg <= c_rg_w;
le_rg <= le_rg_w;

c_ct2 <= c_rg_w and not le_rg_w;


process(clk, rst, n_state)
begin
if(rst = '1') then
state <= IDLE;
elsif(rising_edge(clk)) then
state <= n_state;
end if;
end process;


process(state, en_skip, ready_fs, ready_ct2)
begin
case state is
when IDLE=>
if(en_skip = '1') then
n_state <= SKIP;
else
n_state <= IDLE;
end if;


when SKIP=>
n_state <= STB_RG;


when STB_RG=>
n_state <= STB_FSLOT;


when STB_FSLOT=>
n_state <= WAIT_RDY;


when WAIT_RDY=>
if(ready_fs = '1') then
if(ready_ct2 = '1') then
n_state <= FINE;
else
n_state <= STB_RG;
end if;
else
n_state <= WAIT_RDY;
end if;


when FINE=>
n_state<= FINE;

end case;

end process;


output: process(state, en_skip)
begin
case state is
when IDLE=>
if(en_skip = '1') then
do <= X"CC";
le_rg_w <= '1';
else
do <= X"00";
le_rg_w <= '0';
end if;
c_rg_w <= '0';
c_fs <= '0';

when SKIP=>
c_rg_w <= '0';
c_fs <= '0';

when STB_RG=>
c_rg_w <= '1';
c_fs <= '0';


when STB_FSLOT=>
c_rg_w <= '0';
le_rg_w <= '0';
c_fs <= '1'; --no?ia a fs

when WAIT_RDY=>
c_rg_w <= '0';
le_rg_w <= '0';
c_fs <= '0';

when FINE=>
c_rg_w <= '0';
le_rg_w <= '0';
c_fs <= '0';

end case;
end process;







end BEHAVIOR;


после компиляции получилась такая диаграммка в которой наступают гонки сигналов. Нажал RTL Viewer и посмотрел полученую схему. Вопрос такой: Если я выбираю любое соединение между элементами схемы в RTL Viewer, можно ли просмотреть где оно физически распологается на кристалле? Если можно то как это сделать? То же самое и с элементами. Почему Quartus иногда пишет что не может найти запрошенные элемент в Chip Planner? Ну и последний вопрос, можно ли замерить задержку сигнала определенной линии ,выбранной в RTL Viewer??? Спасибо.


--------------------
С Уважением...
Go to the top of the page
 
+Quote Post
Builder
сообщение May 15 2010, 06:30
Сообщение #2


iBuilder©
****

Группа: Свой
Сообщений: 519
Регистрация: 14-07-04
Из: Минск
Пользователь №: 322



Цитата(Fynjisx @ May 15 2010, 08:34) *
после компиляции получилась такая диаграммка в которой наступают гонки сигналов. Нажал RTL Viewer и посмотрел полученую схему. Вопрос такой: Если я выбираю любое соединение между элементами схемы в RTL Viewer, можно ли просмотреть где оно физически распологается на кристалле? Если можно то как это сделать? То же самое и с элементами. Почему Quartus иногда пишет что не может найти запрошенные элемент в Chip Planner? Ну и последний вопрос, можно ли замерить задержку сигнала определенной линии ,выбранной в RTL Viewer??? Спасибо.

1) Гонки будут всегда, т.к. как минимум у Вас не тактируемые выходы сигнала do, а если и протактируете, всё равно, небольшая разбежка времени прохождения разных сигналов наружу будет.
2) сигнала можен не находить по банальное причине - его минимизоровола и его такием как он был в исходнике просто нет.
3) задержку посмотреть можно, осваивайте тайм квест, он всё можен. Но смысл? Используйте синхронный дизайн и у Вас не будет таких проблем...
Go to the top of the page
 
+Quote Post
DmitryR
сообщение May 15 2010, 07:43
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



Цитата(Fynjisx @ May 15 2010, 09:34) *
Вопрос такой: Если я выбираю любое соединение между элементами схемы в RTL Viewer, можно ли просмотреть где оно физически распологается на кристалле?


Для Quartus:
- правой кнопкой в RTL ->Locate -> In Chip Viewer

Для ISE:
- я не помню, умеет ли FPGA Editor делать crossprobe из RTL, но в любом случае можете там уже посмотреть поиском или по иерархии.
Go to the top of the page
 
+Quote Post
Fynjisx
сообщение May 15 2010, 08:36
Сообщение #4


студент
****

Группа: Свой
Сообщений: 571
Регистрация: 3-07-08
Из: Russia
Пользователь №: 38 712



Цитата(Builder @ May 15 2010, 09:30) *
Используйте синхронный дизайн и у Вас не будет таких проблем...

я до сих пор думал, что у меня синхронный дизайн)))... А как его сделать синхронным?


--------------------
С Уважением...
Go to the top of the page
 
+Quote Post
Builder
сообщение May 15 2010, 10:41
Сообщение #5


iBuilder©
****

Группа: Свой
Сообщений: 519
Регистрация: 14-07-04
Из: Минск
Пользователь №: 322



Цитата(Fynjisx @ May 15 2010, 11:36) *
я до сих пор думал, что у меня синхронный дизайн)))... А как его сделать синхронным?
Ну, это смотря как смотреть. Я имел виду то, что выхлдные сигналы у Вас комбинаторные, а не с тригеров.
И если синхронный, тогда почему Вас беспокоят гонки?
В классическом варианте вы задаёте нужну частоту и в отчёте смотрите - выполняется или нет, не думая какие там гонки.
Если это выходы наружу - задаёте задержки, и всё.
Если Вам что-то нужно специфическое - тогда опишите задачу, т.к. в приведённом исходнике не понятно что именно Вам не нравится...
Поясните, чего вы хотите добится. Если хотите что-б сигналы снаружи одновременно щёлкали, так это недостижимо. Если разбежка нужна нормированная - то это уже другая песня, юзайте тайм квест.
Go to the top of the page
 
+Quote Post
Fynjisx
сообщение May 16 2010, 08:39
Сообщение #6


студент
****

Группа: Свой
Сообщений: 571
Регистрация: 3-07-08
Из: Russia
Пользователь №: 38 712



Цитата(Builder @ May 15 2010, 13:41) *
Если Вам что-то нужно специфическое - тогда опишите задачу, т.к. в приведённом исходнике не понятно что именно Вам не нравится...
Поясните, чего вы хотите добится. Если хотите что-б сигналы снаружи одновременно щёлкали, так это недостижимо.


Ещё раз здраствуйте!
Попытаюсь описать что хочу получить. Мой дизайн состоит из 4-х модулей. Модуль под названием u_ctrl_wr управляет работой оставшихся трех. Моя проблема возникла с работой первого модуля(u_ctrl_wr). Предполагается что он должнен работать по следующему алгоритму: Когда на его вход en_skip приходит "1"(это означает разрешение работы модуля), он загружает некую константу в модуль RG_l(обычный регитр сдвига). Далее путем последовательного сдвига каждый бит загруженного байта выдается на вход di модуля fslot. Когда модуль обработал определённым образом принятый бит, он устанавливает высокий уровень на входе ready_fs модуля u_ctrl_wr. Получив этот сигнал, модуль u_ctrl_wr выдает сигнал c_rg на сдвиг следующего бита и так до тех пор пока не сдинется последний. В качестве "определителя" последнего бита у меня стоит модуль ct2, который представляет из себя обычный бинарный счетчик. Как только счет достигнет 8, он выставляет высокий уровень на входе ready_ct2. Получив этот синал, модуль u_ctrl_wr должен ожидать высокого уровня на входе en_skip. И если он придет, то цикл повторяется, т.е опять грузится байт в регистр, потом последовательно сдвигается. Наряду со входом en_skip есть еще несколько входов, таких как en_scratch, en_convert. Смысл их идентичен, за исключением того, что все они загружают свои байты, в зависимости от того, на какой из них придет "1" в начале цикла.

теперь как работает регистр сдига. ВСе выполняемые операции производятся по сигналу ce регистра сдвига. А вот режим - запись в регистр или сдвиг содержимого определяется входом le. Если le = 1, то запись, le = 0 - сдвиг. Теперь я пишу автомат, по взаимодействию с регистром. Я решил сделать так: После того как получен один из разрешающих сигналов(en_skip и т.д)
я выдаю байт на регистр и оновременно выставляю сигнал le. Затем я пропускаю один такт и в следующем выдаю ce на регистр. В следующем такте я выдаю сигнал c_fs - для записи бита в модуль f_slot. ЗАтем жду готовности модуля fsolt. Здесь же проверяю какой бит передан(последний или нет), чтобы определиться в какое состояние "мне" дальше. Если бит не последний, то мы переходим в состояние STB_RG. Которое вновь выдает сигнал сдига на регистр(le при это равна 0, благодаря защелке).Если же бит последний то модуль выдает сигнал rdy. По которому сигнал en_skip снимается.

Код автомата:
CODE
ENTITY u_ctrl_wr IS
port (clk : in std_logic;
en_skip: in std_logic;
ready_fs : in std_logic;
ready_ct2 : in std_logic;
rst : in std_logic;
do : out std_logic_vector(7 downto 0);
c_ct2 : out std_logic;
c_rg : out std_logic;
le_rg : out std_logic;
c_fs : out std_logic;
rdy : out std_logic
);
END u_ctrl_wr;

ARCHITECTURE BEHAVIOR of u_ctrl_wr is




type tState is (IDLE, S_LE, SKIP, STB_RG, STB_FSLOT, WAIT_RDY, FINE);


signal state: tState;
signal n_state: tState;
signal c_rg_w: std_logic;
signal le_rg_w: std_logic;



begin

c_rg <= c_rg_w;
le_rg <= le_rg_w;

c_ct2 <= c_rg_w and not le_rg_w;


process(clk, rst, n_state)
begin
if(rst = '1') then
state <= IDLE;
elsif(rising_edge(clk)) then
state <= n_state;
end if;
end process;


process(state, en_skip, ready_fs, ready_ct2)
begin
case state is
when IDLE=>
if(en_skip = '1') then
n_state <= S_LE;
else
n_state <= IDLE;
end if;


when S_LE=>
n_state <= SKIP;

when SKIP=>
n_state <= STB_RG;


when STB_RG=>
n_state <= STB_FSLOT;


when STB_FSLOT=>
n_state <= WAIT_RDY;


when WAIT_RDY=>
if(ready_fs = '1') then
if(ready_ct2 = '1') then
n_state <= FINE;
else
n_state <= STB_RG;
end if;
else
n_state <= WAIT_RDY;
end if;


when FINE=>
n_state<= FINE;

end case;

end process;


rdy <= '1' when state = FINE else '0';

output: process(state, en_skip)
begin
case state is
when IDLE=>
if(en_skip = '1') then
do <= X"CC";
else
do <= X"00";
end if;
le_rg_w <= '0';
c_rg_w <= '0';
c_fs <= '0';

when S_LE=>
le_rg_w <= '1';
c_rg_w <= '0';
c_fs <= '0';

when SKIP=>
c_rg_w <= '0';
c_fs <= '0';

when STB_RG=>
c_rg_w <= '1';
c_fs <= '0';


when STB_FSLOT=>
c_rg_w <= '0';
le_rg_w <= '0';
c_fs <= '1';


when WAIT_RDY=>
c_rg_w <= '0';
le_rg_w <= '0';
c_fs <= '0';


when FINE=>
c_rg_w <= '0';
le_rg_w <= '0';
c_fs <= '0';

end case;
end process;

end BEHAVIOR;

Теперь если посмотреть на векторную диаграмму, то мне становится непонятным момент обведенный мною в кружок).
Почему там сигнал le начинает "мигать"??? По RTL Посмотрел и непонял откуда мигание, почему встроенная защелка его пропускает?

и Второй вопрос: После компиляции проекта зашел в отчет Timing Analyzer. Что означают 4 и 5-ая строчки??
ВСё на кристалле EP1C3T100A8 (соответственно работаю в квартус))
Заранее благодарен...

Сообщение отредактировал Fynjisx - May 16 2010, 08:52
Прикрепленные файлы
Прикрепленный файл  desgn1.bmp ( 299 килобайт ) Кол-во скачиваний: 37
Прикрепленный файл  _________.bmp ( 87.71 килобайт ) Кол-во скачиваний: 14
Прикрепленный файл  ______TA.bmp ( 168.25 килобайт ) Кол-во скачиваний: 14
 


--------------------
С Уважением...
Go to the top of the page
 
+Quote Post
Builder
сообщение May 17 2010, 11:33
Сообщение #7


iBuilder©
****

Группа: Свой
Сообщений: 519
Регистрация: 14-07-04
Из: Минск
Пользователь №: 322



Цитата(Fynjisx @ May 16 2010, 11:39) *
Теперь если посмотреть на векторную диаграмму, то мне становится непонятным момент обведенный мною в кружок).
Почему там сигнал le начинает "мигать"??? По RTL Посмотрел и непонял откуда мигание, почему встроенная защелка его пропускает?
А где защёлка? В исходнике сигнал le_rg комбинаторный вроде как...
А защёлки лучше не используйте, черевато трудно находимыми ошибками.
Go to the top of the page
 
+Quote Post
Fynjisx
сообщение May 18 2010, 07:09
Сообщение #8


студент
****

Группа: Свой
Сообщений: 571
Регистрация: 3-07-08
Из: Russia
Пользователь №: 38 712



Цитата(Builder @ May 17 2010, 14:33) *
А где защёлка? В исходнике сигнал le_rg комбинаторный вроде как...

В исходнике этот сигнал описан так, что он защёлкивается...Это сделано намеренно, для того, чтобы мы могли находится в одном и том же состоянии STB_RG при разных значениях le.


--------------------
С Уважением...
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 21:16
Рейтинг@Mail.ru


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