Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Лістинг програми автомата Мілі




module mealy

(

input wire CLOCK_50,

input wire [1: 0] SW, //data_in

input wire [0: 0] KEY, //reset

output wire [17: 0] LEDR, //data_out

output reg [0: 0] LEDG, //індикатор тактових сигналів частотою 2 Гц

 

//7-сегментні індикатори

output reg [7: 0] HEX0, HEX1, HEX2, HEX3, HEX4, HEX5, HEX6, HEX7

);

 

//провідник, негативний сигнал якого миттєво переводить автомат в початковий стан

wire reset;

 

//вхідні дані, які задаються перемикачами SW[0] і SW[1]

wire [1: 0] data_in;

 

//вихідні дані, які фіксуються світлодіодом LEDR[17]

reg data_out;

 

 

reg [2: 0] pres_state, next_state, clock;

integer timer, item;

 

always @(posedge CLOCK_50)

begin

 

//початок блоку подількика частоти

timer = timer - 1;

if(!timer)

begin

timer = 25000000;

clock = clock? 0: 1;

end

//кінець блоку подількика частоти

 

//вивід на 7-сегментні індикатори:

//...текучого стану автомата

HEX7 = pres_state == 0? 7'b100_0000:

pres_state == 1? 7'b111_1001:

pres_state == 2? 7'b010_0100:

pres_state == 3? 7'b011_0000:

pres_state == 4? 7'b001_1001: 7'b011_1111;

 

//...наступного стану автомата

HEX0 = next_state == 0? 7'b100_0000:

next_state == 1? 7'b111_1001:

next_state == 2? 7'b010_0100:

next_state == 3? 7'b011_0000:

next_state == 4? 7'b001_1001: 7'b011_1111;

end

 

//встановлення рівня логічного сигналу

//індикатора тактів 2 Гц

always @(posedge clock)

begin

LEDG[0] = LEDG[0]? 0: 1;

end

 

initial

begin

timer = 25000000;

clock = 1;

pres_state = st0;

 

//ініціалізація всіх 7-сегментний індикаторів

//в неактивний режим

for(item = 0; item < 8; item = item + 1)

begin

HEX1[item] = 1'b1;

HEX2[item] = 1'b1;

HEX3[item] = 1'b1;

HEX4[item] = 1'b1;

HEX5[item] = 1'b1;

HEX6[item] = 1'b1;

HEX7[item] = 1'b1;

HEX0[item] = 1'b1;

end

end

 

assign reset = KEY[0];

assign LEDR[17] = data_out;

assign data_in = SW;

 

parameter st0=3'd0, st1=3'd1, st2=3'd2, st3=3'd3, st4=3'd4;

 

// FSM register (регістр активного стану автомата)

always @(posedge clock or negedge reset)

begin: statereg

if(!reset)// асинхронне скидання

pres_state = st0;

else

pres_state = next_state;

end // statereg

 

// FSM combinational block (логіка переходів)

always @(pres_state or data_in)

begin: fsm

case (pres_state)

st0: case(data_in)

2'b00: next_state=st0;

2'b01: next_state=st4;

2'b10: next_state=st1;

2'b11: next_state=st2;

endcase

st1: case(data_in)

2'b00: next_state=st0;

2'b10: next_state=st2;

default: next_state=st1;

endcase

st2: case(data_in)

2'b0x: next_state=st1;

2'b1x: next_state=st3;

endcase

st3: case(data_in)

2'bx1: next_state=st4;

default: next_state=st3;

endcase

st4: case(data_in)

2'b11: next_state=st4;

default: next_state=st0;

endcase

default: next_state=st0;

endcase

end // fsm

 

// логіка формування виходу автомата Мілі за використанням pres_state w/ data_in

always @(data_in or pres_state)

begin: outputs

case (pres_state)

st0: case(data_in)

2'b00: data_out=1'b0;

default: data_out=1'b1;

endcase

st1: data_out=1'b0;

st2: case(data_in)

2'b0x: data_out=1'b0;

default: data_out=1'b1;

endcase

st3: data_out=1'b1;

st4: case(data_in)

2'b1x: data_out=1'b1;

default: data_out=1'b0;

endcase

default: data_out=1'b0;

endcase

end // outputs

 

endmodule

 

Стани автомата:

=0, =1, =2, =3, =4, =5, =6, =7, =8, =9.

Вхідні значення (в двійковій формі):

=000, =001, =010, =011, =100, =101, =110, =111.

Вихідні значення (в двійковій формі):

=000, =001, =010, =011, =100, =101, =110, =111.

 

 

Варіанти індивідуальних завдань

 

Варіант 1

 

Таблиця переходів автомата

 

 

 

Таблиця виходів автомата

 

 

 

Варіант 2

 

Таблиця переходів автомата

 

 

 

Таблиця виходів автомата

 

 

 

Варіант 3

 

Таблиця переходів автомата

 

Таблиця виходів автомата

 

 




Поделиться с друзьями:


Дата добавления: 2017-02-24; Мы поможем в написании ваших работ!; просмотров: 270 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Своим успехом я обязана тому, что никогда не оправдывалась и не принимала оправданий от других. © Флоренс Найтингейл
==> читать все изречения...

2351 - | 2153 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.008 с.