FGPA串口通信作业_第1页
FGPA串口通信作业_第2页
FGPA串口通信作业_第3页
FGPA串口通信作业_第4页
FGPA串口通信作业_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、河北科技大学硕士学位研究生20152016学年第二学期FPGA器件原理及应用结课论文学 院:信息科学与工程学院专 业:测试计量技术及仪器姓 名:赵久强学 号:2201514006FPGA实验 基于FPGA的串口通信实验1、 实验目的1. 熟悉quartus的VHDL文本设计流程全过程,学习电路的设计、多层次电路设计、仿真和硬件测试。2. 学习IP核生成的过程,以及testbench文件的编写。3. 了解FPGA内部丰富的存储单元,对fifo核有一个深刻理解。 4. 熟悉基于FPGA的串口通信的相关知识,实现串口通信的仿真验证。2、 实验内容串行接口的应用非常广泛,为了实现串口通信功能一般使用专

2、用串行接口芯片。对一个设备的处理器来说,要接收和发送串行通信的数据,需要一个器件将串行的数据转换成并行的数据以便于处理器进行处理,这种器件就是UART通用异步收发器。用VHDL语言设计逻辑电路,将各个模块的电路封装成器件,在顶层设计中通过连线,完成整个系统的设计。串行通信即串行数据传输,实现FPGA与PC的串行通信。在实际中,特别是在FPGA的调试中有着很重要的应用。调试过程一般是先进行软件编程仿真,然后将程序下载到芯片中验证设计的正确性,目前还没有更好的工具可以在下载后实时地对FPGA的工作情况和数据进行分析。通过串行通信,可以向FPGA发控制命令让其执行相应的操作,同时把需要的数据通过串口

3、发到PC上进行相应的数据处理和分析,以此来判断FPGA是否按设计要求工作。这样给FPGA的调试带来了很大方便,在不需要DSP等其他额外的硬件条件下,只通过串口就可以完成对FPGA的调试。本文是基于FPGA的串口通信实验,设计实现了与PC的串行通信的仿真。调用了一个FIFO核。总体框图如图1所示。图1 总体框图3、 实验步骤(1)首先我们建立一个FIFO核,然后在调试主程序中调用这个我们建立的这个核,从而进行串口通信的仿真。打开quartus 12.0软件,如图2所示。图2 软件示意图(2)打开tools,找到MegaWizard Plug-In Manager,如图3所示图3 软件示意图(3)

4、接下来,我们可以看到如下界面,看到IP核的设置界面。我们选择第一项建立一个新核。图4 软件示意图(4)接下来有如下界面,我们在左边的搜索框的里面搜索FIFO,然后出现了fifo,我们双击它,然后我们这里选择VHDL,然后在编辑fifo核的名字,例如rx_tx_buffer.如图5所示 图5 软件示意图(5)然后弹出如下界面,在这里我们选择Cyclone III,8位和256字,在下面选择读时钟和写时钟分开。图6 软件示意图(6)我们按照要求选择第一个,一个时钟沿触发。图7 软件示意图(7)按照我们的要求,在下面的设置界面勾选我们的所需要的控制信号,读空写满信号。如下图8所示图8 软件示意图(8

5、)接下来我们选择fifo的模式,按照下面的设置。图9 软件示意图(10)最后按照我们需要,选择生成的文件。如下图10所示。图10 软件示意图(11)我们的fifo核已经创建完成,接下来我们要在quartus12.0创建工程.第一步打开quartus。图11 软件示意图(12)接下来我们创建工程,将串口程序加入,创建一个工程,如图11,12所示。图12 软件示意图图13 软件示意图(13)我们将tb文件和主程序文件添加进去。图14 软件示意图(14)我们选择芯片型号,设置语言VHDL还有仿真设置。如图所示。图15 软件示意图(15)接下来我们创建好的工程添加fifo核。如图所示图16 软件示意图

6、(16)最后我们进行仿真,观察实验结果。图17 软件示意图(17)仿真如图所示。图18 软件示意图四、实验结论本实验主要利用quartus12.0生成fifo核。然后经过quartus创建工程,编写串口程序,调用fifo核,实现串口通信的功能,通过编写tb文件,实验所要达到的结果。五、附录testbench文件:LIBRARY ieee;USE ieee.std_logic_1164.ALL;use ieee.std_logic_arith.all;use ieee.std_logic_signed.all; - Uncomment the following library declarat

