Радиотехнический сайт RADIOTRACT

Радиотехника и электроника для разработчиков и радиолюбителей

Информация

 

 

Справочные данные на радиоэлектронные компоненты, приборы, средства связи и измерений. Радиотехническая литература.

Общая

Микроконтроллеры

ПЛИС

Измерения

Радиостанции

Библиотека

Справочники

Доска объявлений

Объявления о покупке и продаже радиокомпонентов. Спрос и предложение на различные радиодетали и приборы.

Куплю

Продам

Магазин

Программы

Полезные программы для радиолюбителей и разработчиков радиоэлектроники.

Радиотехника

Интернет

Калькуляторы

Другие

Мы в соцсетях

  

ПЛИС

ПЛИС\Удаленная прошивка ПЛИС\Подключение ALTREMOTE_UPDATE к NIOS

Подключение мегафункции ALTREMOTE_UPDATE к NIOS

Подключить сгенерированный в MegaWizard модуль ALTREMOTE_UPDATE к процессору NIOS можно через стандартную шину Avalon. При этом удобно организовать доступ к портам модуля ALTREMOTE_UPDATE через регистры ввода-вывода. Для этого написан модуль s2_remote_update (файл s2_remote_update.tdf), текст которого приведён ниже:

TITLE "REMOTE UPDATER FOR STRARIX II";

INCLUDE "s2_remote_updater.inc";

CONSTANT NUM_PARS = 8;
CONSTANT NUM_PARS_WDT = CEIL(LOG2(NUM_PARS));
CONSTANT D_WDT = 12;
CONSTANT GND_WDT = 32-D_WDT;
CONSTANT A_WDT = CEIL(LOG2(NUM_PARS+1));


SUBDESIGN s2_remote_update
(
---Avalon Interface---
clk : INPUT; --System Clock
reset : INPUT; --System Reset
avs_addr[A_WDT-1..0] : INPUT; --address
avs_cs : INPUT=VCC; --chipselect
avs_write : INPUT; --write avs_read : INPUT=VCC; --read
avs_wrdata[31..0] : INPUT; --writedata
avs_rddata[31..0] : OUTPUT; --readdata
)

VARIABLE

s2_ru : s2_remote_updater;

param_rd_ff : DFF;
param_wr_ff : DFF;
param_rg[NUM_PARS_WDT-1..0] : DFFE;
param_wr_rg[D_WDT-1..0] : DFFE;
rst_timer_ff : DFF;
reconfig_ff : DFFE;
rddata_rg[31..0] : DFF;

gnd_node[GND_WDT-1..0] : NODE;

BEGIN

s2_ru.clock = clk;
s2_ru.data_in[] = param_wr_rg[].q;
s2_ru.param[] = param_rg[].q;
s2_ru.read_param = param_rd_ff.q;
s2_ru.reconfig = reconfig_ff.q;
s2_ru.reset = reset;
s2_ru.reset_timer = rst_timer_ff.q;
s2_ru.write_param = param_wr_ff.q;

param_rd_ff.clk = clk;
param_rd_ff.d = avs_cs & avs_read & (avs_addr[] < NUM_PARS);

param_wr_ff.clk = clk;
param_wr_ff.d = avs_cs & avs_write & (avs_addr[] < NUM_PARS);

param_rg[].clk = clk;
param_rg[].d = avs_addr[NUM_PARS_WDT-1..0];
param_rg[].ena = avs_cs & (avs_addr[] < NUM_PARS);

param_wr_rg[].clk = clk;
param_wr_rg[].d = avs_wrdata[D_WDT-1..0];
param_wr_rg[].ena = avs_cs & avs_write;

rst_timer_ff.clk = clk;
rst_timer_ff.d = avs_cs & avs_write & (avs_addr[] == NUM_PARS) & avs_wrdata[0];

reconfig_ff.clk = clk;
reconfig_ff.d = avs_wrdata[1];
reconfig_ff.ena = avs_cs & avs_write & (avs_addr[] == NUM_PARS);

gnd_node[] = GND;

rddata_rg[].clk = clk;
if (avs_addr[] < NUM_PARS) then
   rddata_rg[].d = (gnd_node[],s2_ru.data_out[]);
else
   rddata_rg[].d = (s2_ru.busy,gnd_node[GND_WDT-2..0],s2_ru.data_out[]);
end if;
avs_rddata[] = rddata_rg[].q;

END;

Описание регистров модуля s2_remote_update :

АдресОписание
0 (запись/чтение)Параметр 0
1 (запись/чтение)Параметр 1
2 (запись/чтение)Параметр 2
3 (запись/чтение)Параметр 3
4 (запись/чтение)Параметр 4
5 (запись/чтение)Параметр 5
6 (запись/чтение)Параметр 6
7 (запись/чтение)Параметр 7
8 (чтение, биты 0...30)Значение параметра
8 (чтение, бит 31)Статус занятости
8 (запись, бит 0)Сброс сторожевого таймера
8 (запись, бит 1)Старт реконфигурации


При создании компонента в SOPC Builder или Qsys, необходимо учесть, что разрядность регистров управления - 32 бита, латентность чтения - 1 такт, задержка чтения - 0 тактов.


Комментарии

comments powered by Disqus