2180|1

172

帖子

3

TA的资源

一粒金砂(高级)

楼主
 

【国产FPGA评测】安路(型号SF1S60CG121I) 06 使用SF1的硬核以及UART驱动 [复制链接]

  本帖最后由 EPTmachine 于 2023-4-22 21:47 编辑

1.1使用IP Generator生成RISC-V硬核和PLL核

创建工程并选择器件为SF160CG121I。

点击Tools->IP Generator,选择Create an IP core,生成RISC-V核SF1_MCU和PLL核sys_pll。

1.2 设计GPIO接口电路

在创建SF1_MCU IP的时候,选中了3个GPIO输出,在左侧的示意图上会出现三组GPIO相关的端口。

每组端口由gpiox_in、gpiox_out、gpiox_dir(x=0,1,2,3….n),与FPGA的物理端口连接需要添加一个控制电路,该控制电路中gpio_dir控制物理端口和gpio0_in还是和gpio0_out相连接。具体代码如下:

module gpio_controller( 
	output wire O_gpio_in,
    input  wire I_gpio_dir,//1'b0:input  ,1'b1:output
    input  wire I_gpio_out,
    
    inout  wire IO_gpio
    );

	assign IO_gpio = I_gpio_dir?I_gpio_out:1'bz;
    assign O_gpio_in=IO_gpio;

endmodule

1.3 设计SOC模块以及使用

结合上述配置好的RISC-V IP核和GPIO接口电路模块,组成一个可以供外部调用的SOC模块,具体代码如下:

module SF1_SOC( 
	input wire			I_clk,
    input wire			I_rst,
    input wire			I_timer_clk,
    
    input wire			I_jtag_tck,
    output wire			O_jtag_tdo,
    input wire			I_jtag_tms,
    input wire			I_jtag_tdi,

    input wire        I_uart_rx,
    output wire       O_uart_tx,
    
    inout wire			IO_gpio_0,
	inout wire			IO_gpio_1,
	inout wire			IO_gpio_2

);

	wire S_gpio0_out;
    wire S_gpio0_dir;
    wire S_gpio0_in;
	wire S_gpio1_out;
    wire S_gpio1_dir;
    wire S_gpio1_in;
	wire S_gpio2_out;
    wire S_gpio2_dir;
    wire S_gpio2_in;

//gpio_controller instances
	gpio_controller	u0_gpio_controller(
		.O_gpio_in(S_gpio0_in),
    	.I_gpio_dir(S_gpio0_dir),
    	.I_gpio_out(S_gpio0_in),
    
    	.IO_gpio(IO_gpio_0)        
    );

	gpio_controller	u1_gpio_controller(
		.O_gpio_in(S_gpio1_in),
    	.I_gpio_dir(S_gpio1_dir),
    	.I_gpio_out(S_gpio1_in),
    
    	.IO_gpio(IO_gpio_1)        
    );
    
	gpio_controller	u2_gpio_controller(
		.O_gpio_in(S_gpio2_in),
    	.I_gpio_dir(S_gpio2_dir),
    	.I_gpio_out(S_gpio2_in),
    
    	.IO_gpio(IO_gpio_2)        
    );

