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

 
 
 
Reply to this topicStart new topic
> парочка, дилетантстких вопросов
essev
сообщение Jan 11 2011, 03:16
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 16-05-07
Пользователь №: 27 757



Всем привет.
У меня есть парочка дилетантских вопросов:

1) на выходном порте стоит Д-триггер.
Нужно чтобы при включении питания он был = '1'. Как это можно сделать?
У меня нет внешнего ресета. И даже вполне возможно, что схема некоторое время вообще без синхронизации находится.
Но надо чтобы выходной триггер порта при включении питания вставал в '1'.


Как я понимаю приведенный ниже пример описания триггера инициализирует его '1' только при моделировании?


entity dff is


port (rest,clk,d,en: in std_logic;
q: out std_logic := '1';

);

end dff;

architecture behav of dff is

begin

if (reset = '1') then
q <= '0';

elsif (rising_edge(clk)) then

if (en='1') then

q<= d;

end if;


end if;
end process;

end behav;



2) Приведенный выше код Precision Synthesys синтезирует как Д-триггер с en клока равным всегда '1', а также синтезирует мультиплексор. Почему так?


Спасибо



Go to the top of the page
 
+Quote Post
DmitryR
сообщение Jan 11 2011, 03:39
Сообщение #2


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

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



Цитата(essev @ Jan 11 2011, 09:16) *
Как я понимаю приведенный ниже пример описания триггера инициализирует его '1' только при моделировании?

Нет, в FPGA это может работать, потому что триггеры в FPGA могут быть инициализированы прошивкой.

Цитата(essev @ Jan 11 2011, 09:16) *
2) Приведенный выше код Precision Synthesys синтезирует как Д-триггер с en клока равным всегда '1', а также синтезирует мультиплексор. Почему так?

Потому что триггер с enable устроен именно так, а вынос мультиплексора наружу теоретически может повлечь объединение его с предыдущим уровнем логики. Однако, это все интересно только для ASIC, и почему он так делает для FPGA - сказать затруднительно.
Go to the top of the page
 
+Quote Post
sazh
сообщение Jan 11 2011, 05:55
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(essev @ Jan 11 2011, 09:16) *
1) на выходном порте стоит Д-триггер.
Нужно чтобы при включении питания он был = '1'. Как это можно сделать?
У меня нет внешнего ресета. И даже вполне возможно, что схема некоторое время вообще без синхронизации находится.
Но надо чтобы выходной триггер порта при включении питания вставал в '1'.
2) Приведенный выше код Precision Synthesys синтезирует как Д-триггер с en клока равным всегда '1', а также синтезирует мультиплексор. Почему так?


Откуда взялся мультиплексор непонятно, ибо в описания сплошные синтаксические ошибки.
Посмотрите у xilinx документ xst.pdf и синтезируйте.
А чтоб устанавливался в 1, то по логике - по асинхронному ресету он в 1 должен устанавливаться.
if (reset = '1') then
q <= '0'; -- q <= '1';
Go to the top of the page
 
+Quote Post
essev
сообщение Jan 11 2011, 07:37
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 16-05-07
Пользователь №: 27 757



ПЛИСина = ЦПЛД МАХ2

так в том-то и загвоздка, что нужно, чтобы без всяких ресетов и пресетов устанавливался, т.к. их при включении питания может и не быть.
То есть нужно чтобы триггеры были уже предустановленными при включении питания.

Вот выдержка из даташита на МАХ2

By default, all registers in MAX II devices are set to power-up low. However, this
power-up state can be set to high on individual registers during design entry using
the Quartus II software.

Получается каждому конкретному триггеру можно назначить свое значение при включении. Я так понимаю это в hdl коде можно делать? Или я не прав? Но вот синтезатор не воспринимает инициализацию триггера.


LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;

ENTITY dff_new IS
PORT(
D : IN std_logic;
clk : IN std_logic;
en : IN std_logic;
reset : IN std_logic;
Q : OUT std_logic := '1'
);
END dff_new ;


LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;


