Продолжаю постигать азы асинхронной логики. Про сигналы и базовый протокол взаимодействия я уже писал. Но то были теоретические рассуждения, а теперь пора заняться реальным кодом. Для описания асинхронных каналов задействуем конструкцию interface языка SystemVerilog. Будет использовать кодирование dual-rail. Адаптировать для quad-rail или 1-of-N будет нетрудно.
Существует три типа асинхронных каналов: push, pull и nonput. В первом случае активная сторона (мастер) выдаёт данные, а пассивная (slave) отвечает подтверждением:
Существует три типа асинхронных каналов: push, pull и nonput. В первом случае активная сторона (мастер) выдаёт данные, а пассивная (slave) отвечает подтверждением:
_______ ______
| data |
Master | ======> | Slave
output | | input
| req |
_______| <------ |______
Второй вариант - канал типа pull. Здесь мастер выдаёт запрос, а в ответ приходят данные:_______ ______
| req |
Master | ------> | Slave
input | | output
| data |
_______| <====== |______
Каналы push и pull с кодированием dual rail ширины N бит можно описать следующим образом:interface dual_rail #(parameter N = 1);
logic [N-1:0] hidata; // Positive rail
logic [N-1:0] lodata; // Negative rail
logic req; // Request for pull channel
modport master_output( // Active push channel.
output hidata,
output lodata,
input req
);
modport master_input( // Active pull channel.
output req,
input hidata,
input lodata
);
modport slave_input( // Passive push channel
input hidata,
input lodata,
output req
);
modport slave_output( // Passive pull channel
input req,
output hidata,
output lodata
);
endinterfaceТретий тип канала называют nonput или sync. Он не передаёт данные, и состоит всего из двух проводов. Мастер посылает запрос, slave отвечает:_______ ______
| req |
| ------> |
Master | | Slave
| ack |
_______| <------ |______Описание интерфейса на Системверилоге:
interface sync;
logic req; // Request
logic ack; // Acknowledge
modport master( // Active channel
output req,
input ack
);
modport slave( // Passive channel
input req,
output ack
);
endinterface
странно
Date: 2017-02-02 11:33 (UTC)Re: странно
Date: 2017-02-02 19:14 (UTC)https://vak.dreamwidth.org/403847.html
Re: странно
Date: 2017-02-02 21:49 (UTC)что касается монотонности, то не очень понятно, как это систематически провести. Невозможно ведь монотонно преобразовать сигнал из 0/1 в 01/10 монотонно - если же все сигналы хранить в такой кодировке, то тогда монотонность фактически утрачивается, и всякую функцию можно считать монотонноой...
Re: странно
Date: 2017-02-03 06:50 (UTC)