MaratZuev 0 8 мая, 2018 Опубликовано 8 мая, 2018 · Жалоба Доброго всем! В одной хорошей статье Junior FPGA Design Engineer: как стать? автор приводит довольно много примеров того, что (по его мнению) должен знать и уметь Junior FPGA Design Engineer. Но, как справедливо подмечено в комментариях, "далеко не каждый Junior (и даже Middle) может похвастаться всем тем, что требуется из списка «Необходимо»". К стыду своему следует признаться, что отношусь к одному из таких, хотя имею много лет стажа Verilog RTL-кодирования. Например, такая задача из тестовых вопросов: 2 Есть ли разница между следующими тремя описаниями? Если да, то в чём она проявляется? // code 1: assign a = b + c; // code 2: always @( b or c ) begin a = b + c; end // code 3: always @( * ) begin a = b + c; end ставит меня в тупик. По-моему мнению, эти описания абсолютно эквивалентны, но, подозреваю, что могу сильно ошибаться. Был бы признателен за содержательный ответ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 8 мая, 2018 Опубликовано 8 мая, 2018 (изменено) · Жалоба На Ваш вопрос ответит любой синтезатор :rolleyes: Warning from admin:Оверквотинг запрещен правилами форума, п.3.4 Изменено 8 мая, 2018 пользователем makc Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 190 8 мая, 2018 Опубликовано 8 мая, 2018 · Жалоба Вопрос: как Вы думаете, что будет происходить при моделировании описанных конструкций в симуляторе? Желательно опишите эти варианты пошагово в контексте модуля, содержащего и другие сигналы/конструкции. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 8 мая, 2018 Опубликовано 8 мая, 2018 · Жалоба На Ваш вопрос ответит любой синтезатор А я добавлю. Автор статьи, на которую была ссылка тоже неплохой парень. И можно у него спросить... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lutovid 0 8 мая, 2018 Опубликовано 8 мая, 2018 · Жалоба с точки синтезатора это одно и то же - я проверил на всякий случай С точки зрения симуляции то же все одинаково вроде должно быть единственное различие в том, что в 2х последних случаях выходы должны быть reg Я бы добавил - это статья - предложение с чего бы начать. Не корректно ее юзать работодателем для отсева неквалифицированных кадров)) Не стоит сильно расстраиваться, если что-то не знаете, как правило если раньше с этим не сталкивались за годы работы в данной сфере, то это вам и не особо нужно(есть конечно исключения) p.s. это мое личное мнение Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MaratZuev 0 10 мая, 2018 Опубликовано 10 мая, 2018 · Жалоба На Ваш вопрос ответит любой синтезатор :rolleyes: Синтезатор с собой на собеседование не возьмёшь )) Но Ваш отсыл справедлив, просто захотелось послушать мнение профессионалов ) А я добавлю. Автор статьи, на которую была ссылка тоже неплохой парень. И можно у него спросить... Здесь все - неплохие парни. Поэтому, решил, что будет лучше спросить у всех. Но и Ваш совет тоже учту на будущее (есть в статье ещё непонятные вопросы). с точки синтезатора это одно и то же - я проверил на всякий случай Да, тоже проверил. Синтезатор Quartusa даёт такой RTL вид: С точки зрения симуляции то же все одинаково вроде должно быть Да, Modelsim module wires_vs_regs_tb; reg b, c; wire a_net; wire [1:0] a_reg; wires_vs_regs wires_vs_regs_inst(.a_net(a_net), .a_reg(a_reg), .b(b), .c(c)); initial begin #0 b = 0; c = 0; #10 b = 1; #10 b = 0; c = 1; #10 b = 1; #10 $finish; end initial $monitor("At %2t b = %1b, c = %1b -> a_net = %1b, a_reg[1:0] = %2b", $time, b, c, a_net, a_reg); endmodule // wires_vs_regs_tb даёт: # At 0 b = 0, c = 0 -> a_net = 0, a_reg[1:0] = 00 # At 10 b = 1, c = 0 -> a_net = 1, a_reg[1:0] = 11 # At 20 b = 0, c = 1 -> a_net = 1, a_reg[1:0] = 11 # At 30 b = 1, c = 1 -> a_net = 0, a_reg[1:0] = 00 единственное различие в том, что в 2х последних случаях выходы должны быть reg Снова согласен: Quartus сразу же поправил описание цепей и переменных: module wires_vs_regs( input b, c, output a_net, output reg [1:0] a_reg ); // code 1: assign a_net = b + c; // code 2: always @( b or c ) begin a_reg[0] = b + c; end // code 3: always @( * ) begin a_reg[1] = b + c; end endmodule // wires_vs_regs Я бы добавил - это статья - предложение с чего бы начать. Не корректно ее юзать работодателем для отсева неквалифицированных кадров)) Не стоит сильно расстраиваться, если что-то не знаете, как правило если раньше с этим не сталкивались за годы работы в данной сфере, то это вам и не особо нужно(есть конечно исключения) p.s. это мое личное мнение Спасибо Вам за поддержку и всем за советы. На всякий случай приложу архив с проектом: вдруг, кто в будущем с этим же столкнётся? ) wires_vs_regs.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться