第一个简单IP设计项目

首先叠个甲,这里是课程笔记,如果觉得侵权请联系删帖。数字IC/数字电路/FPGA设计_从入门到精通
接下来可能不会再更新此课程的笔记,因为可能涉及到侵权的问题,数字IC设计入门,学习老师的东西确实十分全面,我并没有主动给老师打广告的意思(侧面可能帮老师做了宣传,希望老师不要寄律师函),笔记是自己辛苦总结的。
也希望能够点赞、收藏啥的,希望无私的付出能得到你的肯定!

目录

1.设计思路

2.设计需求分析—BIN2BCD设计说明(specification)—完成第①步

1.设计说明

2.模块IO定义(理论上在第③步中完成)

3.示例波形

3.算法模型与优化(不是接口协议类问题)—完成第②步

2.算法思路及coding

4.Cycle级pipeline结构分析与举例

1.pipeline介绍

2.几种方案的pipeline划分

​5.仿真环境

6.RTL coding 和 仿真验证

7.江湖再见!——此课程笔记帖不再更新主要内容


1.设计思路

设计是由设计思想决定的,重点是规划好再设计!

设计思想:为什么会给出三种设计方法?因为需要多种方案对比才知道方案最优!因此尽可能要想到多种方案,优缺点列出来,然后根据设计需求选择最合适的方案!

2.设计需求分析—BIN2BCD设计说明(specification)—完成第①步

1.设计说明

BCD码——二进制表示的十进制编码

2.模块IO定义(理论上在第③步中完成)

①理论上先进行算法模型与优化,这个小例子反一下,先统一IO方便验证设计对错

因为对于一个不清楚的IP,理论上是先有算法,然后根据算法知道有什么输入得到什么输出,数据是从ddr还是从memory来,才能分析出它的IO。

②做了框图(block diagram)后,通常需要写一个IO的excel表,将信号的方向(I输入O输出)、信号的bit数、信号的作用,都详细的写清楚

3.示例波形

至此完成了整个IP设计的需求分析!!!

3.算法模型与优化(不是接口协议类问题)—完成第②步

2.算法思路及coding

简化:思考出算法后,查看sky的思路,实现他完成coding思路的RTL coding 和 仿真——再做对比和反馈!

1.查表法

RAM的深度是有多少个格子,宽度是一个格子可以放多少bit的数据,总容量是深度×位宽。

综上,如果不差表的千位,则Ram深度为1024,位宽由17位,去掉1位符号位(可以自己在电路中决定)、去掉千位的4位(通过比较器无需在Ram中查千位),只需要位宽12位。即RAM的大小为1024*12。

查表法PPA分析

2.除法

!!!这怎么没想到?十进制数——不断的除10取余,不就把千位、百位、十位、个位的BCD码得到了!因为给我的是一个11的有符号二进制数,所以没直接想到转换为十进制数,直接对应相应的千位、百位、十位、个位的BCD码!

除法PPA分析

取余操作、除法操作都是用到除法器,都是一堆减法器穿行起来实现除法,没有CSA做电路结构优化得到类似Wallace Tree。因而电路面积比较大,速度慢。 但是比查表法的Ram应该会小一点。

3.穷举法

bcd码的每一位,如百位——只能是0 1 ... 8 9一共十种情况中的一种。 思想:不知道就进行比较和猜测。

 

4.还有别的算法吗?

要保持怀疑态度——才能得到最好的设计方案!

4.Cycle级pipeline结构分析与举例

1.pipeline介绍

pipeline划分的需求,思路一:直接一个周期输入输出——达不到频率要求。 思路二:在多个周期内,只处理一次bin输入,此时不接收行的bin输入——相当于串行逻辑,效率低。

 

流水线优点——Pipeline好处有二!!!:

①对比串行的实现方式,串行每N个周期才能输入一个数据,电路频率(电路延时)和流水线是一样,但流水线能提高吞吐率。 ②使用纯组合逻辑实现方式,一个周期算出来bin到bcd的输出,吞吐率是上去了,但电路延迟会很大,时钟频率提不上去。(一个周期做的事情很多—占用的时长会很大—频率低) 而pipeline方式,每个周期都能接一个输入,N周期后能一个一个输出,吞吐率和时钟频率都比较高。 总结:①对比串行方式,提高了吞吐率。②对比纯组合逻辑方式,提高了时钟频率。

HZ和S是倒数关系,1s = 1hz,1ms = 1000hz = 1khz,1μs = 10^6hz = 1Mhz 1ns = 10^9hz = 1000Mhz!!! 10ns = 1000/10 = 100Mhz, 20ns = 1000/20 = 50Mhz 

 答:上面的pipeline结构不正确 多个信号是需要同时有效的,但有的信号是在第一个cycle使用(如s0选择输出),而有的信号是在第二个cycle使用(如s1选择输出),很容易忘记对第二个周期使用的信号做pipe,会导致功能出错!!!——刚开始做pipeline最容易犯的错误!

2.几种方案的pipeline划分

如何判断电路pipeline是高效的?:去看每个时钟周期是否都在做有效的计算,没有间隔。

1.查表法

2.除法

3.穷举法——电路图和pipeline划分

 注意:减法电路900 800 700....是并行电路,都在减,9个减法器是并行运算,但是选择器存在优先级,先判断900。

 完整的电路结构,寄存器就插在虚线的地方,用于Pipeline划分

 脑海中对电路结构的大概认识:
1.千位有一个减法器,选出千位的bcd码和剩下的绝对值。
2.百位有9个并行的减法器,会同时进行减法运算,但通过10选1的优先级mux会选出百位的bcd码,并得到剩下的绝对值......(通过这里反推——代码判断if—else if,都会判断和执行里面的代码?——应该是DC工具进行了优化,使得电路更合理?)
因而有了电路结构的大概认识,coding才是自然而然的事情!

 5.仿真环境

6.RTL coding 和 仿真验证

7.江湖再见!——此课程笔记帖不再更新主要内容

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sean--Lu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值