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

парочка

Всем привет.

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

 

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', а также синтезирует мультиплексор. Почему так?

 

 

Спасибо

 

 

 

 

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


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

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

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

 

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

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

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


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

1) на выходном порте стоит Д-триггер.

Нужно чтобы при включении питания он был = '1'. Как это можно сделать?

У меня нет внешнего ресета. И даже вполне возможно, что схема некоторое время вообще без синхронизации находится.

Но надо чтобы выходной триггер порта при включении питания вставал в '1'.

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

 

Откуда взялся мультиплексор непонятно, ибо в описания сплошные синтаксические ошибки.

Посмотрите у xilinx документ xst.pdf и синтезируйте.

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

if (reset = '1') then

q <= '0'; -- q <= '1';

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


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

ПЛИСина = ЦПЛД МАХ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;

 

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

 

 

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

 

 

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

Изменено пользователем essev

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


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

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

if (reset = '1') then

Q <= '0';

 

Про сторонний синтезатор сказать ничего не могу.

Да и чем он лучше квартусовского.

В квартусе однозначно получите требуемое на Вашем семействе:

если проект переименуете отлично от имени примитива,

присваивание 1 сделаете в разделе инициализации (ввести в проект сигнал)

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


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

 

Получил долгожданный простой триггер :)

 

 

Но инициализация не катит (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;

post-27757-1294740366_thumb.jpg

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


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

инвертор на вход инвертор на выход и все решено, если не доверяете установки с прошивки

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


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

погуглил еще немного :)

 

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

 

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)."

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


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

Synthesis compilers ignore initial

values.

А квартус позволяет это делать.

В стороннем синтезаторе, как уже сказано инверсия по данным как на входе таки на выходе.

Сколько упорства - а результат то где?

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


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

По включению в альтере все тригеры в "0".

Изменяется это для конкретных областей проекта в assignment editor -> logic options -> power-up level, а на деле квартус ставит инверторы, как было сказано выше.

Посик по хелпу квартуса

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


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

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

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

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

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

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

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

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

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

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