Текст программы асинхронного 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Текст программы асинхронного



ИНТЕРФЕЙСА И ТЕСТОВОГО МОДУЛЯ

 


Module Decoder(

input [2:0] A,//трехразрядная шина А

Input CLK,//вход синхронизации

output [7:0] X / /востмиразрядная выходная шина

);

  //объявление входов/выходов

wire CLK;

wire [2:0] A;

reg [7:0] X;

  //реагирование на любой входящий сигнал

always @*

Begin

X =8' b 00000000; //Обнуление шины X (=0)

X [ A ] = 1;// проводу с номером А из шины X присвоить 1

End

Endmodule

Module Counter(

Input CLK,//вход синхронизации

Input CE,//разрешающий вход

output [2:0] Q //выходная трехразрядная шина

);

 

  //объявление входов/выходов

wire CLK;

wire CE;

reg [2:0] Q = 0;

//реакция на фронт (0 - > 1)синхронизирующего сигнала

always @(posedge CLK)

// если разрешена работа

If(CE)

Begin

Q = Q +1;//увеличение числа на выходе

End

Endmodule


Module Multiplexer(

Input CLK,//вход синхронизации

Input CE,//разрешающий вход

input [2:0] A,//двухразрядная шина A

input [7:0] D,//восьмиразрядная шина D

Output F //выход F

);

  //объявление..

//входов/выходов,..

wire CLK;

wire CE;

wire [2:0] A;

wire [7:0] D;

//.., вспомогательных регистров, и..

wire [7:0] DD;

reg F;

//.., и включаемых модулей

Decoder DC _1(CLK, A, D);

  //реакция на любое изменение входящих сигналов

always @*

//если нразрешена работа

If (CE)

Begin

F = D [ A ]&& DD [ A ];//подать на выход F сигнал с провода с номером A из шин D и DD

End

Endmodule


Module BuferFIFO(

Input RST,//вход сброса

Input LOAD,//вход загрузки (записи)

Input READ,//вход чтения

input [7:0] DATA,//восьмиразрядная шина ввода данных DATA

output [7:0] OUT //восьмиразрядная шина вывода данных OUT

);

//объявление входов/выходов

wire RST;

wire LOAD;

wire READ;

wire [7:0] DATA;

reg [7:0] OUT;

//объявление вспомогательных регистров:

//счетного i

//памяти database

reg [3:0] i;

reg [7:0] database [6:0];

//начальная инициализация

//обнуление счетного регистра

//обнуление выходной шины

Initial

Begin

i=0;

OUT = 0;

End

//реакция на фронт сигналов READ,RST,LOAD

always @ (

Posedge READ or

Posedge RST or

Posedge LOAD)

Begin

//реакция на сброс

If (RST)

Begin

//очистка памяти через счетчик (каждый i-ый восьмиразрядный регистр

for(i=0; i<=6; i=i+1)

Begin

database[i] = 8'HXX;

End

End

Else

//реакция на загрузку

If(LOAD)

Begin

//запись данных в буфер

for(i=0; i<=6; i=i+1)

Begin

database[6-i] = database[6-(i+1)];

End

database[0]=DATA;

End

Else

//реакция на чтение

If(READ)

Begin

//выгрузка данных из буфера на шину дынных

OUT=database[6];

for(i=0; i<=6; i=i+1)

Begin

database[6-i] = database[6-(i+1)];

End

End

End

Endmodule

Module Transmitter(

input [7:0] DATA,//восьмиразрядная шина данных

input RST_buf,//сброс буфера

input LOAD_buf,// загрузка в буфер

input READ _ buf,//чтение из буфера

Input CLK,//вход синхронизации

Output WORD / /выходной провод

);

//объявление входов/выходов

wire [7:0] DATA;

wire RST_buf;

wire LOAD_buf;

wire READ_buf;

wire CLK;

wire WORD;

wire [7:0] out_buf;

wire [2:0] timer;

//объявление входящих модулей

// и перенаправление им сигналов

Counter CT_1(CLK, READ_buf, timer);

BuferFIFO BF_1(RST_buf, LOAD_buf, READ_buf, DATA, out_buf);

Multiplexer MUX_1(CLK, READ_buf, timer, out_buf, WORD);

Endmodule


module Testbench;

//Входы (Inputs)

//объявление входов

reg [7:0] DATA;

reg RST_buf;

reg LOAD_buf;

reg READ_buf;

reg CLK;

//Выходы (Outputs)

//объявление выходов

wire WORD;

//объявление тестируемого модуля

//Instantiate the Unit Under Test (UUT)

Transmitter uut (

DATA(DATA),

.RST_buf(RST_buf),

.LOAD_buf(LOAD_buf),

.READ_buf(READ_buf),

CLK(CLK),

WORD(WORD)

);

//обнуление значений

Initial

Forever

Begin

#5;

CLK = ~CLK;

End

Initial

Begin

// Инициализация входов

DATA = 83;//подача даных для записи в буфер

RST _ buf = 0;//не очищать буфер

LOAD _ buf = 1;//загрузить в буфер данные с шины DATA

READ _ buf = 0;//отключение чтения из буфера

CLK = 0;//синхроимпуль в 0

#10;//подача сигнала в течение 10 нс

//ЗАПИСЬ В БУФЕР

LOAD _ buf =0;//отключить загрузку в буфер

#10;;//подача сигнала в течение 10 нс

LOAD _ buf =1;//включить загрузку в буфер

DATA = 80;//подача данных для записи в буфер числа 80

#10;;//подача сигнала в течение 10 нс

LOAD_buf = 0;

#10;

LOAD_buf = 1;

DATA = 65;

#10;

LOAD_buf = 0;

#10;

LOAD_buf = 1;

DATA = 82;

#10;

LOAD_buf = 0;

#10;

LOAD_buf = 1;

DATA = 84;

#10;

LOAD_buf = 0;

#10;

LOAD_buf = 1;

DATA = 65;

#10;

LOAD_buf = 0;

#10;

LOAD_buf = 1;

DATA = 75;

#10;

 

//ЧТЕНИЕ ИЗ БУФЕРА

LOAD_buf = 0;

READ_buf = 1;

#80;

READ_buf = 0;

#5;

READ_buf = 1;

#80;

READ_buf = 0;

#5;

READ_buf = 1;

#80;

READ_buf = 0;

#5;

READ_buf = 1;

#80;

READ_buf = 0;

#5;

READ_buf = 1;

#80;

READ_buf = 0;

#5;

READ_buf = 1;

#80;

READ_buf = 0;

#5;

READ_buf = 1;

#80;

READ_buf = 0;

#100;

End

Endmodule



Поделиться:


Последнее изменение этой страницы: 2019-08-19; просмотров: 329; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.137.171.121 (0.027 с.)