这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 后一修订版 两侧同时换到之后的修订记录 | ||
icore4tfpga_10 [2020/03/17 14:19] zgf 移除 |
icore4tfpga_10 [2024/04/10 11:04] zhaowenzhe [二、 实验设备及平台] |
||
---|---|---|---|
行 1: | 行 1: | ||
+ | |||
| **银杏科技有限公司旗下技术文档发布平台** |||| | | **银杏科技有限公司旗下技术文档发布平台** |||| | ||
|技术支持电话|**0379-69926675-801**||| | |技术支持电话|**0379-69926675-801**||| | ||
|技术支持邮件|Gingko@vip.163.com||| | |技术支持邮件|Gingko@vip.163.com||| | ||
- | |技术论坛|http://www.eeschool.org||| | ||
^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | ^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | ||
- | | V1.0 | 2019-02-25 | gingko | 初次建立 | | + | | V1.0 | 2019-02-1 | gingko | 初次建立 | |
- | + | ===== 实验十:有限状态机实验——一段式状态机描述 ===== | |
- | + | ||
- | ===== 实验十一:乘法器实验——乘法器使用 ===== | + | |
==== 一、 实验目的与意义 ==== | ==== 一、 实验目的与意义 ==== | ||
- | - 了解乘法器。 | + | - 掌握一段式状态机的描述方法。 |
- | - 掌握乘法器的使用方法。 | + | - 掌握宏定义、参数变量的使用方法。 |
- | - 掌握 QuartusII 集成开发环境使用方法。 | + | - 掌握QuartusII的使用方法。 |
==== 二、 实验设备及平台 ==== | ==== 二、 实验设备及平台 ==== | ||
- | - iCore4t 双核心板。[[https://item.taobao.com/item.htm?spm=a1z10.1-c.w137644-251734891.3.5923532fDrMDOe&id=610595120319|点击购买]] | + | - iCore4T 双核心板。 |
- | - Blaster(或相同功能)仿真器。[[https://item.taobao.com/item.htm?id=554869837940|点击购买]] | + | - iTool A(或相同功能)仿真器。 |
- | - MicroUSB 线缆。 | + | - USB Type C 线缆。 |
- | - QuartusII 开发平台。 | + | - Keil MDK 开发平台。 |
- | - 装有 WINXP(及更高版本)系统的计算机。 | + | - Quartus开发平台。 |
+ | - 电脑一台。 | ||
==== 三、 实验原理 ==== | ==== 三、 实验原理 ==== | ||
- | * 通过 FPGA 的一个 I/O 口连接 LED;设定 I/O 为输出模式。内部乘法器完成乘法计算后 改变输出 LED 的状态(红色 LED 闪烁)。 | + | * 状态机是一种设计思想,通常由组合逻辑和寄存器两部分组成。寄存器用于存储状态,组合逻辑完成状态译码和产生输出信号。状态机的组成有3各基本要素:状态、输入和输出。其中状态是用来划分逻辑顺序和时序规律的变量;输入指的是状态机进入每个状态的条件;输出指的是在某种状态下发生的事件。 |
- | ==== 四、 实验步骤 ==== | + | * 描述状态机关键是要描述清楚状态机的三个要素,即如何进行状态转移、每个状态的输出是什么、状态转移的条件是什么等。在Verilog硬件描述时,状态机有3种常用的描述方法:一段式、二段式和三段式。 |
- | + | * 一段式描述方法是将状态转移的组合逻辑和状态寄存器转移的时序逻辑写在一个always模块中。这种描述方法不符合Verilog将时序和组合逻辑分开描述的代码风格,且整个代码不够清晰,不利于代码维护和升级,同时,不利于附加约束,不利于设计的综合和布局布线。 | |
- | 1、建立工程,并新建 MULT.v 文件。打开 Tool->MegawizardPlug-In Manager。 | + | * 本实验的实验原理是通过硬件语言描述产生一个周期为3s的时间闸门信号,以该信号作为状态转移的触发信号来实现状态跳转,通过状态跳转改变led的亮灭。 |
- | {{ :icore3:icore3_fpga_11_1.png?direct |图1}} | + | ==== 四、 代码讲解 ==== |
- | 2、直接点第一个新建 MULT,点击 Next。 | + | * 本实验状态机的主要功能是通过状态切换实现led的闪烁,在state_idle状态,led为灭;程序开始运行后,自动跳转到state_led_on状态,点亮led;当3s时间闸门打开,状态转移信号有效,状态跳转到state_led_off状态;当3s时间闸门打开,状态转移信号有效,状态跳转到state_led_on状态,以此循环实现led的闪烁。其代码如下: |
- | {{ :icore3:icore3_fpga_11_2.png?direct |图2}} | + | <code verilog> |
- | 3、在左侧的栏里 Arithmetic 文件夹下找到并选中 LPM_MULT,在框 1 处选择 Verilog HDL,再点击框 2 中按钮选择文件存放目录,然后点击图中 Next。 | + | //控制led亮灭的状态机 |
- | {{ :icore3:icore3_fpga_11_3.png?direct |图3}} | + | //状态机流程,上电复位后进入空闲状态,然后自动进入点亮led状态,当检测到时间闸门信号 |
- | 4、框 1 处选择乘法器输入数据的宽度,此处以 8 位宽度为例,然后点击 Next。 | + | //的高电平时,将状态切换至熄灭led状态,再次检测到时间闸门时切换至亮状态,如此循环。 |
- | {{ :icore3:icore3_fpga_11_4.png?direct |图4}} | + | reg led_r; |
- | 5、接下来几页保持默认设置直接点击 Next,最后点击 Finish 即可。 | + | reg [2:0]led_state; |
- | {{ :icore3:icore3_fpga_11_5.png?direct |图5}} | + | |
- | {{ :icore3:icore3_fpga_11_6.png?direct |图6}} | + | always@(posedge clk_25m or negedge rst_n) |
- | 6、接着把代码写进工程,分配引脚(使用接到排针的引脚,避免跟其他芯片引脚信号 冲突烧坏芯片),编译即可。 7、 打开逻辑分析仪将输出信号加入波形列表观察波形信号是否正确。 | + | begin |
- | + | if(!rst_n) | |
- | ==== 五、 实验现象 ==== | + | begin |
+ | led_r <= led_off; | ||
+ | led_state <= `state_idle; | ||
+ | end | ||
+ | else | ||
+ | begin | ||
+ | case(led_state) | ||
+ | `state_idle:begin | ||
+ | led_state <= `state_led_on; | ||
+ | led_r <= led_off; | ||
+ | end | ||
+ | `state_led_on:begin | ||
+ | led_r <= led_on; | ||
+ | if(state_sig) | ||
+ | begin | ||
+ | led_state <= `state_led_off; | ||
+ | end | ||
+ | else | ||
+ | begin | ||
+ | led_state <= led_state; | ||
+ | end | ||
+ | end | ||
+ | `state_led_off:begin | ||
+ | led_r <= led_off; | ||
+ | if(state_sig) | ||
+ | begin | ||
+ | led_state <= `state_led_on; | ||
+ | end | ||
+ | else | ||
+ | begin | ||
+ | led_state <= led_state; | ||
+ | end | ||
+ | end | ||
+ | endcase | ||
+ | end | ||
+ | end | ||
+ | </code> | ||
+ | ==== 五、 实验步骤及实验结果 ==== | ||
+ | {{ :icore4t:icore4t_fpga_13_1.jpg?direct |图13.1}} | ||
+ | - 将硬件正确连接,如图10.1所示。 | ||
+ | - 将编写好的代码进行编译,并下载到开发板中; | ||
+ | - 观察实验现象——FPGA_LED闪烁,间隔大约为3s; | ||
+ | ==== 六、 拓展实验 ==== | ||
- | * 打开逻辑分析仪,添加乘法器输入输出波形信号查看波形,可以看到输出波形数据等于 输入波形数据的乘积(因为采样时钟比较小,逻辑分析仪采样时间稍微有点长,耐心等待一会儿),此外,外部现象表现为红色 LED 闪烁。 | + | 1、通过Signaltap采样状态机跳转信号及状态切换,观察信号变化。 |