Мегаобучалка Главная | О нас | Обратная связь


Модули проекта (Design Blocks Modules)



2015-11-10 836 Обсуждений (0)
Модули проекта (Design Blocks Modules) 0.00 из 5.00 0 оценок




Расммотрим правила построения иерархического проекта. В качестве примера мы будем рассматривать триггер с разрешением (E-type flip flop). В Verilog возможны два подхода для его реализации

Сверху вниз (Topdown)- начать с описания Е-триггера и далее добавлять детали преокта

Снизу вверх (Bottom up)– начать с базовых блоков, а затем объединить их в единый проект

 

Мы воспользуемся технологией снизу вверх, хртя наверное, наиболее удобно использование обоих подходов.

 

Начнем с описания D- триггера как модуля. Ключевые слова для задания модуля

 

module <module_name> ... endmodule, as below.

 

Ниже приведено его описание

 

module dff(q, data, clock);

output q;

input data, clock;

reg q;

 

always @(posedge clock)

q = data;

endmodule // dff

 

Аналогично поведенческое описание мультплексора с инверсией (inverting multiplexor) имеет вид

 

module mux2_1(out, in1, in2, cntrl);

output out;

input in1, in2, cntrl;

 

assign out = cntrl ? ~in1 : ~in2;

endmodule // mux2_1

 

Тогда описание модуля верхнего уровня для Е-триггера, состоящего из D- триггера и мультиплексора принмиает вид

 

module e_ff(q, data, enable, reset, clock);

output q;

input data, enable, reset, clock;

wire norout, muxout;

 

mux2_1 mod1 (muxout, data, q, enable);

nor (norout, reset, muxout);

dff dff0 (q, norout, clock);

endmodule

Обратим еще раз внимаение на обращение к модулю, определяемому пользователем – через имя экземпляра модуля

 

name_of_module instance_name (port_list);

 

 

Ниже приведен текст модуля для тестирования нашего триггера. Как и в примере с мультиплексором, он не имеет списка портов, поскольку является самым верхним в иерархии

 

module e_ffStimulus;

reg data, enable, reset, clock;

wire q;

 

e_ff mod1 (q, data, enable, reset, clock);

 

initial begin

clock = 1'b0;

forever clock = #5 ~clock;

end

 

initial begin

enable = 1'b0; // переменная разрешения

reset = 1'b1; // активный уровень сброса - 1

#20 reset = 1'b0; // сьрос.

data = 1'b1; установка в HIGH

#10 enable = 1'b1; // and then enable data latching

#10 data = 1'b1; // изменение данных

#20 data = 1'b0; // изменение данных

#30 data = 1'b1; // изменение данных

#10 data = 1'b0; // изменение данных

#10 data = 1'b1; // изменение данных

#20 enable = 1'b0; // запрет защелкивания

#10 data = 1'b0; // изменение данных

#10 reset = 1'b1; // сьрос снова

#20 $finish; // все

end // такт остановлен

initial begin

$display($time, " reset, enable, data, q ");

$display($time, " %d %d %d %d",

reset, enable, data, q);

forever #10 $display($time, " %d %d %d %d",

reset, enable, data, q);

end

 

endmodule // e_ffStimulus

 

Порты (Ports)

 

Порты обеспечивают связь модуля с другими модулями проекта.Ниже приведен порты для нашего примера

 

module d_ff(q, d, reset, clock);

module e_ff(q, d, enable, reset, clock);

module Stimulus;

Каждый порт может быть объявлен как вход (input),выход (output) или двунаправлекнный (inout). Все объявленные порты по умолчанию назначаются цепи (wire), для изменения типа сигнала необходимо выполнить назначение отдельно. Например

 

module d_ff(q, d, reset, clock);

output q; // обязательное объявление портов

input d, reset, clock; // как входы и выходы

reg q; // снова объявляем как регистр

Не забываем, что выходы модуля идут первыми в списке портов.

 

Правила соединения (Connection Rules )

 

Выше мы рассматривали два типа модулей - внешние и внутренние (outer and inner ), в нашем примере внешним модулем был Е-триггер, внутренним – триггер типа D. Ниже рассмотрим основные правила соелдинения модулей

Входы (Inputs )

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

 

Выходы (Outputs )

Во внутреннем модуле выходы могут иметь тип как цепь, так и регистр, в то время как выходы внешнего модуля дожны быть типа цепь, поскольку управляются внутренними модулями

 

Двунаправленые выводы (Inouts )

Двунаправленный порт всегда имеет тип цепь.

Соответствие портов (Port Matching)

Очевидно, обращаясь к модулю, необходимо, чтобы совпадала разрядность портов.

Присоединение портов (Connecting Ports )

Присоединение портов осуществляется либо по порядку (ordered list) или по имени порта (or by name). Например

 

module d_ff( q, d, reset, clock);

...

endmodule

 

module e_ff(q, d , enable, reset, clock);

output q;

input d, enable, reset, clock;

wire inD;

...

d_ff dff0(q, inD, reset, clock);

...

endmodule

 

 

3.4.27. Базовые блоки (Basic Blocks )

В Verilog приняты два типа назначений – непрерывное и процедурное. Непрерывное назначение может быть выполнено для цепей netsили для их объединений (concatenation of nets).Операнды могут иметь произвольный тип данных.

Процедурное назначение может быть выполнено для данных типов reg, integer, real или time.

Инициализация (Initial Block )

Ключевые слова: initial

Блок инициализации состоит из группы операторов, заключенных в операторные скобки begin... end и которые будут выполняться с момента старта моделирования. Ниже приведен пример инициализации моделирования

 

initial

clock = 1'b0;

 

initial

begin

alpha = 0;

#10 alpha = 1; // генерация сигнала

#20 alpha = 0;

#5 alpha = 1;

#7 alpha = 0;

#10 alpha = 1;

#20 alpha = 0;

end;

 



2015-11-10 836 Обсуждений (0)
Модули проекта (Design Blocks Modules) 0.00 из 5.00 0 оценок









Обсуждение в статье: Модули проекта (Design Blocks Modules)

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас...
Организация как механизм и форма жизни коллектива: Организация не сможет достичь поставленных целей без соответствующей внутренней...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (836)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.011 сек.)