Перейти к содержанию
    

Как на SV организовать двунаправленную шину или хотя бы "монтажное ИЛИ".

Итак. Есть система в ней куча регистров. (конфигурация ПДП, статусы, таймеры и прочая фигня).

Все эти регистры висят на одной шине описанной через interface.

 

interface regs_if(input clk, input rstn);
        logic [63:0]         tx_data;
        logic [63:0]         rx_data;
        logic [19:0]         tx_addr;
        logic [19:0]        rx_addr;
        logic                         wr;
        logic [7:0]                be;
endinterface

 

Дальше если мне нужен регистр какой-то я пишу

module artem_regrw_m #(
                        parameter ADDR
                        )(
                        output reg [63:0] data,
                        output        [7:0] be_wr,
                        regs_if regs
                        );
….
endmodule;

Тоесть задаю адрес итд.

Дальше. Мне понадобилось добавить в RO регистр, сигнал ready. Тоесть если по шине идет запрос на чтение, то любой из модулей висящей на шине regs_if может поднять какой-то сигнал, и задержать чтение.

Это первое.

Второе. У меня объединение кучи выходов сденало через

assign regs.tx_data = (ADDR[19:3] == regs.tx_addr[19:3])?data:{64{1'bz}};

Мне это не нравится. Во первых на это ругается квартус.

Warning: Tri-state node(s) do not directly drive top-level pin(s).

во вторых я хочу при промахе (ADDR[19:3] != regs.tx_addr[19:3] во всех модулях) чтобы читалось {32'BADADDR0,regs.tx_addr}. Сейчас все единицы читаются.

 

У меня есть ощущения что это можно решить или через описание шины какое-то нормальное. Или через функции в интерфейсе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

wor не поможет? Если конечно синтезатор его сможет переварить :(

Направление поиска понял. Спасибо.

 

wor кажется не пашет. tri0 тоже. :(

 

Объявил как wor. Пишет что cannot be assigned more than one value.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Объявил как wor. Пишет что cannot be assigned more than one value.
Увы :crying: А если другой синтезатор попробовать?

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Увы :crying: А если другой синтезатор попробовать?

http://quartushelp.altera.com/10.1/master.....oss=WOR%20WAND

Wired Nets (wor, wand,trior, and triand Nets) Supported

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На опенкоресах есть такой wb_builder, он генерит интерконнект автоматически. В квартусе, вроде SOPC Builder это должен делать. Не хотите поработать на подобных принципах?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На опенкоресах есть такой wb_builder, он генерит интерконнект автоматически. В квартусе, вроде SOPC Builder это должен делать. Не хотите поработать на подобных принципах?

Я не понял что это. Предпроцессор? Типа "сигналов" в QT?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я не понял что это.

На входе текстовое описание блоков и адресов, им назначенных (правит человек). На выходе VHDL, реализующий интерконнект между блоками (есть несколько видов интерконнекта).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На входе текстовое описание блоков и адресов, им назначенных (правит человек). На выходе VHDL, реализующий интерконнект между блоками (есть несколько видов интерконнекта).

Завтра гляну.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Итак. Есть система в ней куча регистров. (конфигурация ПДП, статусы, таймеры и прочая фигня).

Все эти регистры висят на одной шине описанной через interface.

 

interface regs_if(input clk, input rstn);
        logic [63:0]         tx_data;
        logic [63:0]         rx_data;
        logic [19:0]         tx_addr;
        logic [19:0]        rx_addr;
        logic                         wr;
        logic [7:0]                be;
endinterface

 

Второе. У меня объединение кучи выходов сденало через

assign regs.tx_data = (ADDR[19:3] == regs.tx_addr[19:3])?data:{64{1'bz}};

Мне это не нравится. Во первых на это ругается квартус.

Warning: Tri-state node(s) do not directly drive top-level pin(s).

 

КВА не может реализовывать tri-state дувнаправленые шины logic ом. должно использовать wire или wor и .т.п.

а у вас в интерфейсе логик, потому и не реализуется ничего.

наверное это потому что логик, согласно стандарту, иначе ведет себя при присваивании чем wire.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

КВА не может реализовывать tri-state дувнаправленые шины logic ом. должно использовать wire или wor и .т.п.

а у вас в интерфейсе логик, потому и не реализуется ничего.

наверное это потому что логик, согласно стандарту, иначе ведет себя при присваивании чем wire.

wire, reg и logic в квартусе одно и тоже. А wor не пашет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

wire, reg и logic в квартусе одно и тоже. А wor не пашет.

посмотрите эту тему

http://electronix.ru/forum/index.php?showtopic=79285

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

посмотрите эту тему

http://electronix.ru/forum/index.php?showtopic=79285

У меня похоже тоже чамое что и у des00. В общем баг квартуса.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

wire, reg и logic в квартусе одно и тоже. А wor не пашет.

вообчето неодно и тоже, разница между логиком и вайром принципиальна.

покрайней мере у меня упешно делается шина с типом wire. а логиком выдает то же что и вам.

вобчем порт должен быть объявлен проводом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вообчето неодно и тоже, разница между логиком и вайром принципиальна.

Я имел в виду в SV.

 

покрайней мере у меня упешно делается шина с типом wire. а логиком выдает то же что и вам.

вобчем порт должен быть объявлен проводом.

Я просто interface подключаю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...