MPSU / FPGA_pract

Методические материалы курса "Практикум по ПЛИС"
17 stars 9 forks source link

модуль crc8 всё время в сбросе #26

Open Shuregg opened 5 months ago

Shuregg commented 5 months ago

Добрый день! Если следовать примерам из лабораторной работы, выходит, что модуль вычислителя находится в сбросе во время симуляции: В тестовом окружении в initial блоке сброса сигнал p_rst_i изначально выставляется в высокий уровень и, спустя 200 нс, в низкий.

initial
begin
  p_dat_i    = 'hz;
  p_enable_i = 0;
  p_sel_i    = 0;
  p_we_i     = 'hz;
  p_adr_i    = 'hz;
  p_rst_i    = 1;
  #200
  p_rst_i    = 0; // Запись #200 обозначает что смена значения сигнала сброса произойдет через 200нс.
end

В в порты подключаемого wrapper'а этот сигнал подаётся без инверсии,

wrapper_crc8
dut_wrapper_crc8
(
  .p_rst_i    (p_rst_i),
  ...
);

а в самом wrapper'е при подключении crc8 появляется инверсия.

  crc8
  i_crc8
  (
    .clk_i        (p_clk_i),
    .rst_i        (!p_rst_i),
    .din_i        (din_i),
    .data_valid_i (data_valid_i),
    .crc_rd       (crc_rd),
    .crc_o        (crc_o)
  );

Внутри модуля CRC сброс осуществляется по высокому уровню соответствующего сигнала

always_ff @(posedge clk_i)
  begin
    if (rst_i) begin // Сигнал сброса - обнуляем все регистры
      state_ff         <= IDLE;
      data_current_ff  <= 8'b0;
      crc_ff           <= 8'b0;
      crc_counter_ff   <= 4'd0;
    end
    else begin

Вся эта цепочка сигнала p_rst_i приводит к тому, что после 200нс p_rst_i = 0, а в модуле crc8 rst_i будет равен 1 на протяжении всей последующей симуляции (как указал ранее, crc8 сбрасывается по высокому уровню). Не стал делать pr, оставлю место корректировки сигнала на ваше усмотрение.

Shuregg commented 5 months ago

Либо вы можете сообщить где конкретно следует исправить, я поправлю и сделаю pr (предполагаю, что нужно инвертировать в самом модуле crc):

module crc8
(
...
);
always_ff @(posedge clk_i)
  begin
    if (~rst_i) begin // Сигнал сброса - обнуляем все регистры
      state_ff         <= IDLE;
      data_current_ff  <= 8'b0;
      crc_ff           <= 8'b0;
      crc_counter_ff   <= 4'd0;
    end
    else begin
    ...
Konf commented 5 months ago

По спецификации, сброс в APB имеет активный уровень "0", соответственно, тут требуется правильно формировать сигнал в тестбенче и правильно его назвать p_rstn_i, далее распространить эти правки на весь код примеров и на методичку. Это какой-то объём работ, вы можете его сделать в PR и получить баллы

Shuregg commented 5 months ago

Добрый день, отправил PR