Дати дизайн VHDL боротьбі допомогти

T

TERRYWU3

Guest
Шановні експерти,

Я хочу розробити лічильник, який буде залежати від вхідного 8 бітна шина.

Автобус, якщо це "10011010", мій лічильник послідовності 1 -> 3 -> 4 -> 7 -> 1 -> 3 -> 4 -> 7 цикл.

Автобус, якщо це "10000001", лічильник послідовність 0 -> 7 -> 0 -> 7 ...петля

Мій автобус випадково змінився.

Не могли б ви дати мені радять або довідкову інформацію?Дуже дуже Ще раз спасибі!
Остання редакція TERRYWU3 по 20 квітня 2007 16:36; редагувалось 1 раз в цілому

 
Привіт

Це значення 10011010 на вхід на початку боротьби ...... скажи мені чітко

 
Привіт,

Ось код:

Сигнал лічильника next_counter: Integer діапазоні від 0 до 7;

Процес (CLK, скидання)
починати
якщо (Reset = '0 '), то
Лічильник <= 1;
ELSIF (clk'event і CLK = '1 '), то
Лічильник <= next_counter;
End If;
Наприкінці процесу;

Процес (лічильник, автобус)
починати
якщо (автобус = "10011010")
якщо (Counter = 1), то
next_counter <= 3;
ELSIF (Counter = 3), то
next_counter <= 4;
ELSIF (Counter = 4), то
next_counter <= 7;
ще
next_counter <= 1;
End If;
End If;
Наприкінці процесу;Якщо це не те, що ви хочете, PLZ вільний пост ур проблему в деталях

Від'їзд на синтаксисі, я не компіляції коду.

Привіт,
dcreddy

 
nandhika пише:

ПривітЦе значення 10011010 на вхід на початку боротьби ...... скажи мені чітко
 
І правда, що ви описали це секвенсор, а не боротьби, де послідовність визначається вхідний вектор.Нижче ви знайдете код, який міг би допомогти вам зробити те, що вам потрібно.Ви також можете спробувати додати інша держава, так що якщо вхідний = "00000000", ФШМ йде в неприйнятний стані.Перевірте синтаксис, оскільки в мене немає компілятора доступні в моєму комп'ютері в даний момент.
Вам потрібно буде заповнити кодом для державної 12,3,4,5,6 і 7.

Бібліотеки IEEE;
використання IEEE.std_logic_1164.all;
використання ieee.std_logic_unsigned.all;
використання ieee.std_logic_arith.all;

особа є count_at_input
порту (
CLK: у std_logic; - Годинники
RST: у std_logic; - асинхронний скидання
далі: в std_logic_vector (7 DOWNTO 0) - послідовність
Запитання: З std_logic_vector (2 DOWNTO 0) - вихід (кол-во)
);
count_at_input кінця;Архітектура лічильник count_at_input є
Сигнал Qp, Qn: std_logic_vector (2 DOWNTO 0) - нинішнім і майбутнім державою
починати
комбінаційної: процес (слід, ін)
починати
Qp випадку є
, Коли "000" => - якщо досягнуто, біт 0 1
якщо (далі (1) = '1 '), потім - Якщо bit1 = 1, то в наступному кількість = 1
Qn <= "001";
ELSIF (слід (2) = '1 '), потім - інше, якщо bit2 = 1, то в наступному Count = 2
Qn <= "010";
ELSIF (далі (3) = '1 '), потім - інше, якщо bit3 = 1, поруч Count = 3
Qn <= "011";
ELSIF (далі (4) = '1 '), потім - інше, якщо Bit4 = 1, поруч Count = 4
Qn <= "100";
ELSIF (далі (5) = '1 '), потім - інше, якщо bit5 = 1, поруч кол = 5
Qn <= "101";
ELSIF (далі (6) = '1 '), потім - інше, якщо Bit6 = 1, поруч кол = 6
Qn <= "110";
ELSIF (далі (7) = '1 '), потім - інше, якщо Bit7 = 1, поруч кол = 7
Qn <= "111";
другий - якщо всі інші бітів 0, залишайтеся тут
Qn <= "000"; - або він може бути Qn <= QP;
End If;

, Коли "001" => - в разі його досягнення, біт 1 = 1
якщо (КСР (2) = '1 '), потім - інше, якщо bit2 = 1, то в наступному Count = 2
Qn <= "010";
ELSIF (далі (3) = '1 '), потім - інше, якщо bit3 = 1, поруч Count = 3
Qn <= "011";
ELSIF (далі (4) = '1 '), потім - інше, якщо Bit4 = 1, поруч Count = 4
Qn <= "100";
ELSIF (далі (5) = '1 '), потім - інше, якщо bit5 = 1, поруч кол = 5
Qn <= "101";
ELSIF (далі (6) = '1 '), потім - інше, якщо Bit6 = 1, поруч кол = 6
Qn <= "110";
ELSIF (далі (7) = '1 '), потім - інше, якщо Bit7 = 1, поруч кол = 7
Qn <= "111";
якщо (далі (0) = '1 '), потім - Якщо bit0 = 1, то в наступному кількість = 0
Qn <= "000";
решта - не встановлені інші біти
Qn <= "001"; - або він може бути Qn <= QP;
End If;

, Коли "010" => - Put аналогічний код тут
, Коли "011" => - Put аналогічний код тут
, Коли "100" => - Put аналогічний код тут
, Коли "101" => - Put аналогічний код тут
, Коли "110" => - Put аналогічний код тут
коли інші => - помістив подібні коду для державних 7
кінець справі;

Q <= QP; - Вихід нинішній стан (кількість)

Завершити процес комбінаційної;

послідовний: Process (CLK, RST, слід)
починати
якщо (RST = '1 '), то
якщо (далі (0) = '1 '), то
Qp <= "000";
ELSIF (далі (1) = '1 '), то
Qp <= "001";
ELSIF (слід (2) = '1 '), то
Qp <= "010";
ELSIF (далі (3) = '1 '), то
Qp <= "011";
ELSIF (далі (4) = '1 '), то
Qp <= "100";
ELSIF (далі (5) = '1 '), то
Qp <= "101";
ELSIF (далі (6) = '1 '), то
Qp <= "110";
ELSIF (далі (7) = '1 '), то
Qp <= "111";
решта - Якщо не заданий вхідний біта
Qp <= "000"; - за умовчанням вважати = 0
End If;

ELSIF (clk'event і CLK = '1 '), то
Qp <= Q "; - по передньому фронту, зміни етап
End If;

послідовних кінці процесу;

кінець лічильника;

 
Ось ще один шлях ...Кодекс в Verilog ..сподіваюся, ви можете перевести його на VHDL!
Код:

Модуль seq_counter (

/ / Заходи

кол-во,

/ / Входи

CLK, reset_n, Seq

);

введення CLK, reset_n;

вхід [7:0] наст;

Потужність [2:0] Count;

REG [2:0] Count;

REG [7:0] seq_r;

REG [7:0] маска, mask_nx;

дріт [7:0] = mask_and_seq маска & seq_r;

REG [7:0] check_zero;

Дріт Zero = ~ | (check_zero);

Завжди @ (posedge CLK або negedge reset_n) починається

IF (! Reset_n) починається

seq_r <= 8'hff;

Маска <= 8'hff;

END ELSE BEGIN

seq_r <= слід;

Маска <= mask_nx;

кінець

кінецьЗавжди @ (/ * як * / кол-небудь приховувати або seq_r або нульова) починається

mask_nx = маску;

якщо (нуль)

mask_nx = seq_r;

ще

випадок (кол-во)

0: mask_nx [0] = 1'b0;

1: mask_nx [1] = 1'b0;

2: mask_nx [2] = 1'b0;

3: mask_nx [3] = 1'b0;

4: mask_nx [4] = 1'b0;

5: mask_nx [5] = 1'b0;

6: mask_nx [6] = 1'b0;

7: mask_nx [7] = 1'b0;

ENDCASE / / Case (кол-во)

кінецьЗавжди @ (/ * як * / mask_and_seq) починається

якщо (mask_and_seq [0])

Count = 0;

Else If (mask_and_seq [1])

Count = 1;

Else If (mask_and_seq [2])

Count = 2;

Else If (mask_and_seq [3])

Count = 3;

Else If (mask_and_seq [4])

кол-во = 4;

Else If (mask_and_seq [5])

Count = 5;

Else If (mask_and_seq [6])

кол-во = 6;

Else If (mask_and_seq [7])

кол-во = 7;

ще

Count = 0;

кінець / / Завжди @ (...Завжди @ (/ * як * / кол-небудь seq_r) починається

check_zero = seq_r;

випадок (кол-во)

0: check_zero = seq_r>> 1;

1: check_zero = seq_r>> 2;

2: check_zero = seq_r>> 3;

3: check_zero = seq_r>> 4;

4: check_zero = seq_r>> 5;

5: check_zero = seq_r>> 6;

6: check_zero = seq_r>> 7;

7: check_zero = seq_r>> 8;

ENDCASE

кінець

ENDMODULE / / seq_counter
 
Привіт!
У першому прийняти порівняти значення автобус з тими цінностями, з якої починається ур боротьбі, і це порівняння повинно бути зроблено, коли Ур автобусі від зміни значень.якщо автобус має значення яких дорівнюють по відношенню до цих цінностей, а потім почати ур лічильник.Все це можна зробити за допомогою процесу, заяви

PLZ Поправте мене, якщо я помиляюся

Спасибі і розглядає
Діпак

 

Welcome to EDABoard.com

Sponsor

Back
Top