用户工具

站点工具


icore4tfpga_13

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
上一修订版 两侧同时换到之后的修订记录
icore4tfpga_13 [2020/03/17 14:43]
zgf 移除
icore4tfpga_13 [2024/04/10 10:55]
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- ​| ​ gingko ​ |  初次建立 ​ |  +|  V1.0  |  ​2020-03-02  ​| ​ gingko ​ |  初次建立 ​ |  
-===== 实验十三:有限状态机实验——一段式状态机描述 ​=====+ 
 +===== 实验十三:3-8译码器实验——FPGA实现3-8译码器 ​=====
  
 ==== 一、 实验目的与意义 ==== ==== 一、 实验目的与意义 ====
-  ​- 掌握一段式状态机描述方法。 + 
-  - 掌握宏定义、参数变量的使用方法。+  ​- 掌握3-8译码器原理。 
 +  - 掌握状态机的使用方法。
   - 掌握QuartusII的使用方法。   - 掌握QuartusII的使用方法。
 ==== 二、 实验设备及平台 ==== ==== 二、 实验设备及平台 ====
-  ​- iCore4T 双核心板。[[https://​item.taobao.com/​item.htm?​spm=a1z10.1-c.w137644-251734891.3.5923532fDrMDOe&​id=610595120319|点击购买]] + 
-  - Blaster(或相同功能)仿真器。[[https://​item.taobao.com/​item.htm?​id=554869837940|点击购买]]+  ​- iCore4T 双核心板。 
 +  - iTool A(或相同功能)仿真器。
   - Micro USB线缆。   - Micro USB线缆。
   - Keil MDK 开发平台。   - Keil MDK 开发平台。
行 21: 行 22:
 ==== 三、 实验原理 ==== ==== 三、 实验原理 ====
  
-  * 状态机是一种设计思想,通常由组合逻辑和寄存两部分组成。寄存器用于存储状态,组合逻辑完成状态译和产生输出信号。状态机组成有3各基本要素:状态、输入和输出。其中状态是用来划分逻辑顺序和时序规律的变;输入指的是状态机进入每个状态的条件;输出指是在某种状态下发生的事件。 +  * 译码逻辑功能是将每个输入的二进制代译成对应的输出高、低电平信号或另一个代码译码是编码反操作。根据输入和输出信号数量的关系译码器分为全译码器和部分译码器两类。 
-  * 描述状态机关键要描述清楚状态机三个要素即如何进行状态转移、每个状态的什么、状态转移条件是什么等。在Verilog硬件描述时状态机3常用的描述方法:一段式、二段式和三段式。 +  * 3-8译码器一种常见全译码器,输3位二进制代码8种组合,输出是与8种组合对应8输出信号。译器将每种二进制的代码译成对应的一根输出线上的高、低电平信号。其框图如图13.1所示 
-  * 一段式描述方法是将状态转移的组合逻辑和状态寄存器转移的时序逻辑写在一个always模块中。这种描述方法不符合Verilog将时序和组合逻辑分开描述代码风格,且整不够清晰,不利于代码维护和升级,同时,不利于附加约束,不利于设计的综和布局布线。 +{{ :​icore4t:​icore4t_fpga_7_1.png?​direct |图13.1}} 
-  * 本实验实验原理是通过硬件语言描述产生一个周期为3s的时间闸门信号,以该信号作为状态转移的触发信号来实现状态跳转,通过状态跳转改变led的亮灭+ 
 +  * 根据3-8译码器逻辑功能可知其逻辑真值表如表13.1所示 
 +  * **表13.1 3-8译码器逻辑真值表** 
 + 
 +|  输入 ​ |||  输出 ​ |||||||| 
 +|a2 |a1 |a0 |y7 |y6 |y5 |y4 |y3 |y2 |y1 |y0| 
 +|0 |0 |0 |0 |0 |0 |0 |0 |0 |0 |1| 
 +|0 |0 |1 |0 |0 |0 |0 |0 |0 |1 |0| 
 +|0 |1 |0 |0 |0 |0 |0 |0 |1 |0 |0| 
 +|0 |1 |1 |0 |0 |0 |0 |1 |0 |0 |0| 
 +|1 |0 |0 |0 |0 |0 |1 |0 |0 |0 |0| 
 +|1 |0 |1 |0 |0 |1 |0 |0 |0 |0 |0| 
 +|1 |1 |0 |0 |1 |0 |0 |0 |0 |0 |0| 
 +|1 |1 |1 |1 |0 |0 |0 |0 |0 |0 |0|
 ==== 四、 代码讲解 ==== ==== 四、 代码讲解 ====
-  ​* 本实验状态机的主要功能是通过状态切换实现led的闪烁,在state_idle状态,led为灭;程序开始运行后,动跳转到state_led_on状态点亮led;当3s间闸门打开,状态转移信号有效,状态跳转到state_led_off状态当3s时间闸门打开,状态转移信号有效状态跳转到state_led_on状态,以此循环实现led闪烁。其代码如下:+ 
 +  ​* 本实验首先通过内部程序自身产生输入信号a并设置一个20us的定器根据编码器的工作原理依次切换输入信号的值然后通过状态机根据逻辑真值表将输入信号译码成对应的输出信号,改变8根输出线上高低电平。其代码如下:
 <code verilog> <code verilog>
-//控制led亮灭的状态机 +/*************************************************
-//状态机流程上电复位后进入空闲状态,然后自动进入点亮led状态,当检测到时间闸门信号 +//利用状态机实现3-8译码器的输出信号输出译码信号与真值表一致 
-//​的高电平时,将状态切换至熄灭led状态,再次检测到时间闸门时切换至亮状态,如此循环。 +    reg [7:00]y_r;
-    reg led_r; +
-    reg [2:0]led_state;+
     ​     ​
     always@(posedge clk_25m or negedge rst_n)     always@(posedge clk_25m or negedge rst_n)
行 38: 行 51:
             if(!rst_n)             if(!rst_n)
                 begin                 begin
-                    ​led_r <= led_off; +                    ​y_r <= 8'​b000000000;
-                    led_state <= `state_idle;+
                 end                 end
             else             else
                 begin                 begin
-                    case(led_state+                    case(a
-                        ​`state_idle:begin +                        ​3'b000:begin 
-                            ​led_state ​<= `state_led_on;​ +                            ​y_r <= 8'​b00000001;
-                            led_r <= led_off;+
                         end                         end
-                        ​`state_led_on:begin +                        ​3'b001:begin 
-                            ​led_r <= led_on; +                            ​y_r <= 8'​b00000010;
-                            if(state_sig) +
-                                begin +
-                                    led_state <= `state_led_off;​ +
-                                end +
-                            else +
-                                begin +
-                                    led_state <= led_state;​ +
-                                end+
                         end                         end
-                        ​`state_led_off:begin +                        ​3'b010:begin 
-                            ​led_r <= led_off+                            ​y_r <= 8'​b00000100; 
-                            ​if(state_sig) +                        end 
-                                begin +                        3'​b011:​begin 
-                                    ​led_state ​<= `state_led_on+                            ​y_r <= 8'​b00001000;​ 
-                                end +                        end 
-                            ​else +                        3'​b100:​begin 
-                                begin +                            ​y_r ​<= 8'​b00010000
-                                    ​led_state ​<= led_state+                        end 
-                                end+                        3'​b101:​begin 
 +                            ​y_r <= 8'​b00100000;​ 
 +                        end 
 +                        3'​b110:​begin 
 +                            ​y_r ​<= 8'​b01000000
 +                        end 
 +                        3'​b111:​begin 
 +                            y_r <= 8'​b10000000;​ 
 +                        end                      
 +                        default:​begin 
 +                            y_r <= 8'​b000000000;​
                         end                         end
                     endcase                     endcase
                 end                 end
         end         end
 +
 +    assign y = y_r;
 </​code>​ </​code>​
 ==== 五、 实验步骤及实验结果 ==== ==== 五、 实验步骤及实验结果 ====
 +{{ :​icore4t:​icore4t_ide_1_37.jpg?​600 |图13.2}}
 +  - 将硬件正确连接,如图13.2所示。
 +  - 将编写好的代码进行编译,并下载到开发板中;
 +  - 通过Signaltap工具查看输入信号与输出信号之间的关系,观察实验现象——如图7.3所示。
 +{{ :​icore4t:​icore4t_fpga_7_3.png?​direct |图13.3}}
  
-  - 将硬件正确连接,如图8.1所示。 
-{{ :​icore4t:​icore4t_fpga_13_1.jpg?​direct |图13.1}} 
- 
-  - 将编写好的代码进行编译,并下载到开发板中; 
-  - 观察实验现象——FPGA_LED闪烁,间隔大约为3s; 
 ==== 六、 拓展实验 ==== ==== 六、 拓展实验 ====
  
-1、通过Signaltap采样状态机跳转信号及状态切换,观察信号变化。+  - 设计一个部分译码器(如:4-10译码器),观察信号变化。
  
icore4tfpga_13.txt · 最后更改: 2024/04/10 10:56 由 zhaowenzhe