差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
乘法器 [2016/06/27 11:10] anran [流水灯] |
乘法器 [2021/09/28 09:28] (当前版本) gongyu |
||
---|---|---|---|
行 1: | 行 1: | ||
- | =====乘法器===== | + | ## 乘法器 |
+ | |||
+ | ### 1. 硬件平台 | ||
- | ====硬件平台==== | ||
- | ------ | ||
- [[STEP-MXO2第一代]] | - [[STEP-MXO2第一代]] | ||
- [[STEP-Baseboard]] | - [[STEP-Baseboard]] | ||
- | ====设计要求==== | + | ### 2. 设计要求 |
- | ------ | + | |
- | - 掌握任意数分频计数功能的设计 | + | |
- | - 掌握时序逻辑的设计 | + | |
- | - 掌握case的基本语法 | + | |
- | - 基于小脚丫STEP FPGA Base Board开发平台LED实现流水灯的功能,总计8个LED灯,循环、轮流点亮,每个LED点亮时间为1秒 | + | |
- | ====工作原理==== | + | - 掌握乘法器的工作原理 |
- | ------ | + | - 掌握组合逻辑的设计 |
+ | - 基于小脚丫STEP FPGA Base Board开发平台实现乘法器的设计 | ||
- | 本设计为流水灯实验,我们需要结合使用的硬件平台实现[[STEP-Baseboard]]平台上的8个LED循环闪烁,每个LED灯点亮时间为1秒。 | + | ### 3. 工作原理 |
- | LED也叫发光二极管,属于二极管的一种,具有二极管的单项导电性,使用时需要给LED上施加正向压差,产生电流(一般在20mA以内,具体参考设计中使用的LED的参数),点亮LED。本平台使用的8个LED都是通过低电平点亮(参照电路图),因此控制该LED的FPGA的IO管脚输出“1“(高电平)时LED灭,输出”0“(低电平)时LED亮。 | + | FPGA实现乘法器的设计可以有多种方法,可以设计为串行的和并行的: |
+ | * 串行乘法器:速度比较慢、时延大,完成同样位宽的乘法器资源占用最少。 | ||
+ | * 并行乘法器:相对串行乘法器,速度更快,时延小,需要更多的硬件资源。 | ||
- | 为了使一个循环周期内每个LED点亮1秒的时间,我们需要一个持续时间为1秒的低电平信号,这可以通过本硬件平台[[STEP-MXO2第一代]]上的25MHz主时钟得到,2^25 = 33554432 > 25000000,所以我们需要做一个位宽为25的计数器。计数器初值为0,当计数到24999999时,总共计数25000000,也就是1秒时间。 | + | 串行乘法器需要一个寄存器,每次时钟触发完成乘数中的一位与被乘数之间的运算,同时加入寄存器中,如此乘数的位宽是多少就需要至少多少个时钟的时延完成乘法器的运算。并行乘法器为了降低时延,需要乘数位宽中的每一位同时完成与被乘数之间的运算,这样就需要乘数位宽数个寄存器,然后将所有寄存器的值相加得到乘法结果。 |
- | 为了实现流水的效果,我们需要一个寄存器,寄存器的值不同控制着不同的LED点亮,而寄存器的值在每次计数器计数到24999999时改变,这样每隔1秒时间,寄存器的值改变,对应控制8个LED按照同一方向循环闪烁,就实现了流水灯的功能。 | ||
+ | ### 4. 硬件连接 | ||
- | ====硬件连接==== | + | 结合实验平台[[STEP-Baseboard]]的硬件配置,我们使用4路拨码开关表示乘数,4路按键开关表示被乘数,8个LED灯作为乘法器的输出 |
- | ------ | + | |
- | 结合实验平台[[STEP-Baseboard]]的硬件配置,我们使用8个LED灯作为流水灯的输出 | + | |
- | {{ :图10.LED模块电路连接.png |LED模块电路连接}} | + | {{:图11.拨码模块电路连接.png?500 |拨码模块电路连接}} |
+ | {{ :图10.LED模块电路连接.png?500|LED模块电路连接}} | ||
- | ====代码设计==== | + | {{:图9.按键模块电路连接.png?500|按键模块电路连接}} |
- | ---- | + | |
- | ===设计文件=== | + | |
+ | |||
+ | |||
+ | ### 5. 代码设计 | ||
+ | |||
+ | 设计文件 | ||
{{ :流水灯程序设计.jpg |流水灯程序设计}} | {{ :流水灯程序设计.jpg |流水灯程序设计}} | ||
行 89: | 行 91: | ||
</code> | </code> | ||
- | ===测试文件=== | + | 测试文件 |
测试文件中我们需要对设计文件中的参数CNT_NUM进行重新赋值 | 测试文件中我们需要对设计文件中的参数CNT_NUM进行重新赋值 | ||
行 108: | 行 110: | ||
^ 管脚名称 | clk_in| rst_n_in | led_out[0] |led_out[1] |led_out[2] |led_out[3] |led_out[4] |led_out[5] |led_out[6] |led_out[7] | | ^ 管脚名称 | clk_in| rst_n_in | led_out[0] |led_out[1] |led_out[2] |led_out[3] |led_out[4] |led_out[5] |led_out[6] |led_out[7] | | ||
^ FPGA管脚 | C1 | A2 |B14 |C14 |E14 |F14 |G14 |J14 |K14 |L14 | | ^ FPGA管脚 | C1 | A2 |B14 |C14 |E14 |F14 |G14 |J14 |K14 |L14 | | ||
- | ====仿真结果==== | + | |
+ | 仿真结果 | ||
{{:流水灯仿真.jpg|流水灯仿真}} | {{:流水灯仿真.jpg|流水灯仿真}} | ||
- | ====资源报告==== | + | |
+ | 资源报告 | ||
^ 资源 | 数量 | 比例 | 说明 | | ^ 资源 | 数量 | 比例 | 说明 | | ||
行 120: | 行 124: | ||
^ 时钟频率 | 25MHz | | | | ^ 时钟频率 | 25MHz | | | | ||
- | ====知识点==== | + | 知识点 |
* 分频设计 | * 分频设计 | ||
行 126: | 行 130: | ||
* 简单状态机 | * 简单状态机 | ||
- | + | 参考文档 | |
- | ====参考文档==== | + | |
* [[点亮led灯]] | * [[点亮led灯]] | ||
* {{:machxo2familydatasheet.pdf|Lattice MachXO2数据手册}} | * {{:machxo2familydatasheet.pdf|Lattice MachXO2数据手册}} | ||
- | ====相关文档==== | + | 相关文档 |
^ **文件名称** | **功能** | | ^ **文件名称** | **功能** | |