在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4588|回复: 16

[求助] 关于8051IP核设计遇到的问题

[复制链接]
发表于 2021-5-14 22:41:23 | 显示全部楼层 |阅读模式
200资产
最近在照着《8051软核处理器设计实战》这本书进行8051IP核的设计,主要有以下几个疑问:
(1)整个书本好像只描述了运行功能相关的代码,没有提及存储器的设计,如果想要整个模块跑起来,是不是需要在Quartus库里面用它自带的ROM和RAM来连接之前设计的各个功能模块。
(2)这本书还给出了一套验证文件,网站上说只要运行tb他就会自动调用测试所需要的文件并输出结果,我用Questasim在没有连接任何存储模块的情况下直接运行了,看起来能正常运行,这样的话我是否可以只实现内部寄存器,不用实现外部寄存器。同时对于这一套仿真文件的运作方式也不是很了解,可以的话能否讲解一下。
(3)同样的,这本书里面也没有提到UART,定时器的实现,如果没有这两个模块是否会影响该IP核的工作,进而影响后面结果的仿真

最佳答案

查看完整内容

针对问题,个人看法如下:(1):你可以看下r8051_design的架构图,对应的代码在tb中实现(例化)。针对前端设计而言,把通信端口设计好,在后端设计时把ROM、RAM等macro单元merge进来;针对验证来说,要么采用IP商提供的model,要么自己用寄存器(register)来替代(FPGA实现也类似)。 (2):这本书主要讲述8051的指令集实现,关于采用何种方式实现slaver的集成(何种总线)、中断处理模块、外设通信接口等知识并没有涉及,这需 ...
发表于 2021-5-14 22:41:24 | 显示全部楼层
本帖最后由 courageheart 于 2021-5-15 15:35 编辑

针对问题,个人看法如下:(1):你可以看下r8051_design的架构图,对应的代码在tb中实现(例化)。针对前端设计而言,把通信端口设计好,在后端设计时把ROM、RAM等macro单元merge进来;针对验证来说,要么采用IP商提供的model,要么自己用寄存器(register)来替代(FPGA实现也类似)。
(2):这本书主要讲述8051的指令集实现,关于采用何种方式实现slaver的集成(何种总线)、中断处理模块、外设通信接口等知识并没有涉及,这需要读者自己深入学习。这套仿真资料,主要用来验证指令操作(课本中的指令)。
(3):如(1)(2)所述,如果你想实现一个MCU的功能,这份资料还不够,可以找找基于oc8051的SoC资料,或者看些RISC-V的资料(以后用到的机会会更多)。

希望以上看法,能有用!

r8051_tb的结构图:
image.png
发表于 2021-5-15 08:13:39 | 显示全部楼层
有沒有大神可以指導一下...小弟我最近也是在學習8051
 楼主| 发表于 2021-5-15 17:01:30 | 显示全部楼层


courageheart 发表于 2021-5-15 15:17
针对问题,个人看法如下:(1):你可以看下r8051_design的架构图,对应的代码在tb中实现(例化)。针对前 ...


感谢回复,为了做本科毕设然后找到了这本书来学习,由于留出来的时间不是很多所以简单浏览了一下资料就开始做了,写论文写到后面发现有些不对劲所以就上来提问。看了您的回复我有了以下一些想法:
(1)根据您给出的结构图,是否可以理解为作者所提供的tb相当于实现了片内ROM和RAM,我无需另外添加Quartus的存储器IP核,就可以直接验证自己设计的8051IP核是否正确。
(2)作为毕设的话,如果按照书上设计的内容不够,还需要添加什么模块。书上有提到UART、计数器还有内外存储器。但是我在看到别的设计里还提到了ALU,这个设计的ip核是已经包含了ALU了吗?
(3)另外,关于本书的除法器实现方式我有点不太明白,看起来和网上其他的算法不太一样,在除数和被除数的比较过程中我没看懂,如果可以的话希望能举例说明一下这个除法器的运作原理。
发表于 2021-5-15 18:02:20 | 显示全部楼层


xyjandyyk 发表于 2021-5-15 17:01
感谢回复,为了做本科毕设然后找到了这本书来学习,由于留出来的时间不是很多所以简单浏览了一下资料就开 ...


(1)关于memory,你可以直接调用quartusii的IP,但要确保接口匹配;(差异不大)
(2)建议把8051指令集(100多个)的内容再看几遍,这样你就理解ALU(算术、逻辑指令);(3)既然是毕设,那就需要知道你论文的创新点在哪里,不清楚的地方就去请教老师(老师才是审核和发问的人)。如果你想在除法器或乘法器上做文章,那就要多去找这方面的资料看看,然后通过仿真来验证你的方法。

divide文档做了下修改(如下),自己添加些激励去仿一仿(自己建testbench),直接看代码有时会比较难理解。


module div_8(
output [15:0] divide,
input  [7:0] a, b);

