复杂 ALU
进阶功能
本章节属于拓展功能,其主要目的是给大家一个做一个简单的进阶参考。进阶实验的目的是锻炼大家的自学能力。因此对本章节内容的答疑可能不会被接受。特此声明。
简介
在本节中,我们将实现一个复杂的支持乘除法和浮点加减法的 ALU 作为 IP 核使用的例子。并使用 ILA 抓取运行时的信号。
具体行为如下:
- 按下
reset_btn
复位 - 在拨码开关上设置操作数 1,按下
push_btn
- 在拨码开关上设置操作数 2,按下
push_btn
- 在拨码开关上设置操作符,按下
push_btn
。操作符对应关系为
id | 操作 |
---|---|
0 | 乘法 |
1 | 除法 |
2 | 取余 |
3 | 浮点加法 |
4 | 浮点减法 |
- 在 led 灯上输出结果的后 16 位。
代码
内置了 ila 抓取状态机状态,各个部件的输出以及操作数状态。
云平台上 ILA 的使用
-
记录实验时板子对应的 IP 地址和端口号
-
点击 Open Target -> Open New Target
-
输入 IP 地址和端口号,一路点击 next / finish 连接实验板
-
正确连接后可以看到 ILA 的界面,单击“播放”抓取信号
可以看到抓取的对应信号的值
-
我们可以设置条件,单击加号添加触发条件:
假定我们想抓取 state 从 2 变为 3 的瞬间,则双击 state_reg 将其加入触发条件表。
触发条件
这里的工作逻辑是只要 ILA 发现条件满足就触发,而我们保证了当前 state_reg 不为 3,且 state_reg 只会由 2 变到 3,因此可以说这里是抓取 2 变到 3 的瞬间。同学们在自己使用的时候要想清楚触发条件实际在板子上是什么样的。
-
设置触发条件为
state_reg == 3
:ILA 的 Comparator
每一个触发条件都会使用一个 Comparator。也就是说例如希望触发条件是 state <= 3 && state >= 1,则需要使用两个 Comparator,我们在之前设置的 1 个 Comparator 的 ILA 在遇到这种条件时会告诉你无法进行该条件的触发。
-
按下 reset 重置状态机,之后按下“播放”。此时 ILA 会等待 state 变为 3.
-
进行实验至 state 变为 3
-
发现 ILA 抓取了 state 变为 3 的瞬间
-
下图中圈出的左侧为
Auto re-trigger
,表示将在满足条件时自动重新触发右侧按钮为条件,默认为 GLOBAL AND,即所有条件全部满足。可以改为 OR(至少满足一个条件),NAND(至少不满足一个条件),NOR(全部条件都不满足)。
以上就是 ILA 的基本使用方法了。