fpga/cpld为核心的数字系统一. 课程内容:设计并制作一个以fpga/cpld为核心的数字系统,培养综合应用各种知识设计电子系统的能力。二. 基础知识:protel 数字电路 、EDA与VHDL语言。三. 设计内容:一个简单的秒计数器以绘制PCB板图,腐蚀覆铜板制作电路板焊接元件并调试电路,最后对CPLD编程下载实现秒计数器功能。1)在机房讲解理论并用protel软件完成实验原理图及PCB板图的设计;2)在实验室腐蚀电路板并焊接调试;3)在机房编程下载实现秒计数器功能。四. 设计要求:通过按键控制计数和停止;用一个led表示计数和停止状态。下载电路和核心部分各作一块15×10CM的覆铜板。核心板线宽20mil,间距10mil。过引脚的地方线宽可以为10mil。使用热转移纸。下载线电路线宽30mil 间距30mil。使用普通打印纸。布线不通可以拉飞线。五. 秒计数器的器件:epm7128slc84一片,核心芯片;usb b型弯针接口一,从电脑取电;共阳一位数码管1,显示秒计数;led1,显示计数和停止状态;按键开关1,开关计数状态;10针接口2,连接核心板和下载电路;74hc244一个,驱动下载电路并口弯针公头1,连接电脑和下载电路。六. 实验部分代码及原理图:1)实验部分代码如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;
entity lled isport(clk:in std_logic;st:in std_logic;stout :out std_logic;dout:out std_logic_vector(6 downto 0) );end lled;
architecture hav of lled issignal q:std_logic_vector(6 downto 0);signal d:std_logic_vector(3 downto 0);signal streg:std_logic;beginstout<= not streg;process(st)beginif st'event and st='1' then streg<= not streg;end if; end process;process(clk)beginif clk'event and clk='1' thenif streg='1' then if d="1001" then d<="0000";else d<=d+1;end if; end if; end if; end process;lwfree.cn", "1111001" when "0001", "0100100" when "0010", "0110000" when "0011", "0011001" when "0100", "0010010" when "0101", "0000010" when "0110", "1111000" when "0111", "0000000" when "1000", "0010000" when others;dout<=q;end hav; 2)实验核心板原理图: 3)下载电路原理图: 七.心德与体会:通过这次实验,我初步了解了一般FPGA的设计,重新温故了电路图的绘制以及焊接等电路板的设计过程,为以后的毕业设计打下基础,更深地学习有关的知识188
制作一个以fpga/cpld为核心的数字系统library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;
entity lled isport(clk:in std_logic;st:in std_logic;stout :out std_logic; dout:out std_logic_vector(6 downto 0) );end lled;
architecture hav of lled issignal q:std_logic_vector(6 downto 0);signal d:std_logic_vector(3 downto 0);signal streg:std_logic;beginstout<= not streg;process(st)beginif st'event and st='1' thenstreg<= not streg;end if;end process;process(clk)beginif clk'event and clk='1' thenif streg='1' then if d="1001" then d<="0000"; else d<=d+1;lwfree.cn
end if;end if;end if;end process;with d selectq<="1000000" when "0000", "1111001" when "0001", "0100100" when "0010", "0110000" when "0011", "0011001" when "0100", "0010010" when "0101", "0000010" when "0110", "1111000" when "0111", "0000000" when "1000", "0010000" when others;dout<=q;end hav;