ทำไฟวิ่ง 8 ดวงออกทาง LED ของ Mojo V3 Board
วัตถุประสงค์
เพื่อศึกษาการใช้งาน ISE webpack 14.7
เพื่อศึกษาการใช้งาน บอร์ด MOJO V3
ระบบ
รูปที่ 1 ระบบวงจรไฟวิ่ง
การทำงาน
reset
0
1
การทำงาน
yout = "00000001"
ไฟวิ่งจากขวามือไปซ้ายมือ ( MSB <- LSB )
การทดสอบบนบอร์ด MOJO V3
เนื่องจากความถีของสัญญาณนาฬิกาเป็น 50 MHz ถ้านำมาใช้กับวงจรนี้ จะไปเห็นลักษณะการิ่งเลย ดังนั้น ต้องมีการหารความถี่ให้เหลือน้อยลง ดังนั้นระบบตามรูปที่ 1 ต้องเพิ่มวงจรหารความถี่เข้าไปด้วย
รูปที่ 2 ระบบบนบอร์ด MOJO V3 ที่มีวงจรหารความถึ่
โปรแกรม moving led 1
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity moving_led_1 is
port (reset, clk: in std_logic;
yout : out std_logic_vector(7 downto 0));
end moving_led_1;
architecture beh of moving_led_1 is
signal q : std_logic_vector(7 downto 0);
signal sq : std_logic;
component DIVIDER is
port (CLK : in std_logic;
Q : out std_logic);
end component;
begin
PROCESS (clk,reset)
BEGIN
IF(reset = '0') THEN
q <= "00000001";
ELSE
IF(sq'EVENT and sq = '1') THEN
q(0) <= q(7);
q(7 downto 1)<=q(6 downto 0);
ELSE
q <= q;
END IF;
END IF;
END PROCESS;
yout <= q;
c1: DIVIDER port map(CLK, sq);
end beh;
โปรแกรม Divider
library IEEE;
use IEEE.std_logic_1164.all;
entity DIVIDER is
generic (fin: integer := 50000000;
fout: integer := 4);
port (CLK: in std_logic;
Q : out std_logic );
end DIVIDER;
architecture RTL of DIVIDER is
signal COUNT : integer range 0 to (fin/(2*fout)) ;
signal qs : std_logic := '0';
begin
process (CLK)
begin
if CLK'event and CLK = '1' then
if (COUNT >= (fin/(2*fout)-1)) then
COUNT <= 0;
qs <= not(qs);
else
COUNT <= COUNT +1;
end if;
end if;
end process;
Q <= qs ;
end RTL;
ไฟล์ moving_led_1.ucf
NET "clk" TNM_NET = clk;
TIMESPEC TS_clk = PERIOD "clk" 50 MHz HIGH 50%;
NET "CLK" LOC = P56 | IOSTANDARD = LVTTL;
NET "yout<0>" LOC = P134 | IOSTANDARD = LVTTL;
NET "yout<1>" LOC = P133 | IOSTANDARD = LVTTL;
NET "yout<2>" LOC = P132 | IOSTANDARD = LVTTL;
NET "yout<3>" LOC = P131 | IOSTANDARD = LVTTL;
NET "yout<4>" LOC = P127 | IOSTANDARD = LVTTL;
NET "yout<5>" LOC = P126 | IOSTANDARD = LVTTL;
NET "yout<6>" LOC = P124 | IOSTANDARD = LVTTL;
NET "yout<7>" LOC = P123 | IOSTANDARD = LVTTL;
NET "reset" LOC = P38 | IOSTANDARD = LVTTL;
#PACE: Start of PACE Area Constraints
#PACE: Start of PACE Prohibit Constraints
#PACE: End of Constraints generated by PACE
เอกสารรายละเอียดอยู่ที่ lab_1_ise14_7_59.pdf
2. ไฟวิ่ง 8 ดวง แบบมีสัญญาณควบคุม
ระบบ
รูปที่ 2 แสดงผลการจำลองการทำงาน
รูปที่ 3 ระบบไฟวิ่งแบบมีสัญญาณควบคุมการวิ่งและทิศทางการวิ่ง
การทำงาน
หมายเหตุ x = don't care
โปรแกรม
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity no6 is
port (sh, lr, reset, clk: in std_logic;
yout : out std_logic_vector(7 downto 0));
end no6;
architecture beh of no6 is
signal q : std_logic_vector(7 downto 0);
begin
PROCESS (clk,reset)
BEGIN
IF(reset = '0') THEN
q <= "00000001";
ELSE
IF(CLK'EVENT and CLK = '1') THEN
IF sh = '1' THEN
IF lr = '0' THEN
q(7) <= q(0);
q(6 downto 0)<=q(7 downto 1);
ELSE
q(0) <= q(7);
q(7 downto 1)<=q(6 downto 0);
END IF;
ELSE
q <= q;
END IF;
ELSE
q <= q;
END IF;
END IF;
END PROCESS;
yout <= q;
end beh;
ทดสอบการทำงานด้วย Model sim