FPGA实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

FPGA实验报告
Xilinx FPGA及应⽤
实验报告(⼀)
实验⼀全加器
⼀、实验⽬的
1、编写简单门电路的RTL级描述程序;
2、创建简单电路的结构级VHDL描述程序;
3、实现全加器功能,由半加器组成,以元件⽅式调⽤。

⼆、实验环境
1、ISE软件⼀套;
2、PC机⼀台。

三、实验步骤
1、创建⼀个新的⼯程
(1)选择“开始->所有程序->Xilinx ISE 9.1i”或直接在桌⾯双击Xilinx ISE 9.1i的图标,打开ISE 9.1i集成环境。

(2)在ISE中,选择菜单栏中的File->New Project 打开创建新⼯程界⾯,在Project Name 中填⼊⼯程名,在Project Location中填⼊⼯程所在⽂件夹。

2、编写半加器的RTL级描述和全加器的结构级描述
半加器源程序为:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity half is
Port ( a : in STD_LOGIC;
b : in STD_LOGIC;
s : out STD_LOGIC;
co : out STD_LOGIC);
end half;
architecture Behavioral of half is
signal c,d : STD_LOGIC;
begin
c <= a or b;
d <= a nand b;
s <= c and d;
co <= not d;
end Behavioral;
波形仿真结果为:
全加器源程序为:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity full is
Port ( a : in STD_LOGIC;
b : in STD_LOGIC;
cin : in STD_LOGIC;
s : out STD_LOGIC;
co : out STD_LOGIC);
end full;
architecture Behavioral of full is component half
PORT (a, b: IN std_LOGIC;
s,co: OUT std_LOGIC);
end component;
signal u0_co,u0_s,u1_co:std_logic;
begin
u0:half port map(a,b,u0_s,u0_co);
u1:half port map(u0_s,cin,s,u1_co);
co<=u0_co or u1_co;
end Behavioral;
波形仿真结果为:
\ 实验⼆12进制计数器
⼀、实验⽬的
1、熟悉Xilinx的ISE软件的使⽤和设计流程;
2、初步了解VHDL的编程⽅法;
3、使⽤VHDL语⾔创建、仿真并验证12进制计数器。

⼆、实验环境
1、ISE软件⼀套;
2、PC机⼀台。

三、实验原理
1.实验源程序:
entity MY_CNTR is
generic(CNT_WIDTH : INTEGER := 4;
M : INTEGER := 12);
Port ( D_IN : in STD_LOGIC_VECTOR (CNT_WIDTH-1 downto 0);
Q_OUT : out STD_LOGIC_VECTOR (CNT_WIDTH-1 downto 0);
CE : in STD_LOGIC;
LOAD : in STD_LOGIC;
UpDn : in STD_LOGIC;
CLK : in STD_LOGIC;
RST : in STD_LOGIC);
end MY_CNTR;
architecture Behavioral of MY_CNTR is
signal INT_CNT : STD_LOGIC_VECTOR (CNT_WIDTH-1 downto 0);
begin
process(CLK,RST)
begin
if RST='0' then
INT_CNT<=(others=>'0');--该⽅式赋值可以不⽤关注实际位宽elsif rising_edge(CLK)then if CE='1' then
if LOAD='1' then
INT_CNT <= D_IN;
else
if UPDN = '1' then
if INT_CNT < M - 1 then
INT_CNT <= INT_CNT + 1;
else
INT_CNT<=(others=>'0');
end if;
else
if INT_CNT = 0 then
INT_CNT <= Conv_Std_Logic_V ector(M,CNT_WIDTH) - 1;
else
INT_CNT <= INT_CNT - 1;
end if;
end if;
end if;
end if;
end if;
end process;
Q_OUT <= INT_CNT;
end Behavioral;
2.波形仿真结果
验证赋值(LOAD)、复位(RST)、保持(CE)功能。

验证加减计数功能。

实验三分频器
⼀、实验⽬的
1、熟悉ISE的操作和仿真技巧;
2、学习使⽤Xilinx Pace进⾏引脚分配和约束;
3、制作⼀个分频器,将50Mhz的输⼊时钟分频为1Mhz、1Khz和1Hz实现该设计并在Spartan-3E开发板上⽤LED显⽰分频后的结果。

