基于FPGA平台RISCV架构的SOC应用系统设计3
基于FPGA平台RISCV架构的SOC应用系统设计3
本系列文章是参加第四届“复微杯”全国大学生电子设计大赛 FPGA 赛道的作品,该平台基于 RISCV,要求在 FPGA 平台可以实现指令执行,设计思路清晰, 具体如下:
- 对所用 RISCV 的内核结构熟悉,了解其数据通路;
- 应用方案完整,设计思路清晰,能够清楚的表达设计的内容以及价值;
- 可以根据硬件上的资源实现片外启动;
- 实现串口通信功能;
- FPGA 平台实现功能;
- 提供完整设计报告及验证报告;
4 功能仿真与实现
4.1 整体仿真
仿真文件Testbench中仅提供时钟和复位信号输入,复位信号结束后,rom里面的程序便开始运行,通过设置寄存器26和27来观察运行结果的正确性。仿真结束前会查看寄存器26和27的值,并根据执行情况打印pass或fail。
附录1中的代码经过编译后,由verilog运行时由ROM模块读取,仿真程序运行后终端打印结果如下,为pass,表面信息在经过RSA的加密解密后能恢复出原始信息。
图10 打印结果图
4.2 波形分析
Rib总线读写数据波形如图11所示,写数据时we_i信号线拉高,输入32为长度的addr_i和data_i数据,将地址为addr_i的寄存器写入数据data_i;读数据时we_i信号拉低,输入32位长度的addr_i地址数据,返回地址为addr_i寄存器的数据data_o。
图11 rib总线读写波形数据图
函数inverter_init(p,q);执行的波形情况如图12所示。基于地址数据信号位宽只有32位的限制,一次载入、读取只能传输16bit的数据,对于1024比特位宽的数据,一次载入、读取需要64次写、读操作。可以看到,其中大部分时间用在载入p和q,生成e和d只需要很短一段时间。生成e和d的仿真信号放大后如图,Reset信号为高后的一个时钟沿开始运行invert模块,经过10个时钟周期结束。
图12 invert函数波形图
信号 | 含义 | 信号 | 含义 |
---|---|---|---|
inst_i | 地址指针 | invert_finish | Invert模块运行结束信号 |
isnt_addr_i | 从rom里取出的立即数 | msg_in_reg | 输入数据寄存器 |
we_i | 连接rib总线的读写信号线 | msg_out_reg | 输出数据寄存器 |
addr_i | 连接rib总线的地址信号线 | reset1 | Mod模块开始运行信号 |
data_i | 连接rib总线的数据输入 | mod_exp_finish | Mod模块运行结束信号 |
data_o | 连接rib总线的数据输出 | encrypt_decrypt_reg | 加解密寄存器,信号为高表示加密,反之为解密 |
Reset | Invert模块开始运行信号 |
表3 仿真各信号与含义
函数jiami_p = encrypt(code,jiami);执行的波形情况如图13所示。可以看到加密时间非常短,经过7个时钟周期加密结束,大部分时间用在载入明文数据和读取密文数据中。
图13 加密运行波形图
函数ans_p = decrypt(jiami_p,ans);执行的波形情况如图14所示。经过1022个时钟周期后解密结束,可以看出解密速度远大于加密速度,但与载入密文和读取明文的时间相比依然较少。
图14 解密运行波形图
整体仿真波形如图15所示。加密前后数据如图中a标注箭头所示,解密前后数据如图中b标注箭头所示。可以看到,加密后的密文已被成功读取并重新载入写msg_in_reg,密文经过解密后成功恢复出明文。
图15 整体仿真波形图
4.3 硬件软件联调
尽管在 FPGA 验证的时候可以通过将程序预先存储在指令存储器中进行验证,但这会导致每次更改软件代码重新编译后,还需要重新生成 FPGA 烧录程序。本小组通过采用串口传输指令进行程序下载和调试功能,可以将软件代码在运行前下载到指令 ROM 中,并且可以实时对 SoC 进行一些简单的调试。上位机连接一个 USB 转串口工具即可。串口实现采用 python语言,更加易于使用者理解并更改,更方便自定义协议,根据需要,随时增加或者删除某些不必要的协议以减少面积。
验证流程:第一,进行 Verilog 代码功能仿真、时序管脚约束。 第二,后端综合和实现,并生成 Bitstream 文件。 第三,将 Bitstream 文件下载到 FPGA 开发板上。观察到led闪烁。
由于小组技术能力有限,本段仅队串口通信功能进行硬件测试。串口通信的C语言代码主函数如下,经过编译完成后生成二进制文件,通过电脑终端命令使用python语言编写的串口下载程序将二进制文件下载进FPGA的rom中,下载时需按下c程序下载键,下载过程如图16所示,FPGA开发板实物图如图17所示。
int main()
{uart_init();xprintf("hello world\n");while (1);
}
图16 uart下载示意图
图17 FPGA开发板实物图
下载完成后,按下复位键程序开始运行,程序的功能是将hello world字符串通过串口发送到电脑上,电脑上会有串口消息打印在串口调试助手上,如图18所示。
图18 串口通信示意图
5 总结与讨论
本小组在充分了解RISC-V内核的基础上实现了RSA模块的建模与仿真,并将uart功能在硬件设备上通过测试。在开源平台tinyrics-v上测试了基本指令的运行,新增了RSA模块用来实现加密,并编写与之配套的C语言代码来实现这一过程。最后通过仿真结果和波形来判断程序的正确性。
本小组在RSA模块中在加密过程中使用了1024位乘法器,导致综合过程不可实现。后续学习了Montgomery模乘算法硬件实现,但在验证的过程中数据出现错误并无法找出原因。后来将互为质数的p和q长度改为长度为32位长度,但在硬件调试过程中始终无法正确的生成密钥。于是放弃了后面的工作,综合过程中仅对uart模块的功能进行测试。
比赛赛程2022年
- 4月1日前:了解了riscv内核架构
- 4月1日-5月1日:了解相关加密算法原理,对RSA加密的verilog代码进行深入分析,
- 5月1日-6月1日:将RSA加密算法打包成模块,挂载在tinyriscv总线下面,并编写相关C语言驱动程序。进行波形仿真,通过对比加密后的数据判断程序的正确性。在FPGA开发板上实现在tinyriscv中跑uart功能。
- 6月1日-7月1日:由于学校强制学生离校,我们没有硬件平台,只能通过波形仿真查看结果,了解了Montgomery模乘算法硬件实现,但没有应用到该比赛中。
- 7月1日-7月底:了解了freeRTOS,实现了简单案例的仿真,但由于未找到实际用力价值未能应用到该比赛中。
参 考 文 献
[1] 郑东,赵庆兰;张应辉.密码学综述[J],西安邮电大学学报,2013年06期,1~10
[2] 司红伟,汤斌.RSA应用现状以及其在文件加密中的应用[J].华东理工大学,电脑与电信Computer&Telecommunication,2009年06期:76~78
[3] 杨涛. 基于公钥加密算法RSA问题实现方法的研究[J]. 科教文汇,2009 年 11期:282~283
[4] 梁鹏飞.基于流水线的Montgomery模乘算法硬件实现[D].华南理工大学硕士论文,2011年
[5] Chakraborty S.Vivado Design Tools[M].In Xilinx inc.2017:17–21.
[6] 雷思磊.RISC-V架构的开源处理器及SoC研究综述[J].单片机与嵌入式系统应用,2017,17(2):56-60.
[7] 季永辉. 基于 RISC-V 处理器的卷积加速 SoC 系统设计[D]. 山东工商学院, 2021.
[8] 胡振波.手把手教你设计CPU——RISC-V处理器篇[M].In人民邮电出版社.2018
[9] Raveendran A,Patil V,Selvakumar D,et al.A RISC-V instruction set processor-micro-architecturedesign and analysis[C].2016:1–7
[10] 张榜,来金梅.一种基于FPGA的卷积神经网络加速器的设计与实现[J].复旦学报:自然科学版,2018,57(2):236–242.
附录
附录1 C语言主函数代码
#define D 1024
int main()
{char e[D];char d[D];char jiami[D];char ans[D];char code[] = "This is a message encrypted with RSA to verify that the information encrypted by RSA can be restored to the same!";char * e_p;char * d_p;char * jiami_p;char * ans_p;char p[] = "90l38k8kn666jom067m3078l959o7129mm7km88n5441j023jn631o62o3281k7n554nj67j6k8n5j3ml1997mmn06l34ko3onll1l40094kokm85282k5lm1nl73o91";char q[] = "n677mo2lj7845613m0lomnln59m04nnnk2453nj4608971839ln7173j99ln61l70268m6774188nokn6om40m2m444om0k8lk5lkmn559570n8l1342j01m3omn1k01";inverter_init(p,q);e_p = get_e(e);d_p = get_d(d);jiami_p = encrypt(code,jiami);RSA_REG(RSA_ENCRYPT_TO_DECRYPT) = 1; //清除msg_in数据ans_p = decrypt(jiami_p,ans);if (*ans_p == 'T')set_test_pass();elseset_test_fail();return 0;
}
附录2 寄存器与宏定义表
Uart数据寄存器 | 地址 | 含义 |
---|---|---|
uart_ctrl[31:0] | 0x00 | bit[0]: tx enable, 1 = enable, 0 = disablebit[1]: rx enable, 1 = enable, 0 = disable |
uart_status[31:0] | 0x04 | bit[0]: tx busy, 1 = busy, 0 = idlebit[1]: rx over, 1 = over, 0 = receiving |
uart_baud[31:0] | 0x08 | clk div |
uart_rx[31:0] | 0x10 | rx data |
宏定义 | 地址 |
---|---|
RSA_BASE | (0x50000000)(基地址) |
RSA_P | (RSA_BASE + (0x00))(偏移地址) |
RSA_Q | (RSA_BASE + (0x04)) |
RSA_IN | (RSA_BASE + (0x08)) |
RSA_OUT | (RSA_BASE + (0x0c)) |
RSA_E | (RSA_BASE + (0x10)) |
RSA_D | (RSA_BASE + (0x14)) |
RSA_INVERTER_STATUS | (RSA_BASE + (0x18)) |
RSA_MOD_STATUS | (RSA_BASE + (0x1c)) |
RSA_INVETER_FINISH | (RSA_BASE + (0x20)) |
RSA_MOD_FINISH | (RSA_BASE + (0x24)) |
RSA_ENCRYPT_DECRYPT | (RSA_BASE + (0x28)) |
RSA_REG(addr) | (*((volatile uint32_t *)addr))(设置地址对应的数据) |
RSA数据寄存器 | 地址 | 含义 |
---|---|---|
p_reg[`WIDTH -1 :0] | 0x00 | 输入素数p |
q_reg; | 0x04 | 输入素数q |
msg_in_reg; | 0x08 | 输入加密/解密数据 |
msg_out_reg; | 0x0c | 输出加密/解密后的数据 |
e_reg; | 0x10 | |
d_reg; | 0x14 | |
inverter_status_reg; | 0x18 | Inverter模块开始工作 |
mod_status_reg; | 0x1c | Mod模块开始工作 |
inverter_finish_reg; | 0x20 | Inverter模块结束工作 |
基于FPGA平台RISCV架构的SOC应用系统设计3相关推荐
- 基于FPGA平台RISCV架构的SOC应用系统设计1
基于FPGA平台RISCV架构的SOC应用系统设计1 本系列文章是参加第四届"复微杯"全国大学生电子设计大赛 FPGA 赛道的作品,该平台基于 RISCV,要求在 FPGA 平 ...
- 处理器指令编码可重定义的方法_RISC-V学习笔记1 《基于FPGA与RISC-V的嵌入式系统设计》第3章 RISC-V指令集...
今天读了顾长怡的<基于FPGA与RISC-V的嵌入式系统设计>第3章 RISC-V指令集,做了一些简单的笔记. 1.这本书既然要基于RISC-V讲嵌入式系统设计,就必须要介绍RISC-V的 ...
- 基于FPGA的DDR3多端口读写存储管理系统设计
机载视频图形显示系统主要实现2D图形的绘制,构成各种飞行参数画面,同时叠加实时的外景视频.由于FPGA具有强大逻辑资源.丰富IP核等优点,基于 FPGA的嵌入式系统架构是机载视频图形显示系统理想的架构 ...
- 基于android 平台的校园二手物品交易系统设计与实现
目 录 摘 要 I Abstract II 1绪论 1 1.1 背景 1 1.2意义 1 1.3研究主要内容 2 2系统技术 3 2.1 Eclipse 的介绍 3 2.2 MyEclipse 5 2 ...
- 基于FPGA的啸叫检测与抑制系统设计与实现verilog
针对啸叫的问题,本文设计了一种基于移频算法的啸叫抑制器.采用高性能音频编解码芯片对音频信号采样,移频器对采样所得的音频信号进行移频,移频频率范围为0~8Hz,再用音频芯片输出,采用FFT算法计算出啸叫 ...
- 基于FPGA的数据采集、通讯和存储系统设计(即FPGA+RTL8211千兆以太网+SD卡存储+RTC+Uart+AD7606数模转换+电流放大采集等硬件设计及程序验证)
本文主要介绍了学生期间自己做的一个小项目,便于学习初期对fpga的整体把握,涉及了很多常见.常用.常考和面试常问的知识点. 可以作为入门后的拓展学习和应对一些找工作的项目面试. 下面对硬件及软件代码进 ...
- 基于FPGA的数字电子琴——数电小系统设计【数字电子技术】(使用Vivado中的verilog语言)含piano代码文件(全)
目录 一.电路功能描述 二.方案设计 1. 总体设计方案 2. 对原理框图或程序流程图做出简单解释 3. 各模块介绍 3.1 音频驱动模块 3.2 LED显示模块 3.3 数码管显示模块 3.4 矩阵 ...
- 【RED-V】基于 RISC-V 架构的开源开发板
板卡介绍 RED-V RedBoard 是 SparkFun 出品的开源开发板,主控芯片是基于 RISC-V 架构的 SoC SiFive FE310.FE310 是全球第一款基于 RISC-V 架构 ...
- 基于FPGA的深度卷积神经网络的加速器设计
英文论文链接:http://cadlab.cs.ucla.edu/~cong/slides/fpga2015_chen.pdf 翻译:卜居 转载请注明出处:http://blog.csdn.net/k ...
最新文章
- 简述python中怎样导入模块_Python中导入模块的两种模式,import
- 皮一皮:论智能酒店的高等级提示...
- 阿里云叔同:以容器为代表的云原生技术,已经成为释放云价值的最短路径
- 列表推导式(Python)
- ftp文件服务器杀毒,FTP远程查杀网页木马方法
- Qomolangma实现篇(三):兼容层设计
- 高并发秒杀——SpringBoot集成redis
- Linux 之父家断电六天:内核更新延期;华为 EMUI 11 用户突破1亿;美国得州最大电力公司申请破产 | 极客头条...
- 前端安全- 常见的网络攻击
- 矩阵求逆的几种方法总结(C++)
- 我真的不懂微信营销(一)
- 集成开发项目与开发集成项目的区别
- 人民邮电报丨智链助力北大荒大米实现区块链全生命周期追溯
- 省电软件测试自学,噱头还是实用?手机省电APP效果横向测试
- MySQL 后from多个表_SELECT * FROM多个表。 MySQL的
- 创业第18天, 竞价助手3.1主要功能完成
- 录屏工具有哪些?分享:电脑录制微课的工具和方法
- php5那一年,ps cs5是哪一年的
- Matlab 绘制函数切线(annotation函数法)
- 热敏式 打印机 小票排版
热门文章
- 均分01【解】--英雄会
- “时刻准备下岗”的互联网从业者:有何本事留下?
- linux系统Nginx下载安装步骤(含报错解决方法)
- Springboot 报错Content type ‘application/x-www-form-urlencoded;charset=UTF-8‘ not supported
- 电子信息、电气、计算机类专业中外合作硕士项目一览
- mysql 去除微秒_MySQL 关于毫秒和微秒的处理,MySQL获取毫秒!
- 1e6在C语言,热电偶转换C语言程序
- DAZ3D STUDIO是3D软件吗?
- (数学)P、NP、NPC、NP hard问题
- pygame2D游戏开发