Simple lưu lượng ánh sáng

T

tarang

Guest
hey guys u tôi hy vọng có thể giúp tôi ra ...tôi muốn thiết kế một giao thông đơn giản
ánh sáng điều khiển theo 4 tiểu bang thể hiện trong đoạn code dưới đây.của tôi
vấn đề chỉ là state_reg tín hiệu của tôi không thay đổi hình thức một
tiểu bang khác.điều này là bởi vì tôi truy cập bao gồm trong các
mã là một quá trình không hoạt động.màu xanh lá cây màu vàng để chờ đợi thời gian là 30 giây
và màu vàng thành màu đỏ là 5 giây.thời kỳ đồng hồ của tôi sẽ được 5 giây.do đó có thể
ai giúp tôi ra

-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ----
thư viện ieee;
ieee.std_logic_1164.all sử dụng;
ieee.std_logic_arith.all sử dụng;
IEEE.std_logic_unsigned.all sử dụng;

TLC thực thể là
port (
CLK, đặt lại, sa, sb: in std_logic;
Ga, Ya, Ra, Gb, Yb, Rb: out std_logic
);
TLC kết thúc;

kiến trúc hành vi của TLC là

Loại state_type là (a, b, c, d);
tín hiệu state_reg, state_next: state_type;
tín hiệu Pre_Q, Q: std_logic_vector (3 downto 0);
tín hiệu số, rõ ràng: std_logic;

bắt đầu

