Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
Shuregg opened this issue May 19, 2024 · 3 comments
Open

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

Shuregg opened this issue May 19, 2024 · 3 comments

Comments

@Shuregg
Copy link
Contributor

Shuregg commented May 19, 2024

Добрый день! Если следовать примерам из лабораторной работы, выходит, что модуль вычислителя находится в сбросе во время симуляции:
В тестовом окружении в 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
Copy link
Contributor Author

Shuregg commented May 21, 2024

Либо вы можете сообщить где конкретно следует исправить, я поправлю и сделаю 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
Copy link
Collaborator

Konf commented Jun 4, 2024

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

@Shuregg
Copy link
Contributor Author

Shuregg commented Jun 5, 2024

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants