Altera DE2-70学习笔记5-LCD显示实验

来源:互联网 发布:python ctype 编辑:程序博客网 时间:2024/05/29 17:19

开发环境:Quartus II 9.1 & Nios II 9.1

说明:主要参考实验指导书,添加了实验过程遇到的问题和解决方法。

1. 建立Quartus 工程

   使用工程向导New Project Wizard 建立一个新工程,工程名和顶层实体名都为:HelloWorld 。设置输出文件保存路径为./release

 

2. 建立SOPC 系统

   (1) 点击Quartus 工具栏上的图标或者点击File->New->SOPC Build System 来新建一个SOPC系统。

   将会看到一个clk_0 的实体,可以修改它的名字,这里用名称的是clk

 

   (2) 添加On-Chip Memory

   在搜索栏中天输入On-chip Memory,可以筛选出该项,也可以直接在Memories and Meroy Controllers中选择出来

   双击On-Chip Memory(RAMor ROM)即可添加。将会出现如下页面,修改其中的内存大小(30KB)和文件名称,并点击Finish完成。

 

   (3) 添加Nios Processor

   同样的搜索方法找到NiosProcessor,双击出现如下界面,选择economy表示最小核心,下面的Reset VectorException Vector都选择onchip_mem(设置的片上RAM名称)。其他保持默认,点击Finish 完成。


   (4) 添加JTAG Uart

   如下图,保持默认设置,点击Finish


   (5) 添加LCD

   如下图,保持默认设置,点击Finish


    (6) 完成SOPC设计,生成软核处理器系统,点击Generater完成。


    生成完成以后,出现以下字样: 表示成功,然后就可以退出SOPC设计了。

3. verilog 编写顶层实体

  新建一个verilog文件,代码保存为HelloWorld.v(与顶层实体名称一致)

  (1)输入以下代码:

moduleHelloWorld(
                            iCLK_50,
                            iKEY,
                            oLCD_ON,
                            oLCD_BLON,
                            oLCD_RW,
                            oLCD_EN,
                             oLCD_RS,
                            LCD_D
                             );
    input                iCLK_50;
    input[0:0]           iKEY;
    inout[7:0]           LCD_D;
   
    output               oLCD_ON;
    output               oLCD_BLON;
    output               oLCD_RW;
    output               oLCD_EN;
    output               oLCD_RS;
               
    assign               oLCD_ON = 1'b1;
    assign               oLCD_BLON = 1'b1;


    // SOPC System Instance
    HelloWorld_System Sys(
                           .clk(iCLK_50),
                           .reset_n(iKEY[0]),
                          .LCD_E_from_the_lcd(oLCD_EN),
                          .LCD_RS_from_the_lcd(oLCD_RS),
                          .LCD_RW_from_the_lcd(oLCD_RW),
                          .LCD_data_to_and_from_the_lcd(LCD_D)
                       );
endmodule

   (2)分析与综合,点击Processing->Start->StartAnalysis & Synthesis,出现了warning可以暂时不理会

   (3)引脚分配

   导入DE2-70自带的引脚定义,可以帮助引脚分配(Assignments->Import Assignments),也可以根据原理图自行分配

 

 

  然后点击Assignments->Pins

  可以观察引脚分配情况,在All Pins list中可以删除没有使用到得引脚。


  (4)设置没有使用的引脚属性<特别重要>

  特别需要注意的是,要养成好的习惯,没有使用的引脚把它们都设置成三态输入。

  点击Assignments->Device->Deviceand Pin options->unused pin->Reserve all unuseed pin(All inputtri-stated)

 

   如果不这样设置,在本实验中,通过Nios下载程序的时候会失败,因为时钟引脚被默认接入地拉低了,详细可以参看编译日志。

   Nios错误如下:

      Using cable"USB-Blaster [USB-0]", device 1, instance 0x00
      Pausing target processor: not responding.
      Resetting and trying again: FAILED
      Leaving target processor paused

4.编译

     点击Processing->StartCompilation

5.下载

     点击Tools->Programmer

6.Nios 软件设计

     (1)新建一个Nios工程,可以选择固定的workplace,也可以将workplace设置在HelloWorld的子目录下。

     点击File->New->NiosApplication and BSP from Template,在SOPC Informationfile name 一项中添加HelloWorld目录下的HelloWorld_System.sopcinfo文件,模板选择HelloWorld。工程名称随意,然后 点击Finish生成应用程序和BSP

 

   生成工程完成以后,需要修改lcd为字符I/O设备。在工程hello_world_0上点击右键->Nios II->BSP Editor->Common,将其中的JTAG改为LCD设备,其中的enable_reduced_device_drivers不能勾选上,否则没有lcd输出:

 

   去掉Setting中的enable clean exitenable c plus plus,不需要退出程序也没有C++代码和库的支持。


   配置完成以后,点击Generate重新生成BSP

   (2)点击Project->BuildAll,将会出现如下错误,由于程序是下载到片内RAM中的,所以生成的程序过大,超过了30KB,所以需要优化编译,缩小程序体积。


    hello_world_0hello_world_0_bsp工程上右键点击->Properties->NiosII application Properties,修改优化等级为size

   

    重新编译后问题解决。

   (3) 运行Nios

   hello_world_0上右键点击->Run as->Nios II Hardware

   将会弹出如下界面,如果在界面上显示状态为错误,提示没有找到设备,可能是断开了连接,重新通过Quartus下载.sof文件,然后再点击如下的Refresh Connection就会重新发现设备,接着点击Apply后直接RunOK了。

   程序下载完成后,console中提示:


   实际效果如下:


5. 添加定时器

   可以在SOPC中继续添加定时器timer,然后重复上述步骤。

   然后再Nios中,右键点击hello_world_0->Nios II->BSP Editor->Common,在sys_clk_timer中选择timer作为系统时钟。

   重新下载程序,将会在开发板上看到滚动的"Hellofrom Nios"

原创粉丝点击