Вектор размера регистров не может быть параметризован параметром модуля - PullRequest
0 голосов
/ 11 марта 2020

Я хочу использовать параметр модуля в качестве параметра размера вектора, который регистрируется, и я пытаюсь следующий код:

package Test;
import Vector      :: *;
(* synthesize *)
module mkTest #(
  parameter UInt#(32) qsize
) (Empty);
  Vector#(qsize,Reg#(Bit#(8))) queue <- replicateM (mkReg (0));
endmodule
endpackage

Но при компиляции этого модуля с помощью bs c я получаю следующее сообщение об ошибке:

Verilog generation
bsc -verilog -remove-dollar Test.bsv
Error: "Test.bsv", line 9, column 11: (T0008)
  Unbound type variable `qsize'

bs c версия:

Bluespec Compiler (build e55aa23)

Если я не использую регистры как тип векторных элементов, все в порядке. Следующий код не выдаст ошибок:

package Test;
import Vector      :: *;
(* synthesize *)
module mkTest #(
  parameter UInt#(32) qsize
) (Empty);
  Vector#(qsize,Bit#(8)) queue = replicate(0);
endmodule
endpackage

И я не могу понять, почему qsize является Unbound, поскольку он явно объявлен как параметр? Если я сделал что-то не так, не могли бы вы мне помочь и объяснить, как правильно сделать параметризованный размер Vector of Regs?

1 Ответ

0 голосов
/ 12 марта 2020

Я задал этот вопрос в одном из репозиториев Bluespe c на github, и Ришиюр С. Нихил дал мне очень полное объяснение. См. https://github.com/BSVLang/Main/issues/4

Вкратце: Vector в качестве первого параметра требует тип, а не UInt (или Int или что-то еще). Поэтому правильный способ сделать это будет:

  1. Создать интерфейс для модуля и сделать его type-polymorphi c
  2. Использовать тип из этого интерфейса в качестве параметра размера вектора
package Test;
import Vector      :: *;

interface Queue_IFC #(numeric type qsize_t);
  method Bool done;
endinterface

module mkQueue ( Queue_IFC #(qsize_t) );
  Vector #(qsize_t, Reg #(Bit #(8))) queue <- replicateM (mkReg (0));
endmodule

endpackage
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...