aprox 0 1 июня, 2010 Опубликовано 1 июня, 2010 · Жалоба А что, AHDL позволяет запузырить сигнал сброса по глобальной клоковой трассе? В последних FPGA от Altera трассы GLOBAL могут использоваться для чего угодно. В том числе и для глобального сброса. Отсюда вопрос- как реализуются верилоговские "абстракции" из блоков always @(..,,,...) в конкретной архитектуре FPGA? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Putnik 0 1 июня, 2010 Опубликовано 1 июня, 2010 · Жалоба Цитата(Putnik @ Jun 1 2010, 00:47) * always @(posedge clk or rst == 0) То есть, этот блок должен запускаться в каждый момент времени, когда rst равняется нулю? Вы себе скорость моделирования в симуляторах, которые работали бы по такому стандарту, представляете? давайте вернемся из программирования в цифровую схемотехнику, вопрос только в том, как это будет транслироваться в схему always @(posedge clk or posedge rst) if (rst) D<=1'b0; else D<=in; - описание D-триггера, с клоком, работающим по фронту и сбросом по уровню, в качестве примера в моделсиме rst сразу == 1, сначала X, потом == 1 и сначала X, потом == 1, В итоге триггер сбросится везде когда rst == 1, без ожидания прихода фронта, Хотите оспорить, приводите, пожалуйста, свои примеры, или выдержки из стандарта в тему, а то холивар получается с вашей стороны to ViKo - действительно забавная опечатка в стандарте Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
masics 0 1 июня, 2010 Опубликовано 1 июня, 2010 · Жалоба always @(posedge clk or posedge rst) if (rst) D<=1'b0; else D<=in; - описание D-триггера, с клоком, работающим по фронту и сбросом по уровню, в качестве примера в моделсиме rst сразу == 1, сначала X, потом == 1 и сначала X, потом == 1, В итоге триггер сбросится везде когда rst == 1, без ожидания прихода фронта, rst сразу == 1 - это сначала Х, а потом во время 0 становится 1 (вот и фронт). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Des333 0 1 июня, 2010 Опубликовано 1 июня, 2010 · Жалоба давайте вернемся из программирования в цифровую схемотехнику, вопрос только в том, как это будет транслироваться в схему В программирование никто и не уходил. Кроме синтеза, существует еще и моделирование. Это у Вас вопрос только про трансляцию в схему, а разработчикам стандарта необходимо думать и над тем и над другим. Хотите оспорить, приводите, пожалуйста, свои примеры, или выдержки из стандарта в тему, а то холивар получается с вашей стороны Вот такой код: module test_sv; logic rst1 = 1; logic data1; logic data2; logic clk; logic rst2; initial begin rst2 = 1; #5; rst2 = 0; end always_ff @(posedge clk, posedge rst1) if(rst1) data1 <= '0; else data1 <= ~data1; always_ff @(posedge clk, posedge rst2) if(rst2) data2 <= '0; else data2 <= ~data2; initial begin clk = 0; forever #300 clk = ~clk; end endmodule data1 до прихода положительного фронта clk в состоянии x, data2 сбрасывается в ноль раньше. Все потому, что у rst2 начальное значение x, что следует из IEEE 1364-2001, 3.2.2 Variable declarations: The initialization value for reg, time, and integer data types shall be the unknown value, x. а в нулевой момент времени значение rst2 становится равно 1. А переход из x в 1 - это posedge, согласно тому же стандрату, 9.7.2 Event control: A posedge shall be detected on the transition from 0 to x, z, or 1, and from x or z to 1 rst сразу == 1 - это сначала Х, а потом во время 0 становится 1 (вот и фронт). Извиняюсь, пока набирал пост, не увидел, что Вы меня опередили. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Putnik 0 1 июня, 2010 Опубликовано 1 июня, 2010 · Жалоба to des333 аплодирую стоя, очень убедительно, Вы правы :a14: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 1 июня, 2010 Опубликовано 1 июня, 2010 · Жалоба В последних FPGA от Altera трассы GLOBAL могут использоваться для чего угодно. В том числе и для глобального сброса.Ок Отсюда вопрос- как реализуются верилоговские "абстракции" из блоков always @(..,,,...) в конкретной архитектуре FPGA?Максимально эффективным способом. Т.е. для клоков будет использованны специальные клоковые ресурсы (GLOBAL у ALter'ы, клоковое дерево у Xilinx) Если синтезатор не сможет по физическим причинам использовать эти ресурсы (у Xilinx например в том случае, если на clk тригеру завели выход с логики), он использует локальные трассы (не специальные) и выдаст кучу warning'ов Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Des333 0 1 июня, 2010 Опубликовано 1 июня, 2010 · Жалоба to des333 аплодирую стоя, очень убедительно, Вы правы :a14: Ну, я думаю, аплодировать тут нечему. :) А насчет того, что прав - надеюсь. Если нет, гуру поправят. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aprox 0 1 июня, 2010 Опубликовано 1 июня, 2010 · Жалоба Максимально эффективным способом. Т.е. для клоков будет использованны специальные клоковые ресурсы (GLOBAL у ALter'ы, клоковое дерево у Xilinx) Если синтезатор не сможет по физическим причинам использовать эти ресурсы (у Xilinx например в том случае, если на clk тригеру завели выход с логики), он использует локальные трассы (не специальные) и выдаст кучу warning'ов Мне непонятно другое. Вот, тут пишут always_ff @(posedge clk, posedge rst) Речь явно идет о триггерах. Триггер имеет только один клоковый вход. А в заголовке always_ff @() их может быть сколько угодно. Какой именно из списка. clk или rst. считать правильным клоком триггеру? Кого разводить по трассе GLOBAL, чтобы получить в приложении синхронную машину? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Putnik 0 1 июня, 2010 Опубликовано 1 июня, 2010 · Жалоба Мне непонятно другое. Вот, тут пишут always_ff @(posedge clk, posedge rst) Речь явно идет о триггерах. Триггер имеет только один клоковый вход. А в заголовке always_ff @() их может быть сколько угодно. Какой именно из списка. clk или rst. считать правильным клоком триггеру? Кого разводить по трассе GLOBAL, чтобы получить в приложении синхронную машину? Зависит от дальнейшего описания в теле always, если clk - клок, то упоминаться он больше не будет Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 1 июня, 2010 Опубликовано 1 июня, 2010 · Жалоба Мне непонятно другое. Вот, тут пишут always_ff @(posedge clk, posedge rst) Речь явно идет о триггерах. Триггер имеет только один клоковый вход. А в заголовке always_ff @() их может быть сколько угодно. Какой именно из списка. clk или rst. считать правильным клоком триггеру? Кого разводить по трассе GLOBAL, чтобы получить в приложении синхронную машину? Изучайте VHDL. Там однозначно видно, что именно будет клоком для триггера. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aprox 0 1 июня, 2010 Опубликовано 1 июня, 2010 · Жалоба Зависит от дальнейшего описания в теле always, если clk - клок, то упоминаться он больше не будет А если и rst тоже не упоминается в блоке? Я понимаю, -это ошибка или описка. Но интересно узнать, пропустит ли такую ошибку проверка синтаксиса? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Putnik 0 1 июня, 2010 Опубликовано 1 июня, 2010 · Жалоба А если и rst тоже не упоминается в блоке? Я понимаю, -это ошибка или описка. Но интересно узнать, пропустит ли такую ошибку проверка синтаксиса? Проверка синтаксиса пропустит, симулятор посчитает что несколько клоков и будет по ним работать, синтезатор скажет ошибку - нестандартный триггер Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aprox 0 1 июня, 2010 Опубликовано 1 июня, 2010 · Жалоба Проверка синтаксиса пропустит, симулятор посчитает что несколько клоков и будет по ним работать, синтезатор скажет ошибку - нестандартный триггер Синтезатор укажет на ошибку и остановит синтез, или ограничится только предупреждением выдав неработающую разводку? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Putnik 0 1 июня, 2010 Опубликовано 1 июня, 2010 · Жалоба Синтезатор укажет на ошибку и остановит синтез, или ограничится только предупреждением выдав неработающую разводку? Первое Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergeyF 0 1 июня, 2010 Опубликовано 1 июня, 2010 · Жалоба А если и rst тоже не упоминается в блоке? Я понимаю, это ошибка или описка. Но интересно узнать, пропустит ли такую ошибку проверка синтаксиса? Еще раз советую дискутирующим ознакомиться со стандартом IEEE1364.1-2002 (сейчас переделан в IEC/IEEE 62142-2005). В частности, как "shall" описывать те или иные конструкции. Кстати, там и про память написано. Вот выдержка из начала описания про триггеры с асинхронными управляющими входами: 5.2.2.1 Edge-sensitive storage device modeling with asynchronous set-reset An edge-sensitive storage device with an asynchronous set and/or asynchronous reset is modeled using an always statement whose event list contains edge events representing the clock and asynchronous control variables. Level-sensitive events shall not be allowed in the event list of an edge-sensitive storage device model. Furthermore, the always statement shall contain an if statement to model the first asynchronous control and optional nested else if statements to model additional asynchronous controls. A final else statement, which specifies the synchronous logic portion of the always block, shall be controlled by the edge control variable not listed in the if and else if statements. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться