实验课程

THIS NAME

实验课程

当前位置: 首页 >> 实验课程 >> 正文

Verilog HDL硬件描述语言-有限状态机设计

发布日期:2024-08-19    作者:张尔东     来源:     点击:

一、实验目的

1、掌握有限状态机的设计方法和注意事项

2、基于Verilog HDL语言应用状态机设计完成一个序列检测模块的设计

二、实验内容

基于Verilog HDL语言应用状态机设计完成一个序列检测模块的设计

三、实验原理

时序逻辑电路的设计核心在于如何在时钟控制下完成多种状态变化,由数字电路的知识可知,时序电路的变化会遵循状态转换图,把状态转换图变为代码模块就可以编写成有限状态机,所以要把时序电路设计得清楚明白,有限状态机的设计是一个基本功。

有限状态机适合设计程序复杂但具有一定规律的逻辑结构,有限状态机也常被缩写为FSMFinite State Machine)。在使用有限状态机进行电路设计时,设计者要先根据所设计的电路情况画好状态转换图,确认每个状态的输入/输出转换关系,然后依照状态机来编写代码。

本实验应用状态机设计完成一个序列检测模块。在通信过程中,经常需要检测某段固定的信号值,作为通信的某种状态标志,例如检测一个串行输入信号,当检测到输入信号出现101011”时,输出一个触发信号,表示检测到了序列信号。参考状态转换图如下所示。


四、实验设备与器件

安装QuartusII软件的PC

五、实验步骤

1设计编写功能模块

File→New Verilog HDL file输入编写好的程序另存为选择存储路径(注意路径不要含有中文)


1  File→New Verilog HDL file建立新程序编写文件

263CE


2  输入编写好的程序


3  另存为选择存储路径(注意路径不要含有中文,文件名一定要与模块名一致)

参考程序:

module ex8_3(clock,reset,x,z);

input clock,reset;

input x;

output z;

reg z;

 

reg[3:0] cstate,nstate;

 

parameter s0=4'd0,s1=4'd1,    

         s2=4'd2,s3=4'd3,

         s4=4'd4,s5=4'd5,

         s6=4'd6;

 

always @(posedge clock or posedge reset)    

begin

 if(reset)

   cstate<=s0;

 else

   cstate<=nstate;

end

 

always @(cstate or x)        

begin

 case(cstate)

 s0:begin        

      if(x==1)    //start

        nstate=s1;

      else

        nstate=s0;

    end

 s1:begin          //收到1

      if(x==0)

        nstate=s2;

      else

        nstate=s1;

    end

 s2:begin           //收到10

      if(x==1)

        nstate=s3;

      else

        nstate=s0;

    end

 s3:begin           //收到101

      if(x==0)

        nstate=s4;

      else

        nstate=s1;

    end

 s4:begin            //收到1010

      if(x==1)

        nstate=s5;

      else

       nstate=s0;

    end

 s5:begin               //收到10101

      if(x==1)

        nstate=s6;

      else

        nstate=s4;

    end

 s6:begin             //收到101011

      if(x==0)

        nstate=s0;

      else

        nstate=s1;

    end

  default:nstate=s0;

 endcase

end

 

always  @(nstate)  

if(nstate==s6)

  z=1;

else

  z=0;

endmodule

2建工程文件

保存后弹出对话框Do you want to create a new project with this file” →点击“是”Next设置路径、项目及顶层模块名称Next在弹出的对话框中单击File栏后的按钮,将编写好的Verilog程序加入此工程Next选择目标芯片(例:CycloneⅢ系列Ep3C55F4884C8NextEDA工具设置窗口Nextfinish


4  建立本设计项目工程文件next项目工程信息next


5  设置路径、项目及顶层模块名称Next  6  单击File栏后的按钮,添加Verilog程序Next


7  点击add按键将add.v文件添加入下面对话框中Next

 

8  选择目标芯片NextEDA工具设置窗口Nextfinish

3、编译验证(验证程序编写是否有错误)


9  点击编译按键进行编译

4、功能仿File→New vector waveform file保存


10  点击File→New vector waveform file保存,建立波形仿真文件


11  双击Name下方空白处弹出Insert Node or Bus对话框,点击Node Finder


12  点击List加载模块输入输出引脚OK


13  点击OK添加输入信号信息

5、添加输入信号信息


14  点击左侧工具栏添加输入信号信息

 


图15  点击Assignments→Settings…→将Timing改成Functional


15  点击ProcessingGenerate Functional Simulation Netlist网表文件生成成功



16  点击波形仿真按钮进行仿真

6、产生功能波形(参考波形如下)


上一条:光纤通信-光源的P-I特性测试实验 下一条:嵌入式Cortex-M应用-STM32的温室大棚系统实现

关闭