|
|
  |
Синхронизатор, Две тактовые, единичные импульсы |
|
|
|
Apr 10 2011, 20:17
|
Частый гость
 
Группа: Свой
Сообщений: 114
Регистрация: 7-05-08
Из: РФ, Москва
Пользователь №: 37 354

|
Цитата(Oldring @ Apr 11 2011, 00:01)  Понятно, что можно написать там и без if, и синтезатор наверняка поймет правильно. Хотелось узнать причину использования вами такой конструкции. Не поймет. Квартусовский, например, на такие конструкции ругается.
Сообщение отредактировал Ethereal - Apr 10 2011, 20:23
--------------------
SystemVerilog - язык, заточенный Альтерой под свои кристаллы теми же приемами использования примитивов, что и AHDL. ©
|
|
|
|
|
Apr 10 2011, 20:21
|

Гуру
     
Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874

|
Цитата(Ethereal @ Apr 11 2011, 00:17)  Не поймет. Квартусовский, например, на такие конструкции ругается. Значит, я был лучшего мнения о вашем кактусе. И про верилог я могу сказать только "фи". Описание асинхронного сброса через posedge in_flag - это экономия за счет естественности описания. В VHDL, конечно, требуются отдельно описывать списки чувствительности процесса, что иногда напрягает, но необходимо для симуляции, но сама логика с разделенными асинхронными и синхронной ветками if гораздо прозрачнее получается.
--------------------
Пишите в личку.
|
|
|
|
|
Apr 10 2011, 20:49
|

Гуру
     
Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874

|
Цитата(sazh @ Apr 11 2011, 00:25)  Приведите свой пример. Достойный ваших знаний. Вот описание этой схемы синхронизатора на VHDL. В VHDL-2008 будут доступны некоторые дополнительные упрощения, но ISE его пока что не синтезирует. Код library ieee; use ieee.numeric_bit.all;
entity in_out_flag is port( in_flag : in bit; out_clk : in bit; ena_out_flag : out bit ); end in_out_flag;
architecture Behavioral of in_out_flag is -- На S6 схема получается проще, если начальное состояние триггера с задействованной асинхронной установкой равно 1 signal shift_reg : bit_vector( 1 to 4 ) := (others => '1'); begin
process( in_flag, out_clk ) begin if rising_edge( out_clk ) then shift_reg <= shift_reg srl 1; end if; if in_flag = '1' then shift_reg( 1 ) <= '1'; end if; end process;
ena_out_flag <= shift_reg( 3 ) and not shift_reg( 4 );
end Behavioral; Пример на самом деле немного учебный, потому что в промышленном коде нужно вместо двух внутренних триггеров вставить обычный синхронизатор как отдельный компонент, тайминги в котором тщательно обконстрейнены, и прописаны у его триггеров все необходимые атрибуты, чтобы отключить оптимизацию через них логики.
--------------------
Пишите в личку.
|
|
|
|
|
Apr 11 2011, 07:53
|
Частый гость
 
Группа: Свой
Сообщений: 114
Регистрация: 7-05-08
Из: РФ, Москва
Пользователь №: 37 354

|
Цитата(ViKo @ Apr 11 2011, 11:05)  А на такие (код от Oldring) - нет. Кто из нас неправ? Надеюсь, честь Quatus'а спасена?  Какая связь между кодом Oldring на VHDL и возможностью проглатывания синтезатором предложенной Oldring'ом же замены в верилоговском описании? o_O БылоКод always @(posedge C or posedge R) begin if(R) O<=1; else O<=0; end ПредложеноКод always @(posedge C or posedge R) begin O<=R; end
Сообщение отредактировал Ethereal - Apr 11 2011, 07:54
--------------------
SystemVerilog - язык, заточенный Альтерой под свои кристаллы теми же приемами использования примитивов, что и AHDL. ©
|
|
|
|
|
Apr 11 2011, 08:43
|
Гуру
     
Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804

|
Цитата(Oldring @ Apr 10 2011, 23:49)  Вот описание этой схемы синхронизатора на VHDL. Снимаю шляпу. Помню Вашу реализацию Barrel Shifters. Чтобы понять, что Вы написали, мне пришлось задействовать rtl просмотрщик. И в этом примере Вы все поставили с ног на голову, применив сдвиг вправо. Вы ведь прекрасно понимаете, что Ваше описание нечитаемо для пользователя среднего уровня развития. (Два if в одном процессе). И опять я полез в RTL просмотрщик. А потом гадай, как другие синтезаторы к такому описанию отнесутся. Интересно, есть у Вас работники, которые в состоянии подхватить Ваши проекты.
|
|
|
|
|
Apr 11 2011, 09:06
|

Гуру
     
Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874

|
Цитата(sazh @ Apr 11 2011, 12:47)  Картинка у него другая. Это не его код. Мой! Сам писал! Мамой клянусь! Цитата(sazh @ Apr 11 2011, 12:43)  Вы ведь прекрасно понимаете, что Ваше описание нечитаемо для пользователя среднего уровня развития. (Два if в одном процессе). И опять я полез в RTL просмотрщик. Да, к сожалению "средний уровень развития" желает лучшего. Тем не менее, этот код не должен быть очень сложным для профессионального программиста, занявшегося HDL и не поленившегося прочитать стандарт языка. Люди "от железа" просто смотрят на HDL как на "описание схемы", от программирования - как на описание поведения. И, кстати, согласитесь, моё описание на VHDL проще и естественнее, когда в нём разобраться - просто сдвиговый регистр на 4 бита, у которого состояние первого регистра асинхронно устанавливается в единицу отдельным асинхронным входом. Два if - кажется, встречал такое даже в рекомендациях по стилю не помню каких тулзов.
--------------------
Пишите в личку.
|
|
|
|
|
Apr 11 2011, 09:55
|

Знающий
   
Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847

|
Цитата(ViKo @ Apr 11 2011, 11:05)  ..Кто из нас неправ? Прямо буря в стакане воды! Вот что требовалось ...по рис 8! Код, предложенный мной в начале, описывает два выходных регистра. Первый триггер - делитель. Схема достаточно универсальна для любых частот...
Сообщение отредактировал Мур - Apr 11 2011, 09:56
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|