reg  [7:0]     ans;
reg  [7:0]     rem;
reg  [7:0]     x7;
reg  [7:0]     x6;
reg  [7:0]     x5;
reg  [7:0]     x4;
reg  [7:0]     x3;
reg  [7:0]     x2;
reg  [7:0]     x1;
reg  [7:0]     x0;

reg  [1:0]     y5;
reg  [2:0]     y4;
reg  [3:0]     y3;
reg  [4:0]     y2;
reg  [5:0]     y1;
reg  [6:0]     y0;

always@(*) begin
x7 = a;
ans[7] = (|b[7:1])? 1'b0 : x7[7];

x6 = {(~ans[7])&a[7],a[6:0]};
ans[6] = (|b[7:2])? 1'b0 : (x6[7:6]>=b[1:0]);

y5 = ans[6] ? (x6[7:6]-b[1:0]) : x6[7:6];
x5 = { y5, a[5:0] };
ans[5] = (|b[7:3])? 1'b0 : ( x5[7:5]>=b[2:0] );

y4 = ans[5] ? (x5[7:5]-b[2:0]) : x5[7:5];
x4 = { y4, a[4:0]};
ans[4] = (|b[7:4])? 1'b0 : ( x4[7:4]>=b[3:0] );

y3 = ans[4] ? (x4[7:4]-b[3:0]) : x4[7:4];
x3 = {y3, a[3:0]};
ans[3] = (|b[7:5])? 1'b0 : ( x3[7:3]>=b[4:0] );

y2 = ans[3] ? (x3[7:3]-b[4:0]) : x3[7:3];
x2 = {y2,a[2:0]};
ans[2] = (|b[7:6])? 1'b0 : ( x2[7:2]>=b[5:0] );

y1 = ans[2] ? (x2[7:2]-b[5:0]) : x2[7:2];
x1 = {y1,a[1:0]};
ans[1] = (|b[7]) ? 1'b0 : ( x1[7:1]>=b[6:0] );

y0 = ans[1] ? (x1[7:1]-b[6:0]) : x1[7:1];
x0 = {y0,a[0]};
ans[0] = (x0>=b);

rem = ans[0] ? (x0-b) : x0;
end

assign divide = {rem,ans};

endmodule



 楼主| 发表于 2021-5-23 12:56:07 | 显示全部楼层


courageheart 发表于 2021-5-15 18:02
(1)关于memory,你可以直接调用quartusii的IP,但要确保接口匹配;(差异不大)
(2)建议把8051指令集 ...


谢谢回复,这段时间我研究了一下oc8051,按照一个教程连接好了ROM和RAM,在ROM写了个取立即数的指令,然后modelsim跑仿真的时候发现没出来。然后后面还发现官方的tb也是只验证指令运行的部分,其他的如计数器和串口模块验证都没有提及,一下子有点懵。请问可以指点一下仿真验证这方面吗。
发表于 2021-5-24 08:57:03 | 显示全部楼层


xyjandyyk 发表于 2021-5-23 12:56
谢谢回复,这段时间我研究了一下oc8051,按照一个教程连接好了ROM和RAM,在ROM写了个取立即数的指令,然 ...


附件提供的一款基于oc8051的简易MCU,资料比较完整。verif文件夹下有testbench(包括testcase测试案例和modelsim运行脚本)。
简单说明下:
1、oms8051mini\trunk\verif\sw\:有uart的C代码、汇编代码以及编译链接后的可执行文件hex
2、oms8051mini\trunk\verif\tb\:testbench(tb_top)
3、oms8051mini\trunk\verif\testcase\:包括uart的testcase测试案例
4、oms8051mini\trunk\verif\run\:不同工具下的运行脚本,包括modelsim运行脚本
5、自己认真跑一个案例,理解C代码的实现方式,然后就可以写下论文。
top.jpg

oms8051mini.rar (2.58 MB, 下载次数: 52 )
发表于 2021-5-24 10:29:25 | 显示全部楼层
我毕设做的就是这个。。
 楼主| 发表于 2021-5-24 10:31:08 | 显示全部楼层


courageheart 发表于 2021-5-24 08:57
附件提供的一款基于oc8051的简易MCU,资料比较完整。verif文件夹下有testbench(包括testcase测试案例和m ...


感谢您提供的帮助。今天将论文的初稿给导师看了,他说我这个设计还没到MCU这个级别,不需要添加外设,只要设计验证核心即可。那么我是不是只需要验证处理核心的代码执行功能就行,像UART、定时器和中断系统这些模块如果属于IP核的外设的话可以不用涉及
发表于 2021-5-24 10:42:57 | 显示全部楼层
代码与仿真文件

r8051.zip

10.52 KB, 下载次数: 45 , 下载积分: 资产 -2 信元, 下载支出 2 信元

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

本版积分规则

关闭

站长推荐 上一条 /1 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-3-28 19:16 , Processed in 0.029678 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表