7、ion if using- arithmetic functions with Signed or Unsigned values-USE ieee.numeric_std.ALL; ENTITY tb_UART_An ISEND tb_UART_An; ARCHITECTURE behavior OF tb_UART_An IS - Component Declaration for the Unit Under Test (UUT) COMPONENT UART_An PORT( reset : IN std_logic; mclk : IN std_logic; mode : IN st

8、d_logic_vector(1 downto 0); serial_in : IN std_logic; serial_out : OUT std_logic; fcw : IN std_logic_vector(31 downto 0); send_clk : IN std_logic; send_requst : IN std_logic; send_data : IN std_logic_vector(7 downto 0); tx_fifo_full : OUT std_logic; rd_clk : IN std_logic; rd_data : OUT std_logic_vec

9、tor(7 downto 0); rd_requst : IN std_logic; rd_fifo_empty : OUT std_logic ); END COMPONENT; -Inputs signal reset : std_logic := '0' signal mclk : std_logic := '0' signal mode : std_logic_vector(1 downto 0) := (others => '0'); signal serial_in : std_logic := '0' sign

10、al fcw : std_logic_vector(31 downto 0) := (others => '0'); signal send_clk : std_logic := '0' signal send_requst : std_logic := '0' signal send_data : std_logic_vector(7 downto 0) := (others => '0'); signal rd_clk : std_logic := '0' signal rd_requst : st

11、d_logic := '0' -Outputs signal serial_out : std_logic; signal tx_fifo_full : std_logic; signal rd_data : std_logic_vector(7 downto 0); signal rd_fifo_empty : std_logic; signal cnt :integer; - Clock period definitions constant mclk_period : time := 10 ns; constant send_clk_period : time := 50

12、 ns; constant rd_clk_period : time := 50 ns; BEGIN - Instantiate the Unit Under Test (UUT) uut: UART_An PORT MAP ( reset => reset, mclk => mclk, mode => mode, serial_in => serial_in, serial_out => serial_out, fcw => fcw, send_clk => send_clk, send_requst => send_requst, send_

13、data => send_data, tx_fifo_full => tx_fifo_full, rd_clk => rd_clk, rd_data => rd_data, rd_requst => rd_requst, rd_fifo_empty => rd_fifo_empty ); - Clock process definitions mclk_process :process beginmclk <= '0'wait for mclk_period/2;mclk <= '1'wait for mclk_p

14、eriod/2; end process; send_clk_process :process beginsend_clk <= '0'wait for send_clk_period/2;send_clk <= '1'wait for send_clk_period/2; end process; rd_clk_process :process beginrd_clk <= '0'wait for rd_clk_period/2;rd_clk <= '1'wait for rd_clk_period/2;

15、 end process; SYS_RST_P: processbegin - hold reset state for 100 ns. reset <= '1' wait for 100 ns; reset <= '0' wait;end process;-自环模式serial_in <= serial_out;-设定波特率fcw <= X"1FFFFFFF" -conv_std_logic_vector(100000, 32);rd_requst <= '1'- Stimulus proces

16、sstim_proc: process(send_clk)begin -MAC0 stimulusif reset = '1' then mode <= "10"cnt <= 0;elsif send_clk'event and send_clk = '1' then cnt <= cnt + 1;case cnt is when 140 =>-打入配置端口命令send_requst <= '1'send_data <= conv_std_logic_vector(cnt,8);wh

17、en 141 => send_requst <= '1'send_data <= conv_std_logic_vector(cnt,8);when 142 => send_requst <= '1'send_data <= conv_std_logic_vector(cnt,8); when 143 => send_requst <= '1'send_data <= conv_std_logic_vector(cnt,8);when 144 => send_requst <= '1'send_data <= conv_std_logic_vector(cnt,8); when 145 => send_requst <= '1'send_data <= conv_std_logic_vector(cnt,8); when 146 => send_requst <= '1'send_data <= conv_std_logic_vector(cnt,8);when 147 => send_requst

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论