您好,欢迎来到聚文网。
登录
免费注册
网站首页
|
搜索
热搜:
磁力片
|
漫画
|
购物车
0
我的订单
商品分类
首页
幼儿
文学
社科
教辅
生活
销量榜
基于FPGA与RISC-V的嵌入式系统设计
字数: 312000
装帧: 平装
出版社: 清华大学出版社
作者: 顾长怡
出版日期: 2020-02-01
商品条码: 9787302545385
版次: 1
开本: B5
页数: 312
出版年份: 2020
定价:
¥118
销售价:
登录后查看价格
¥{{selectedSku?.salePrice}}
库存:
{{selectedSku?.stock}}
库存充足
{{item.title}}:
{{its.name}}
加入购物车
立即购买
加入书单
收藏
精选
¥5.83
世界图书名著昆虫记绿野仙踪木偶奇遇记儿童书籍彩图注音版
¥5.39
正版世界名著文学小说名家名译中学生课外阅读书籍图书批发 70册
¥8.58
简笔画10000例加厚版2-6岁幼儿童涂色本涂鸦本绘画本填色书正版
¥5.83
世界文学名著全49册中小学生青少年课外书籍文学小说批发正版
¥4.95
全优冲刺100分测试卷一二三四五六年级上下册语文数学英语模拟卷
¥8.69
父与子彩图注音完整版小学生图书批发儿童课外阅读书籍正版1册
¥24.2
好玩的洞洞拉拉书0-3岁宝宝早教益智游戏书机关立体翻翻书4册
¥7.15
幼儿认字识字大王3000字幼儿园中班大班学前班宝宝早教启蒙书
¥11.55
用思维导图读懂儿童心理学培养情绪管理与性格培养故事指导书
¥19.8
少年读漫画鬼谷子全6册在漫画中学国学小学生课外阅读书籍正版
¥64
科学真好玩
¥12.7
一年级下4册·读读童谣和儿歌
¥38.4
原生态新生代(传统木版年画的当代传承国际研讨会论文集)
¥11.14
法国经典中篇小说
¥11.32
上海的狐步舞--穆时英(中国现代文学馆馆藏初版本经典)
¥21.56
猫的摇篮(精)
¥30.72
幼儿园特色课程实施方案/幼儿园生命成长启蒙教育课程丛书
¥24.94
旧时风物(精)
¥12.04
三希堂三帖/墨林珍赏
¥6.88
寒山子庞居士诗帖/墨林珍赏
¥6.88
苕溪帖/墨林珍赏
¥6.88
楷书王维诗卷/墨林珍赏
¥9.46
兰亭序/墨林珍赏
¥7.74
祭侄文稿/墨林珍赏
¥7.74
蜀素帖/墨林珍赏
¥12.04
真草千字文/墨林珍赏
¥114.4
进宴仪轨(精)/中国古代舞乐域外图书
¥24.94
舞蹈音乐的基础理论与应用
内容简介
本书详细介绍了RISC-V指令集及其设计思想,并在此基础上引入了一种称为FARM的软硬件开发模式,将FPGA同RISC-V CPU软核相结合,并利用Arduino与Make作为软件快速开发工具,有效地提高了开发效率,使系统设计具有更好的通用性和可移植性。除了上述有关软硬件的讨论之外,本书的作者还与国内小脚丫FPGA的团队进行了合作,成功地将书中的大部分内容移植到了小脚丫FPGA旗下的STEP CYC10开发板上,并将相关的技术细节在书中做了详细陈述,以方便读者的动手实践。本书内容既有深度,又有广度,对各类从事软硬件开发的科技人员会有很大的参考价值。对高校相关专业的学生,本书也是一部很好的参考书。
目录
第1章 概述
1.1背景阐述
1.2FPGA
1.3RISC-V
1.4小脚丫FPGA开发平台
1.5C/C++,Make与工具链
1.6嵌入式操作系统
1.7Arduino集成开发环境
1.8模块授权方式
1.9PulseRainRTL库
1.10资料来源
1.11代码资源
第2章 FPGA
2.1FPGA背景概述
2.2FPGA与数字芯片的异同
2.2.1FPGA与数字芯片在设计流程上的异同
2.2.2FPGA与数字芯片在功耗上的区别
2.2.3FPGA与数字芯片在性能上的区别
2.2.4逻辑设计规模的衡量单位
2.2.5避免使用锁存器
2.3FPGA与CPLD的区别
2.4FPGA开发中硬件设计语言的选择
2.4.1VHDL与System Verilog/Verilog
2.4.2HLS
2.4.3System C
2.4.4Chisel/SpinalHDL
2.5FPGA的片上内存
2.6用FPGA实现双向同步SRAM接口
2.7FPGA的DSP Block
2.8时钟与复位
2.9时钟域跨越
2.9.1单个电平信号的时钟域跨越
2.9.2单个脉冲信号的时钟域跨越
2.9.3多比特总线的时钟域跨越
2.10有限状态机的System Verilog模板
2.11高速IO与源同步总线(Source Synchronous Bus)
2.12FPGA在数字信号处理中的应用
2.12.1数字滤波器
2.12.24倍频采样
2.12.3复数乘法
2.12.4补码,值饱和,负值,绝对值,四舍五入
2.12.5除法
2.12.6正弦函数与余弦函数
2.12.7CORDIC算法
2.13其他技巧
2.13.1寄存器重定时
2.13.2异或树与多路复用器
2.13.3虚拟输入输出
2.13.4迁移路径
2.14面积与性能的平衡
2.14.1流水线与并行
2.14.2小面积设计
2.14.3AT2定律
2.15数字逻辑与处理器各自适用的领域
第3章 RISC-V指令集
3.1RISC-V的历史
3.28051的CISC指令集与RISC-V的比较
3.2.18051 指令集简介
3.2.28051 指令集对处理器设计的负面影响
3.2.3RISC-V指令集对处理器设计的正面影响
3.3RISC-V与其他RISC指令集的比较
3.4RISC-V基础指令集(RV32I与RV32E)
3.4.1RV32I与RV32E基础指令集简介
3.4.2RISC-V地址空间
3.4.3RV32I通用寄存器与函数调用约定
3.4.4RV32I指令格式
3.4.5RV32I算术与逻辑指令
3.4.6控制转移指令
3.4.7内存载入与存储指令
3.4.8RV32I内存同步指令
3.4.9控制与状态寄存器指令
3.4.10环境调用与软件断点
3.4.11基础指令集的面积优化方案
3.5RISC-V扩展指令集
3.5.1乘除法扩展(M Extension)
3.5.2压缩指令集扩展
3.6RISC-V特权架构
3.6.1特权层级
3.6.2控制状态寄存器
3.6.3定时器
3.6.4中断与异常
3.6.5程序的调试
第4章 设计基于RISC-V指令集的Soft-CPU
4.12018 RISC-V Soft CPU Contest获奖作品:PulseRain Reindeer
4.2适合于FPGA的设计目标
4.3PulseRain Reindeer的设计策略
4.4PulseRain Reindeer的RTL设计
4.4.1与FPGA平台相关部分
4.4.2独立于FPGA平台部分
4.4.3通用寄存器的设计
4.4.4CSR寄存器的实现
4.4.5时钟定时器的实现
4.4.6流水线的设计
4.5处理器验证的方式
4.5.1黑盒(Black Box)测试与白盒(White Box)测试
4.5.2用Verilator做处理器内核的黑盒验证
4.5.3用Modelsim做处理器的白盒验证
第5章 外围设备接口
5.1UART
5.2I2C和SMBus
5.3SPI
5.4PWM
5.5microSD存储卡
5.6PS/2接口
5.7旋转编码器
5.87段数码管显示器
5.9USB
5.10以太网
第6章 嵌入式软件开发基础
6.1目标文件格式
6.2Link Script(编译用链接脚本)
6.3工具链
6.3.1readelf
6.3.2objdump
6.3.3objcopy
6.4嵌入式系统中高级编程语言的选择
6.5C语言在嵌入式系统中的应用
6.5.1C语言的模块封装
6.5.2C语言的内存对齐访问
6.5.3C语言的静态编译检查
6.5.4volatile与const
6.6C++语言在嵌入式系统中的应用
6.6.1C++语言的口水仗
6.6.2C++语言对C的改进
6.6.3C++语言引入的新概念和新方法
6.7MAKE
6.7.1支持增量编译的Makefile(Makefile for Incremental Build)
6.7.2支持内核配置语言的Makefile
第7章 嵌入式操作系统的移植
7.1嵌入式操作系统的分类
7.1.1裸金属系统
7.1.2实时操作系统
7.1.3通用操作系统
7.2Zephyr操作系统的RISC-V移植
7.2.1Zephyr操作系统简介
7.2.2串行口的支持
7.2.3定时器的支持
7.2.4中断的设置
7.2.5修改编译链接选项
7.2.6样本应用程序
第8章 Arduino开发系统
8.1Arduino的历史
8.2Arduino的技术贡献
8.3Arduino开发板
8.4Arduino IDE集成开发环境和ArduinoLanguage
8.4.1Arduino IDE集成开发环境的工作原理
8.4.2Arduino Language
8.5Arduino IDE集成开发环境下第三方开发包的使用和制作
8.5.1Arduino IDE第三方开发包的使用
8.5.2Arduino IDE第三方开发包的制作
8.6Arduino IDE集成开发环境下第三方支持库的使用和制作
8.6.1Arduino IDE第三方支持库的使用
8.6.2Arduino IDE第三方支持库的制作
第9章综合实验平台:小脚丫STEP FPGA开发板
9.1STEP CYC10开发板简介
9.2RISC-V for Step FPGA
9.3动态内存的访问与时序约束
9.3.1动态内存的仿真
9.3.2动态内存的时钟设置
9.3.3动态内存的时序约束
9.3.4动态内存的读写测试
9.4处理器仿真
9.4.1用Verilator做仿真
9.4.2用Modelsim做仿真
9.5外围设备与中断
9.5.1外围设备(RTL模块)与物理设备
9.5.2中断映射
9.5.3中断处理程序
9.6外围设备寄存器地址列表
9.7串行口
9.8GPIO
9.95向按键
9.107段管显示器
9.11三轴加速度传感器(ADXL345)
9.12开发板示范Sketch
第10章 知识产权保护
10.1知识产权保护的方式
10.2计算机指令集的知识产权保护
10.3逆向工程
10.4协议授权
10.4.1GPL
10.4.2LGPL
10.4.3Apache
10.4.4知识共享
10.4.5双授权协议
摘要
第3章 RISC-V指令集 The devil is in the fine print. From the Web 魔鬼总是在文件细则中。 网络格言 RISC-V指令集第3章 71 了一家叫SiFive 的初创公司,向市场提供各类RISC-V 的处理器内核,以及相关的 软件工具和开发套件。 3.2 8051的CISC指令集与RISC-V的比较 3.2.1 8051指令集简介 提到RISC(Reduced Instruction Set Computer ,精简指令集计算机),就必然 也会提到CISC(Complex Instruction Set Computer ,复杂指令集计算机)。在许多 嵌入式系统中得到广泛使用的8051 单片机,便是CISC 指令集的典型代表。笔者 在开始设计RISC-V 处理器之前,也曾做过一款1T(单时钟周期)8051 处理器的 设计,所以对这两类不同类型的指令集都有深入了解。这里笔者愿意将这些体会做 个总结,并由此来反映RISC-V 在技术设计上的优势。 可能有许多读者对8051 单片机早已熟悉,该单片机是由美国Intel 公司于20 世纪80 年代推出的一款8 位单片机。由于该单片机方便易用,许多公司都推出了 第三方的兼容设计。直到今天,8051 单片机依然被许多嵌入式系统所选用。 然而在20 世纪80 年代该单片机刚刚问世时,半导体的制造工艺还只能达到 μm 级,处理器所能达到的时钟频率偏低。而且当时硬件设计语言还处于起步阶段, 也缺乏自动设计的工具,软件多以手工汇编编程为主。这就导致流水线设计的优势 无法得到发挥,并且每条指令需要多个时钟周期才能完成。由于上述原因,当时的 指令集设计往往具有以下特点: (1)尽量在每条指令中实现更多的功能。例如8051 的CJNE 指令,就 需要在一条指令中依次实现: ①与累加器做减法。 ②修改进位标示。 ③将结果做相等比较。 基于FPGA与RISC-V的嵌入式系统设计 五校 正文1-140.indd 71 2019-12-27 10:44:00 72 ④ 根据比较结果决定是否跳转。 (2)指令集庞大,以实现更多的复杂功能。例如8051虽然是8位单片机, 其指令集却包含高达255种不同的指令和格式。 (3)由于以上两点,导致变长指令的出现,以提高内存利用率。8051的 指令就有单字节、双字节与三字节三种不同的种类,而且除了对指令解码以外, 没有其他的手段帮助判定指令长度。 (4)寻址方式众多。例如在8051指令集中,对数值的操作包括如下方式: ① 立即数寻址。将常数包含在指令中。 ② 直接寻址。将内存地址包含在指令中。 ③ 间接寻址。将内存地址放入寄存器中,然后将寄存器地址包含在指令中。 ④ 寄存器寻址。将操作数放入寄存器中,然后将寄存器地址包含在指令中。 由于众多的寻址方式,同一个功能在指令集中就可能对应多种指令格式。例如 在8051指令集中,光是一个加法指令就有12种不同格式。类似地,跳转指令也存 在多种的寻址方式和指令格式。 8051指令集的特点,很大程度上也代表了当时众多CISC指令集的共同特点。 这种特点是与当时半导体制造水平和软件发展水平相匹配的。随着半导体加工工艺 的不断进步和软件开发水平的提高,流水线和高时钟频率的设计开始在处理器设计 中流行,汇编语言也开始被C/C++这类高级编程语言所替代。尽管8051是一个非 常长寿的指令集,自问世近40年,依然被业界广泛采用,但是今天市面上出现的 8051处理器,却早已和它们的祖先大不一样了。 8051的第一代产品,其时钟频率只有12 MHz,每个指令需要12个时钟周期 才能完成。而今天我们所使用的8051处理器,都是增强型处理器,除了有更丰富 的外围设备外,其增强之处主要表现在: (1)时钟频率大幅提高。 RISC-V指令集第3章 73 (2)指令的吞吐率大幅提高,对大部分的指令,都可以做到在单个时钟 周期内完成即我们通常说的 1T 8051 。 (3)在软件上,支持C 语言的开发环境。 换句话说,今天的增强型8051 处理器,虽然其指令集还是40 年前的那个 指令集,但是其内部实现却早已经在原型基础上进行了RISC 改造(实际上, 类似的RISC 改造也同样发生在Intel 的x86 处理器上)。 x18~x27 s2~s11 该寄存器需要被调函数予以保存是 x28~x31 t3~t6 临时寄存器否 注意:需要指出的是,除了硬件指令集会对函数调用约定产生影响外,高级 语言的编译器也会对其有影响。 例如,对下面的函数: void dummy(int a,int b,int c,int d,int e); 不同的编译器可能对函数参数压栈的顺序有不一致的理解。有的会从左到右,以 a、b、c、d、e 的顺序压栈;有的则反之,从右到左压栈。这种编译器在函数调 用约定上的不一致在C 和C++ 语言混合编程时经常发生。当C++ 模块直接调用 C 语言模块时,链接器会给
×
Close
添加到书单
加载中...
点此新建书单
×
Close
新建书单
标题:
简介:
蜀ICP备2024047804号
Copyright 版权所有 © jvwen.com 聚文网