- Mô tả các hành vi truy cập
quá trình (CLK, đếm, rõ ràng)
bắt đầu
nếu (rõ ràng = '0 ') sau đó
Pre_Q <= Pre_Q - Pre_Q;
elsif (CLK = '1 'và clk'event) sau đó
if (count = '1 ') sau đó
Pre_Q <= Pre_Q 1;
nếu kết thúc;
nếu kết thúc;
Hỏi <= Pre_Q;
kết thúc quá trình;- Nhà nước đăng kýquá trình (CLK, đặt lại)
bắt đầu
if (reset = '0 ') sau đó
state_reg <= a;
elsif (clk'event và CLK = '1 ') sau đó
state_reg <= state_next;
nếu kết thúc;
kết thúc quá trình;

- Tiếp theo nhà nước logic

quá trình (state_reg, Q, sa, sb)
bắt đầu

trường hợp là state_reg
khi một =>
nếu (sa = '1 'và sb = '0') sau đó
state_next <= a;
elsif (sa = '0 'và sb = '1') sau đó
đếm <= '1 ';
if (Q = "0.110") sau đó
state_next <= b;
nếu kết thúc;
nếu kết thúc;

khi b =>

if (Q = "0.111") sau đó
state_next <= c;
đếm <= '0 ';
elsif (sa = '1 ') sau đó
state_next <= b;
nếu kết thúc;

khi c =>
nếu (sa = '0 'và sb = '1') sau đó
state_next <= c;
elsif (sa = '1 'và sb = '0') sau đó
rõ ràng <= '0 ';
đếm <= '1 ';
if (Q = "0.110") sau đó
state_next <= d;

nếu kết thúc;
nếu kết thúc;

khi d =>

if (Q = "0.111") sau đó
state_next <= a;
đếm <= '0 ';
elsif (sb = '1 ') sau đó
state_next <= d;
nếu kết thúc;
kết thúc vụ án;
kết thúc quá trình;

quá trình (state_reg)
bắt đầu
Ga <= '1 '; Ya <= '0'; Ra <= '0 ';
Gb <= '0 '; Yb <= '0'; Rb <= '1 ';

trường hợp là state_reg
khi một =>
khi b =>
Ga <= '0 ';
Ya <= '1 ';

khi c =>
Ya <= '0 ';
Ra <= '1 ';
Gb <= '1 ';

khi d =>
Gb <= '0 ';
Yb <= '1 ';

kết thúc vụ án;

kết thúc quá trình;

end Behavioral;Thêm vào sau khi 1 giờ 4 phút:tôi nghĩ rằng ở trên mã sẽ mất thời gian của bạn ... nên chỉ cho tôi biết làm thế nào tôi có thể thực hiện một lưu lượng truy cập trong mã đơn giản của tôi VHDL ánh sáng.nó có 4 tiểu bang.((Ga, Rb), (Ya, Rb), (Ra, Gb), (Ra, Yb))

Màu xanh lá cây vàng = 30 giây
Màu vàng thành màu đỏ = 5 giây

thanx

 
Bạn phải rõ ràng tính biến = 0 i đặt rõ ràng = 1 và Pre_Q = "0000" trong thiết lập lại = '0 '.
Bạn có chương trình là chỉ dưới đây:
thư viện ieee;
ieee.std_logic_1164.all sử dụng;
ieee.std_logic_arith.all sử dụng;
IEEE.std_logic_unsigned.all sử dụng;

TLC thực thể là
port (
CLK, đặt lại, sa, sb: in std_logic;
Ga, Ya, Ra, Gb, Yb, Rb: out std_logic
);
TLC kết thúc;

kiến trúc hành vi của TLC là

Loại state_type là (a, b, c, d);
tín hiệu state_reg, state_next: state_type;
tín hiệu Pre_Q, Q: std_logic_vector (3 downto 0);
tín hiệu số, rõ ràng: std_logic: = '0 ';

bắt đầu

- Mô tả các hành vi truy cập
quá trình (CLK, đếm, rõ ràng, đặt lại)
bắt đầu
if (reset = '0 ') sau đó
Pre_Q <= "0000";
Q <= "0000";
khác
nếu (rõ ràng = '0 ') sau đó
Pre_Q <= Pre_Q - Pre_Q;
elsif (CLK = '1 'và clk'event) sau đó
if (count = '1 ') sau đó
Pre_Q <= Pre_Q 1;
nếu kết thúc;
nếu kết thúc;
nếu kết thúc;
Hỏi <= Pre_Q;
kết thúc quá trình;- Nhà nước đăng ký

quá trình (CLK, đặt lại) bắt đầu
if (reset = '0 ') sau đó
state_reg <= a;
elsif (clk'event và CLK = '1 ') sau đó
state_reg <= state_next;
nếu kết thúc;
kết thúc quá trình;

- Tiếp theo nhà nước logic
state_reg quá trình (, Q, sa, sb, đặt lại) bắt đầu

if (reset = '0 ') sau đó
đếm <= '0 ';
rõ ràng <= '1 ';
nếu kết thúc;

trường hợp là state_reg
khi một =>
nếu (sa = '1 'và sb = '0') sau đó
state_next <= a;
đếm <= '0 ';
elsif (sa = '0 'và sb = '1') sau đó
đếm <= '1 ';
if (Q = "0.110") sau đó
state_next <= b;
nếu kết thúc;
nếu kết thúc;

khi b =>
if (Q = "0.111") sau đó
state_next <= c;
đếm <= '0 ';
elsif (sa = '1 ') sau đó
state_next <= b;
nếu kết thúc;

khi c =>
nếu (sa = '0 'và sb = '1') sau đó
state_next <= c;
elsif (sa = '1 'và sb = '0') sau đó
rõ ràng <= '0 ';
đếm <= '1 ';
if (Q = "0.110") sau đó
state_next <= d;
nếu kết thúc;
nếu kết thúc;

khi d =>
if (Q = "0.111") sau đó
state_next <= a;
đếm <= '0 ';
elsif (sb = '1 ') sau đó
state_next <= d;
nếu kết thúc;
kết thúc vụ án;
kết thúc quá trình;

quá trình (state_reg) bắt đầu

Ga <= '1 '; Ya <= '0'; Ra <= '0 ';
Gb <= '0 '; Yb <= '0'; Rb <= '1 ';

trường hợp là state_reg
khi một =>
khi b =>
Ga <= '0 ';
Ya <= '1 ';
khi c =>
Ya <= '0 ';
Ra <= '1 ';
Gb <= '1 ';

khi d =>
Gb <= '0 ';
Yb <= '1 ';

kết thúc vụ án;
kết thúc quá trình;

end Behavioral;

Hãy nhớ rằng bạn phải rõ ràng và thiết lập tín hiệu được sử dụng trong quá trình thích hợp.

Piopix

 
tại sao bạn đặt "số" trong danh sách truy cập nhạy cảm của các ... không nó chỉ có chức năng khi cạnh đồng hồ là tăng cao (không cần thiết trong danh sách, vì nó đã chờ cạnh đồng hồ anyway) ...

mà là khác "" của các "if (count = '1')"...

và như đã nêu ở trên, chắc chắn rằng bạn khởi tạo tất cả các tín hiệu ...

 
Hey thanx cho các giải pháp ... bây giờ nó hoạt động ... cool!!

 
Hey, nó được một lúc kể từ khi bạn đã thực hiện dự án này, nhưng hy vọng bạn vẫn còn nhớ những chi tiết ...
Những loại hội đồng, quý vị đã sử dụng để thực hiện các loại đèn giao thông và những gì của phần mềm?
Tôi hiện đang làm việc trên cùng một phòng thí nghiệm và cần có sự giúp đỡ.Tôi có Spartan 3 XSA-3s1000 bảng và sử dụng Xilinx ISE Webpack 10,1 ...
Cảm ơn
Ganna

 

Welcome to EDABoard.com

Sponsor

Back
Top