//SF1_MCU
SF1_MCU	u_SF1_MCU(
    	.core_clk(I_clk), 
    	.timer_clk(I_timer_clk),
        .core_reset(I_rst),
        
        .jtag_tck(I_jtag_tck),
        .jtag_tdo(O_jtag_tdo),
        .jtag_tms(I_jtag_tms),
        .jtag_tdi(I_jtag_tdi),
        
        
		.soft_ip_apbm_en(1'b0), 
        .qspi0cfg1_mode(1'b1), 
        .qspi0cfg2_mode(1'b1),
        
        .uart_tx(O_uart_tx),
        .uart_rx(I_uart_rx),

		.gpio0_out(S_gpio0_out), 
        .gpio0_dir(S_gpio0_dir), 
        .gpio0_in(S_gpio0_in), 
        
        .gpio1_out(S_gpio1_out), 
        .gpio1_dir(S_gpio1_dir), 
        .gpio1_in(S_gpio1_in),
        
        .gpio2_out(S_gpio2_out), 
        .gpio2_dir(S_gpio2_dir), 
        .gpio2_in(S_gpio2_in),  
       
//        .mtip(),  
//        .apb_clk(), 
//        .apb_paddr(), 
//        .apb_pwrite(), 
//        .apb_penable(), 
//        .apb_pprot(), 
//        .apb_pstrobe(), 
//        .apb_psel(), 
//        .apb_pwdata(), 
//        .apb_prdata(), 
//        .apb_pready(), 
//        .apb_pslverr(),

		.nmi(), 
        .clic_irq(), 
        .sysrstreq(), 
        .apb_clk_down(), 
        .apb_paddr_down(), 
        .apb_penable_down(), 
        .apb_pprot_down(), 
        .apb_prdata_down(), 
        .apb_pready_down(), 
        .apb_pslverr_down(), 
        .apb_pstrobe_down(), 
        .apb_pwdata_down(), 
        .apb_pwrite_down(), 
        .apb_psel0_down(), 
        .apb_psel1_down(), 
        .apb_psel2_down()
);




endmodule

在TOP模块中调用,SOC模块和PLL模块

添加管脚约束,通过查看硬件原理图,可以整理出使用到的IO端口连接

TOP端口 FPGA端口 外设
I_clk_25m D7 25M无源晶振
I_rst_n H3 按键K0
I_jtag_tck C7 JTAG TCK引脚
O_jtag_tdo C6 JTAG TDO引脚
I_jtag_tms D6 JTAG TMS引脚
I_jtag_tdi D5 JTAG TDI引脚
O_led0 J4 LED0
O_led1 H5 LED1
O_led2 J5 LED2
I_uart_rx E4 SF1_UART_RX
O_uart_tx A4 SF1_UART_TX

添加完成IO约束和时序约束后,就可以生成位流文件,准备接下来的下载了。

2.RISC-V程序编写

上述过程完成了RISC-V硬核的实现,接下来需要在编写运行在RISC-V处理器上程序。

2.1开发环境准备

SF1上的RISC-V硬核的程序是在Future Dynasty(FD)集成开发环境中进行的,开发工具直接将压缩包解压到硬盘上即可,注意在路径中不要有中文,否则会有乱码、编译器无法执行等问题。

2.2创建工程

在File->New中选择Project,按下图中所示的流程创建gpio_demo工程。

2.2下载工程

创建完成后,由于串口驱动中的波特率驱动存在bug,需要对驱动程序进行修改,修改的地方位于

修改后就可以正常使用UART了。编译工程后,在工程的Debug文件夹下查看可产生的二进制文件。回到TD软件中,点击工具栏中的Download按钮。在页面中选择FPGA的位留文件和RISC-V工程的Hex文件,下载方式选择PROGRAM RISCV IMG,下载时,记得点击文件列表中的位流文件,这样下载时才不会报错。

2.3运行演示

09演示

工程附件

Soc_GPIO_LED_MCU.7z (186.34 KB, 下载次数: 4)

Soc_GPIO_LED_FPGA.7z (411.76 KB, 下载次数: 4)

 

最新回复

配置好的RISC-V IP核和GPIO接口电路模块,主要是供外部调用的SOC模块 然后下载时,记得点击文件列表中的位流文件,这样下载时才不会报错   详情 回复 发表于 2023-4-29 08:11
点赞 关注
 
 

回复
举报

6807

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

配置好的RISC-V IP核和GPIO接口电路模块,主要是供外部调用的SOC模块

然后下载时,记得点击文件列表中的位流文件,这样下载时才不会报错

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
[精典书籍]蓝牙核心技术(供通信行业研究开发人员参考)

本书系由参与蓝牙标准制定的两位成员撰写,共四个部分17章,内容涉及目前蓝牙无线技术所面临的挑战\应用模式\蓝牙协议栈\蓝牙协议 ...

2007年全国大学生电子设计竞赛 仪表仪器类题目 讨论专用帖

本帖最后由 paulhyde 于 2014-9-15 09:18 编辑 2007年全国大学生电子设计竞赛 仪表仪器类题目 讨论专用帖 附题目

智林测控开发板.强烈推荐

这是个ARM最小系统开发板,大家可以上淘宝买一个玩,不到50元的成本, 本帖最后由 jxb01033016 于 2009-9-17 11:57 编辑 ]

耦合专贴

NO~1 什么是耦合?耦合是什么?耦合是指两个实体相互依赖于对方的一个量度。分为以下几种: 非直接耦合:两个模块之间没有直接 ...

LCD多层菜单的实现

在前不久我发了《LCD单层菜单翻滚的实现》https://bbs.eeworld.com.cn/thread-314573-1-1.html,在此帖中实现了单层菜单的上下 ...

怎么把元器件画在PCB板子的反面?

画四层板子,板子太小了,线路走不完,怎么把元器件画到板子的背面去?

Profinet转RS485连接三项多功能电力仪表配置案例

本案例是使用Profinet转RS485网关连接三项多功能电力仪表的配置案例。 所需设备:西门子1200PLC一台、Profinet转RS485自由协议 ...

【ADI•世健工业嘉年华】ADI TMC4671直流无刷电机-位置控制模式

ADI TMC4671直流无刷电机-位置控制模式 硬件搭建: 24V/2.7A的电源适配器为TMC4671电机控制评估板供电 电机控制 ...

【电源小知识】我说buck-boost天生就需要一个很大的电感,你同意吗?

805747 这里面有一个很深层的问题,为什么 buck-boos 天生就需要一个很大的电感,而 buck 或者boost 相对来说就比较 ...

高压电源的问题,220V交流输入,输出10~500V直流

这个220V交流转500V直流怎么实现,220V经过全桥整流滤波之后电压才310V左右,到500V需要升压,那么要实现这个10~500V的直流输出 ...

关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表