⼆、实验环境
1、ISE软件⼀套;
2、Spartan-3E开发板⼀套;
3、PC机⼀台。

三、设计思路
分频器的顶层模块如图,输⼊为50Mhz时钟,输出为对应的10Mhz,1Mhz,1khz和1hz。

四、基础模块设计
1)5分频
源代码为:
entity clkdiv5 is
Port ( clkin : in STD_LOGIC;
clkout : out STD_LOGIC);
end clkdiv5;
architecture Behavioral of clkdiv5 is
signal CNT1,CNT2 : INTEGER range 0 to 4;
signal clk1,clk2 : STD_LOGIC;
begin
process(clkin)--对上升沿
begin
if rising_edge (clkin) then
if(CNT1 < 4) then
CNT1 <= CNT1 + 1; else
CNT1 <= 0;
end if;
if(CNT1 < 2) then
clk1 <= '1';
else
clk1 <= '0';
end if;
end if;
end process;
process(clkin)--对下降沿begin
if falling_edge (clkin) then if(CNT2 < 4) then
CNT2 <= CNT2 + 1; else
CNT2 <= 0;
end if;
if(CNT2 < 2 ) then
clk2 <= '1';
else
clk2 <= '0';
end if;
end if;
end process;
clkout <= clk1 or clk2; end Behavioral;
仿真波形为下:
2)10分频
entity clkdiv10 is
Port ( clkin : in STD_LOGIC;
clkout : out STD_LOGIC);
end clkdiv10;
architecture Behavioral of clkdiv10 is signal CNT : INTEGER range 0 to 10; signal clk : STD_LOGIC;
begin
process(clkin)
begin
if rising_edge (clkin) then
if(CNT < 9) then
CNT <= CNT + 1;
else
CNT <= 0;
end if;
if(CNT < 5) then
clk <= '1';
else
clk <= '0';
end if;
end if;
end process;
clkout <= clk;
end Behavioral;
仿真波形如下:
3)千分频
entity clkdiv1k is
Port ( cin : in STD_LOGIC;
cout : out STD_LOGIC); end clkdiv1k;
architecture Behavioral of clkdiv1k is component clkdiv10 Port(clkin : in STD_LOGIC;
clkout : out STD_LOGIC); end component;
signal sig1,sig2 : STD_LOGIC; Begin
U0:clkdiv10 port map (cin,sig1);-
U1:clkdiv10 port map (sig1,sig2);
U2:clkdiv10 port map (sig2,cout); end Behavioral;
波形仿真结果为:
五、顶层模块设计
源程序为:
entity clkdivtop is
Port ( clk50m : in STD_LOGIC;
clk1 : out STD_LOGIC;
clk1k : out STD_LOGIC;
clk1m : out STD_LOGIC;
clk10m : out STD_LOGIC);
end clkdivtop;
architecture Behavioral of clkdivtop is
component clkdiv5
Port(clkin : in STD_LOGIC;
clkout : out STD_LOGIC);
end component;
component clkdiv10
Port(clkin : in STD_LOGIC;
clkout : out STD_LOGIC);
end component;
component clkdiv1k
Port(cin : in STD_LOGIC;
cout : out STD_LOGIC);
end component;
signal sig1,sig2,sig3 : STD_LOGIC;
begin
U0:clkdiv5 port map (clk50m,sig1);
U1:clkdiv10 port map (sig1,sig2);
U2:clkdiv1k port map (sig2,sig3);
U3:clkdiv1k port map (sig3,clk1);
clk10m <= sig1;
clk1m <= sig2;
clk1k <= sig3;
end Behavioral;
六、位置约束、下载与配置
位置约束结果见下图,输⼊端为50MHz全局时钟,4个输出端则连接到LED显⽰。

最终,在实验版上有4个LED 灯显⽰,其中1Hz 输出的灯有闪烁现象,其他的灯由于闪烁频率过快,⼈眼⽆法分辨。

相关文档
最新文档