ARCHITECTURE struct OF dff_new IS
BEGIN
process(reset,clk)
begin
if (reset = '1') then
Q <= '0';
elsif (rising_edge(clk)) then
if (en = '1') then
Q <= D;
end if;
end if;
end process;
END struct;

Цитата(DmitryR @ Jan 11 2011, 09:39) *
Нет, в FPGA это может работать, потому что триггеры в FPGA могут быть инициализированы прошивкой.


Потому что триггер с enable устроен именно так, а вынос мультиплексора наружу теоретически может повлечь объединение его с предыдущим уровнем логики. Однако, это все интересно только для ASIC, и почему он так делает для FPGA - сказать затруднительно.



Так,а почему вход CE просто к '1' подтянут. Почему синтезатор его не пользует или рисует почему зря sm.gif

Сообщение отредактировал essev - Jan 11 2011, 07:35
Go to the top of the page
 
+Quote Post
sazh
сообщение Jan 11 2011, 08:07
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(essev @ Jan 11 2011, 13:37) *
ПЛИСина = ЦПЛД МАХ2
if (reset = '1') then
Q <= '0';


Про сторонний синтезатор сказать ничего не могу.
Да и чем он лучше квартусовского.
В квартусе однозначно получите требуемое на Вашем семействе:
если проект переименуете отлично от имени примитива,
присваивание 1 сделаете в разделе инициализации (ввести в проект сигнал)
Go to the top of the page
 
+Quote Post
essev
сообщение Jan 11 2011, 10:13
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 16-05-07
Пользователь №: 27 757




Получил долгожданный простой триггер sm.gif


Но инициализация не катит (Precision Synthesis пишет 0 Initial value for q is ignored for synthesis.) - может в коде че-нить поправить?

Привожу код еще раз





LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;

ENTITY dff_new IS
PORT(
clk : IN std_logic;
d : IN std_logic;
en : IN std_logic;
reset : IN std_logic;
q : OUT std_logic := '1'
);



END dff_new ;


--
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;


ARCHITECTURE struct OF dff_new IS

-- Architecture declarations

-- Internal signal declarations



BEGIN


process(reset,clk)
begin

if (reset = '1') then
q <= '0';
elsif (rising_edge(clk)) then
if (en = '1') then
q <= d;
end if;
end if;
end process;




END struct;

Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
DW0
сообщение Jan 12 2011, 10:48
Сообщение #7


Участник
*

Группа: Свой
Сообщений: 73
Регистрация: 9-08-10
Из: Украина
Пользователь №: 58 828



инвертор на вход инвертор на выход и все решено, если не доверяете установки с прошивки
Go to the top of the page
 
+Quote Post
essev
сообщение Jan 15 2011, 16:45
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 16-05-07
Пользователь №: 27 757



погуглил еще немного sm.gif

вот, что пишут про инициализацию в

http://courses.engr.illinois.edu/ece385/do...dl_tutorial.pdf


"Do not specify initial values in signal declarations. Synthesis compilers ignore initial
values. Initial values can be assigned explicitly under a controlling signal (e.g. reset)."
Go to the top of the page
 
+Quote Post
sazh
сообщение Jan 15 2011, 17:05
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



[quote name='essev' date='Jan 15 2011, 22:45' post='868723']
Synthesis compilers ignore initial
values.
А квартус позволяет это делать.
В стороннем синтезаторе, как уже сказано инверсия по данным как на входе таки на выходе.
Сколько упорства - а результат то где?
Go to the top of the page
 
+Quote Post
essev
сообщение Jan 15 2011, 17:41
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 16-05-07
Пользователь №: 27 757



к сожалению, не было времени снова сесть за проект - вот добрался чуток sm.gif
Go to the top of the page
 
+Quote Post
id_gene
сообщение Jan 18 2011, 13:11
Сообщение #11


carpe manana
***

Группа: Свой
Сообщений: 321
Регистрация: 2-06-05
Пользователь №: 5 659



По включению в альтере все тригеры в "0".
Изменяется это для конкретных областей проекта в assignment editor -> logic options -> power-up level, а на деле квартус ставит инверторы, как было сказано выше.
Посик по хелпу квартуса
Go to the top of the page
 
+Quote Post

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

 


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


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