потрібна допомога з вихідним кодом у verilog!

T

theros

Guest
Модуль car_window (CLK, CLR, data_up, data_down, move_up, move_down, auto_move_up, auto_move_down, stop_move);
/ / IO порти
введення CLK, CLR, data_up, data_down, stop_move;
виводу move_up, move_down, auto_move_up, auto_move_down;

дріт CLK, CLR, data_up, data_down, stop_move;
рег [7:0] обвинувачення;
рег move_up, move_down, auto_move_up, auto_move_down, перерва;початковий
починати
брейк = 1'b0;
нараховує = 8'b0;
move_up = 1'b0;
move_down = 1'b0;
auto_move_up = 1'b0;
auto_move_down = 1'b0;

кінець

завжди @ (posedge data_up або posedge data_down)
починати
брейк = 1'b1;
кінець
завжди @ (posedge CLK)
починати
якщо (data_up == 1'b0 | data_down == 1'b0)
початку / / 5
нараховує = 1'b0;
move_up = 1'b0;
move_down = 1'b0;
кінець / / 5
кінець

завжди @ (posedge CLK)
починати
якщо (stop_move == 1'b1 | перерва == 1'b1)
починати
якщо (move_up == 1'b1) move_up = 1'b0;
якщо (move_down == 1'b1) move_down = 1'b0;
якщо (auto_move_up == 1'b1) auto_move_up = 1'b0;
якщо (auto_move_down == 1'b1) auto_move_down = 1'b0;
якщо (перерва == 1'b1) брейк = 1'b0;
кінець
кінець

завжди @ (posedge CLK)
початку / / 1
якщо (data_up == 1'b1)
початку / / 3
нараховує = розраховує 8'b01;
якщо (нараховує === 8'b111) auto_move_up = 1'b1;
якщо (move_up == 1'b0) move_up = 1'b1;
кінець / / 3
остальное, якщо (data_down == 1'b1)
початку / / 4
нараховує = розраховує 8'b01;
якщо (нараховує === 8'b111) auto_move_down = 1'b1;
якщо (move_down == 1'b0) move_down = 1'b1;
кінець / / 4
кінець / / 1
endmoduleЧат нового в HDL-verilog! Может кто-то помочь!Я моделювати з modelsim і все ОК!, Але коли я намагаюся синтезувати з Леонардо я отримую наступну помилку"C: / VERILOG / Приклади / Car_windows.v", рядок 24: Помилка більше одного неопробованние краю показу; не може зробити висновок про годинах для цього завжди заявуПомилка (и)була знайдена в Verilog джерело ".

<img src="http://www.edaboard.com/images/smiles/icon_sad.gif" alt="Сумний" border="0" />
 
Я не впевнений, початкове заяву synthesizable.

 
Ви маєте рацію, reguser_2.Початкове заява не synthesizable.Крім того,
цей код використовується тільки для імітації.Там
уже багато неправильних речей.Theros, ви повинні вивчити, як код буде synthesizable.Я прочитав у друкованій книзі говориться, що тільки synthesizable заяву.Я не
пам'ятаю її назва ...

 
У вас є дві заяви posedge завжди у вашому блоці.Єдиний момент це може статися, якщо одне з цих заяв є скидання.Леонардо подивився на свій код, і зрозумів, що ні один сигнал був скинутий, і тому блок позначений як незаконні.Існує немає структури в FPGA, що може викликати два краю.Згадайте основні будівельні блоки в FPGA ... Логіка ворота і фліп flops.Flops є тільки один вхід та години скидання.
strut911

 
theros,

Я не думаю, синтезатора дозволить призначити два сигналу на виході порту.

завжди @ (posedge CLK)
починати
якщо (data_up == 1'b0 | data_down == 1'b0)
початку / / 5
нараховує = 1'b0;
move_up = 1'b0;
move_down = 1'b0; <- призначити для виведення move_down
кінець / / 5
кінець

завжди @ (posedge CLK)
починати
якщо (stop_move == 1'b1 | перерва == 1'b1)
починати
якщо (move_up == 1'b1) move_up = 1'b0;
якщо (move_down == 1'b1) move_down = 1'b0; <- призначити для виведення move_down знову
якщо (auto_move_up == 1'b1) auto_move_up = 1'b0;
якщо (auto_move_down == 1'b1) auto_move_down = 1'b0;
якщо (перерва == 1'b1) брейк = 1'b0;
кінець
кінець

Я думаю, що це фіолетовий правил, причину ви за кермом виході з двох вхідних напряму.По-друге, я пропоную вам поставити кожну річ в один блок, який на чутливість списку залежить від posedge CLK, це вам вирішувати проблеми, або ви можете використовувати FSM у вашому дизайні.

 

Welcome to EDABoard.com

Sponsor

Back
Top