基于EP4CE10利用SOPC技术使用按键控制LED

1.建立Quartus工程

2.建立顶层文件

3.打开Qsys

  1. 双击clk_0
    在这里插入图片描述

  2. 设置系统时钟(外部时钟为50M,这里利用PLL进行倍频)
    https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdmF0YXIuY3Nkbi5uZXQvNy83L0IvMV9yYWxmX2h4MTYzY29tLmpwZw#pic_center

  3. 搜索nios的ip
    在这里插入图片描述

  4. 添加Nios_II的ip(双击)
    在这里插入图片描述

  5. 设置版本(EP4CE10可以用Fast,资源够用)在这里插入图片描述

  6. 点击完成即成功添加了Nios_II

  7. 添加内存(搜索SDRAM),双击添加在这里插入图片描述

  8. 进入设置页面,设置SDRAM为16位位宽,列为9
    在这里插入图片描述

  9. .添加串口UART
    在这里插入图片描述

  10. 配置串口
    在这里插入图片描述

  11. 添加外设(PIO)并配置
    在这里插入图片描述

  12. 连接总线,设置中断优先级
    在这里插入图片描述

  13. 设置复位向量
    在这里插入图片描述

  14. 配置地址基地址
    在这里插入图片描述

  15. 处理错误和警告(导出端口)
    在这里插入图片描述

  16. 复制模块
    在这里插入图片描述

  17. 产生HDL文件在这里插入图片描述

4. 列化模块

module CoreCourse_GHRD(
   input  wire        clk50m,        //    clk.clk
   input  wire        reset_n, 		 //  reset.reset_n
   output wire [11:0] sdram_addr,    //  sdram.addr
   output wire [1:0]  sdram_ba,      //       .ba
   output wire        sdram_cas_n,   //       .cas_n
   output wire        sdram_cke,     //       .cke
   output wire        sdram_clk,     //       .clk
   output wire        sdram_cs_n,    //       .cs_n
   inout  wire [15:0] sdram_dq,      //       .dq
   output wire [1:0]  sdram_dqm,     //       .dqm
   output wire        sdram_ras_n,   //       .ras_n
   output wire        sdram_we_n,    //       .we_n
   input  wire        uart_0_rxd,    // uart_0.rxd
   output wire        uart_0_txd,    //       .txd
   output wire [3:0]  led,   			 //    led.export
   input  wire [1:0]  key     		 //    key.export
);

   wire nios_clk;
   wire nios_reset;
   
   pll pll(
   	.areset(~reset_n),				 //pll是高电平复位,低电平处于工作状态,所以要取反
   	.inclk0(clk50m),					 //系统输入时钟50M
   	.c0(nios_clk),						 //系统工作时钟100M
   	.c1(sdram_clk),					 //SDRAM偏移时钟
   	.locked(nios_reset)				 //PLL稳定输出指示信号 PLL稳定时为高电平,不稳定为低电平,可以用作系统的复位信号
   );

   mysystem u0 (
       .clk_clk       (nios_clk),      //    clk.clk
       .reset_reset_n (nios_reset), 	 //  reset.reset_n
       .sdram_addr    (sdram_addr),    //  sdram.addr
       .sdram_ba      (sdram_ba),      //       .ba
       .sdram_cas_n   (sdram_cas_n),   //       .cas_n
       .sdram_cke     (sdram_cke),     //       .cke
       .sdram_cs_n    (sdram_cs_n),    //       .cs_n
       .sdram_dq      (sdram_dq),      //       .dq
       .sdram_dqm     (sdram_dqm),     //       .dqm
       .sdram_ras_n   (sdram_ras_n),   //       .ras_n
       .sdram_we_n    (sdram_we_n),    //       .we_n
       .uart_0_rxd    (uart_0_rxd),    // uart_0.rxd
       .uart_0_txd    (uart_0_txd),    //       .txd
       .led_export    (led),    		 //    led.export
       .key_export    (key)     		 //    key.export
   );

endmodule

5.配置引脚

在这里插入图片描述

6.打开Elips

在这里插入图片描述

7.创建Eclipse工程

File —> New —> Nios II Application and Bsp from Template
在这里插入图片描述

C代码编写——按键控制LED等

//简单延时函数
void delay_us(int i)
{
	while(i--);
}
//主函数
int main()
{
	int key = 0;
	IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,0x0);//初始化LED
	while(1)
	{
		key = IORD_ALTERA_AVALON_PIO_DATA(KEY_BASE);//读按键值
		if(key == 0x1)
		{
			delay_us(200);
			if(key == 0x1)
				IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,0xf);//KEY1按下LED灭
		}
		else if(key == 0x2)
		{
			delay_us(200);
			if(key == 0x2)
				IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,0x0);//KEY2按下LED亮
		}
	}
  return 0;
}

编译运行就OK,先下载sof文件到FPGA中,再下载Eclipse中C代码编译产生的elf文件

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值