Перейти к содержанию
    

Junior FPGA Design Engineer: что должен знать?

Доброго всем!

 

В одной хорошей статье 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

ставит меня в тупик.

 

По-моему мнению, эти описания абсолютно эквивалентны, но, подозреваю, что могу сильно ошибаться.

Был бы признателен за содержательный ответ.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На Ваш вопрос ответит любой синтезатор :rolleyes:

 

Warning from admin:
Оверквотинг запрещен правилами форума, п.3.4
Изменено пользователем makc

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вопрос: как Вы думаете, что будет происходить при моделировании описанных конструкций в симуляторе? Желательно опишите эти варианты пошагово в контексте модуля, содержащего и другие сигналы/конструкции.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На Ваш вопрос ответит любой синтезатор

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

с точки синтезатора это одно и то же - я проверил на всякий случай

С точки зрения симуляции то же все одинаково вроде должно быть

 

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

 

Я бы добавил - это статья - предложение с чего бы начать. Не корректно ее юзать работодателем для отсева неквалифицированных кадров)) Не стоит сильно расстраиваться, если что-то не знаете, как правило если раньше с этим не сталкивались за годы работы в данной сфере, то это вам и не особо нужно(есть конечно исключения)

p.s. это мое личное мнение

post-80661-1525785177_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На Ваш вопрос ответит любой синтезатор :rolleyes:
Синтезатор с собой на собеседование не возьмёшь ))

Но Ваш отсыл справедлив, просто захотелось послушать мнение профессионалов )

 

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

Но и Ваш совет тоже учту на будущее (есть в статье ещё непонятные вопросы).

 

 

с точки синтезатора это одно и то же - я проверил на всякий случай
Да, тоже проверил. Синтезатор Quartusa даёт такой RTL вид:

wires_vs_regs.gif

 

С точки зрения симуляции то же все одинаково вроде должно быть
Да, 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...