замените `define на конструкцию let - PullRequest
0 голосов
/ 02 ноября 2019

Я пытаюсь избежать использования `define pre-processor и начинаю использовать" let ", так как это языковая конструкция.

Вот мой пример:

`define MY_REGISTER_RANGE 15:0

logic [`MY_REGISTER_RANGE] my_array;

Как я могусделать то же самое с пусть конструировать? Мой код очень прост, но он предполагает, что я `включаю файл, в котором определен мой макрос MY_REGISTER_RANGE (в другом файле).

Спасибо.

Ответы [ 2 ]

2 голосов
/ 03 ноября 2019

Вы можете заменить только определенные виды выражений, используя let. Вы не можете просто определить диапазон.

Вы должны использовать typedef вместо let

typedef logic [15:0] MY_REGISTER_t;
MY_REGISTER_t my_array;
1 голос
/ 03 ноября 2019

В данном конкретном случае вам не нужна конструкция let. Более того, конструкция не имеет ничего общего с объявлениями переменных.

Вы можете начать использовать параметры вместо текстовых макросов. Например,

parameter MY_REGISTER_WIDTH = 16;
...
logic [MY_REGISTER_WIDTH-1:0] my_array;

Конструкция let определяет простую функцию, содержащую одно выражение. В этом отношении его можно использовать для замены определенных типов макросов, например,

`define MULT(A,B)   A * B
...
R = `MULT(O1,O2);

можно заменить на

let MULT(A,B) = A * B;
...
R = MULT(O1,O2);
...