Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Junior FPGA Design Engineer: что должен знать?
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Языки проектирования на ПЛИС (FPGA)
Marat Zuev
Доброго всем!

В одной хорошей статье 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
На Ваш вопрос ответит любой синтезатор rolleyes.gif

Warning from admin:
Оверквотинг запрещен правилами форума, п.3.4
makc
Вопрос: как Вы думаете, что будет происходить при моделировании описанных конструкций в симуляторе? Желательно опишите эти варианты пошагово в контексте модуля, содержащего и другие сигналы/конструкции.
iosifk
Цитата(Flip-fl0p @ May 8 2018, 13:27) *
На Ваш вопрос ответит любой синтезатор

А я добавлю. Автор статьи, на которую была ссылка тоже неплохой парень. И можно у него спросить...
Lutovid
с точки синтезатора это одно и то же - я проверил на всякий случай
С точки зрения симуляции то же все одинаково вроде должно быть

единственное различие в том, что в 2х последних случаях выходы должны быть reg

Я бы добавил - это статья - предложение с чего бы начать. Не корректно ее юзать работодателем для отсева неквалифицированных кадров)) Не стоит сильно расстраиваться, если что-то не знаете, как правило если раньше с этим не сталкивались за годы работы в данной сфере, то это вам и не особо нужно(есть конечно исключения)
p.s. это мое личное мнение
Marat Zuev
Цитата(Flip-fl0p @ May 8 2018, 11:27) *
На Ваш вопрос ответит любой синтезатор rolleyes.gif
Синтезатор с собой на собеседование не возьмёшь ))
Но Ваш отсыл справедлив, просто захотелось послушать мнение профессионалов )

Цитата(iosifk @ May 8 2018, 11:45) *
А я добавлю. Автор статьи, на которую была ссылка тоже неплохой парень. И можно у него спросить...
Здесь все - неплохие парни. Поэтому, решил, что будет лучше спросить у всех.
Но и Ваш совет тоже учту на будущее (есть в статье ещё непонятные вопросы).


Цитата(Lutovid @ May 8 2018, 14:22) *
с точки синтезатора это одно и то же - я проверил на всякий случай
Да, тоже проверил. Синтезатор Quartusa даёт такой RTL вид:


Цитата(Lutovid @ May 8 2018, 14:22) *
С точки зрения симуляции то же все одинаково вроде должно быть
Да, 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

Цитата(Lutovid @ May 8 2018, 14:22) *
единственное различие в том, что в 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


Цитата(Lutovid @ May 8 2018, 14:22) *
Я бы добавил - это статья - предложение с чего бы начать. Не корректно ее юзать работодателем для отсева неквалифицированных кадров)) Не стоит сильно расстраиваться, если что-то не знаете, как правило если раньше с этим не сталкивались за годы работы в данной сфере, то это вам и не особо нужно(есть конечно исключения)
p.s. это мое личное мнение
Спасибо Вам за поддержку и всем за советы.
На всякий случай приложу архив с проектом: вдруг, кто в будущем с этим же столкнётся? )



Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.