sazh 8 10 апреля, 2011 Опубликовано 10 апреля, 2011 · Жалоба Я уже предложил добавить на вход вашего сдвигового регистра еще один триггер, чтобы породить там стандартный синхронизатор. Добавим. module in_out_flag ( input in_flag, input out_clk, output ena_out_flag ); reg dff_a = 1'b0; reg [2:0] shift_rg = 3'b000; always @(posedge out_clk or posedge in_flag) begin if(in_flag) dff_a <= 1'b1; else dff_a <= 1'b0; end always @(posedge out_clk) begin shift_rg <= {shift_rg[1:0], dff_a}; end assign ena_out_flag = ~shift_rg[2] && shift_rg[1]; endmodule Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ethereal 0 10 апреля, 2011 Опубликовано 10 апреля, 2011 (изменено) · Жалоба Понятно, что можно написать там и без if, и синтезатор наверняка поймет правильно. Хотелось узнать причину использования вами такой конструкции. Не поймет. Квартусовский, например, на такие конструкции ругается. Изменено 10 апреля, 2011 пользователем Ethereal Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oldring 0 10 апреля, 2011 Опубликовано 10 апреля, 2011 · Жалоба Не поймет. Квартусовский, например, на такие конструкции ругается. Значит, я был лучшего мнения о вашем кактусе. И про верилог я могу сказать только "фи". Описание асинхронного сброса через posedge in_flag - это экономия за счет естественности описания. В VHDL, конечно, требуются отдельно описывать списки чувствительности процесса, что иногда напрягает, но необходимо для симуляции, но сама логика с разделенными асинхронными и синхронной ветками if гораздо прозрачнее получается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 10 апреля, 2011 Опубликовано 10 апреля, 2011 · Жалоба Значит, я был лучшего мнения о вашем кактусе. А причем тут квартус. Это конструкция рекомендована xst.pdf. И моделсим не против. Приведите свой пример. Достойный ваших знаний. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oldring 0 10 апреля, 2011 Опубликовано 10 апреля, 2011 · Жалоба Приведите свой пример. Достойный ваших знаний. Вот описание этой схемы синхронизатора на 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; Пример на самом деле немного учебный, потому что в промышленном коде нужно вместо двух внутренних триггеров вставить обычный синхронизатор как отдельный компонент, тайминги в котором тщательно обконстрейнены, и прописаны у его триггеров все необходимые атрибуты, чтобы отключить оптимизацию через них логики. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 11 апреля, 2011 Опубликовано 11 апреля, 2011 · Жалоба Не поймет. Квартусовский, например, на такие конструкции ругается. А на такие (код от Oldring) - нет. Кто из нас неправ? Надеюсь, честь Quartus'а спасена? :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ethereal 0 11 апреля, 2011 Опубликовано 11 апреля, 2011 (изменено) · Жалоба А на такие (код от 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 Изменено 11 апреля, 2011 пользователем Ethereal Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 11 апреля, 2011 Опубликовано 11 апреля, 2011 · Жалоба Вот описание этой схемы синхронизатора на VHDL. Снимаю шляпу. Помню Вашу реализацию Barrel Shifters. Чтобы понять, что Вы написали, мне пришлось задействовать rtl просмотрщик. И в этом примере Вы все поставили с ног на голову, применив сдвиг вправо. Вы ведь прекрасно понимаете, что Ваше описание нечитаемо для пользователя среднего уровня развития. (Два if в одном процессе). И опять я полез в RTL просмотрщик. А потом гадай, как другие синтезаторы к такому описанию отнесутся. Интересно, есть у Вас работники, которые в состоянии подхватить Ваши проекты. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 11 апреля, 2011 Опубликовано 11 апреля, 2011 · Жалоба Чтобы понять, что Вы написали, мне пришлось задействовать rtl просмотрщик. А потом гадай, как другие синтезаторы к такому описанию отнесутся. Вот и я, из любопытства скомпилировал код Oldring и показал картинку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 11 апреля, 2011 Опубликовано 11 апреля, 2011 · Жалоба Вот и я, из любопытства скомпилировал код Oldring и показал картинку. Картинка у него другая. Это не его код. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 11 апреля, 2011 Опубликовано 11 апреля, 2011 · Жалоба Какая связь между кодом Oldring на VHDL и возможностью проглатывания синтезатором предложенной Oldring'ом же замены в верилоговском описании? o_O Вы показали картинку, и написали, что на такое Quartus ругается. Я показал картинку, на которую Quartus "не ругается". Они что, сильно отличаются? Поясните, что вы хотели сказать в первом случае, и только что. Картинка у него другая. Это не его код. Как это не его? Скопировал. Создал файл *.vhd. Скомпилировал. Картинку извлек. В сообщение забросил. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oldring 0 11 апреля, 2011 Опубликовано 11 апреля, 2011 · Жалоба Картинка у него другая. Это не его код. Мой! Сам писал! Мамой клянусь! Вы ведь прекрасно понимаете, что Ваше описание нечитаемо для пользователя среднего уровня развития. (Два if в одном процессе). И опять я полез в RTL просмотрщик. Да, к сожалению "средний уровень развития" желает лучшего. Тем не менее, этот код не должен быть очень сложным для профессионального программиста, занявшегося HDL и не поленившегося прочитать стандарт языка. Люди "от железа" просто смотрят на HDL как на "описание схемы", от программирования - как на описание поведения. И, кстати, согласитесь, моё описание на VHDL проще и естественнее, когда в нём разобраться - просто сдвиговый регистр на 4 бита, у которого состояние первого регистра асинхронно устанавливается в единицу отдельным асинхронным входом. Два if - кажется, встречал такое даже в рекомендациях по стилю не помню каких тулзов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 11 апреля, 2011 Опубликовано 11 апреля, 2011 · Жалоба Создал файл *.vhd. Скомпилировал. Картинку извлек. В сообщение забросил. Тогда в догон версия пакета и целевой кристалл. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Мур 1 11 апреля, 2011 Опубликовано 11 апреля, 2011 (изменено) · Жалоба ..Кто из нас неправ? Прямо буря в стакане воды! Вот что требовалось ...по рис 8! Код, предложенный мной в начале, описывает два выходных регистра. Первый триггер - делитель. Схема достаточно универсальна для любых частот... sch_imp.bmp Изменено 11 апреля, 2011 пользователем Мур Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 11 апреля, 2011 Опубликовано 11 апреля, 2011 · Жалоба Да, к сожалению "средний уровень развития" желает лучшего. Я бы сказал, золотая середина. Ведь на выходе - качественный продукт, понятный каждому. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться