zoukankan      html  css  js  c++  java
  • 习题8 #第8章 Verilog有限状态机设计-2 #Verilog #Quartus #modelsim

    2. 设计一个“1001”串行数据检测器,其输入、输出如下:

        输入x:000 101 010 010 011 101 001 110 101

        输出z:000 000 000 010 010 000 001 000 000

     (1)设计思路:同前,规划状态,无它。

    (2)1001序列检测电路源码:

     1 //detect 1001
     2 //2020-10-13 
     3 // by YongFengXie
     4 module ex8_2(clk,rst_n,x,z);
     5 input clk;
     6 input rst_n;
     7 input x;
     8 output reg z;
     9 
    10 reg [4:0] state;
    11 
    12 parameter s0=5'b00001,
    13           s1=5'b00010,
    14           s2=5'b00100,
    15           s3=5'b01000,
    16           s4=5'b10000;
    17 
    18 always @(posedge clk or negedge rst_n)
    19 begin
    20   if(!rst_n)
    21     begin
    22       state<=s0;
    23       z<=1'b0;
    24     end
    25   else
    26     case(state)
    27       s0:begin
    28            if(x==1'b0)       //0
    29              begin
    30                state<=s0;
    31                z<=1'b0;
    32              end
    33            else             //1
    34              begin
    35                state<=s1;
    36                z<=1'b0;
    37              end
    38          end
    39       s1:begin
    40            if(x==1'b0)     //10
    41              begin
    42                state<=s2;
    43                z<=1'b0;
    44              end
    45            else            //11
    46              begin
    47                state<=s1;
    48                z<=1'b0;
    49              end
    50          end
    51        s2:begin
    52            if(x==1'b0)    //100
    53              begin
    54                state<=s3;
    55                z<=1'b0;
    56              end
    57            else           //101
    58              begin
    59                state<=s1;
    60                z<=1'b0;
    61              end
    62          end
    63        s3:begin
    64            if(x==1'b0)    //1000
    65              begin
    66                state<=s0;
    67                z<=1'b0;
    68              end
    69            else           //1001
    70              begin
    71                state<=s4;
    72                z<=1'b1;
    73              end
    74          end
    75        s4:begin
    76            if(x==1'b0)    //10010
    77              begin
    78                state<=s2;
    79                z<=1'b0;
    80              end
    81            else           //10011
    82              begin
    83                state<=s1;
    84                z<=1'b0;
    85              end
    86          end
    87        default:begin
    88                  state<=s0;
    89                  z<=1'b0;
    90                end
    91      endcase
    92 end
    93 
    94 endmodule

    (3) 1001序列检测电路测试代码:

     1 //ex8_2 testbench
     2 //2020-10-13 
     3 // by YongFengXie
     4 `timescale 1ns/1ns
     5 module ex8_2tb;
     6 reg clk;
     7 reg rst_n;
     8 reg x;
     9 wire z;
    10 
    11 ex8_2 ut(clk,rst_n,x,z);
    12 
    13 initial begin
    14           clk=1'b0;
    15           rst_n=1'b0;
    16           x=1'b0;
    17           #40 rst_n=1'b1;
    18           #10 x=1'b0;
    19           #10 x=1'b0; //000
    20           #10 x=1'b1;
    21           #10 x=1'b0;
    22           #10 x=1'b1; //000
    23           #10 x=1'b0;
    24           #10 x=1'b1;
    25           #10 x=1'b0; //010
    26           #10 x=1'b0;
    27           #10 x=1'b1;
    28           #10 x=1'b0; //010
    29           #10 x=1'b0;
    30           #10 x=1'b1;
    31           #10 x=1'b1; //011
    32           #10 x=1'b1;
    33           #10 x=1'b0;
    34           #10 x=1'b1; //101
    35           #10 x=1'b0;
    36           #10 x=1'b0;
    37           #10 x=1'b1; //001
    38           #10 x=1'b1;
    39           #10 x=1'b1;
    40           #10 x=1'b0; //110
    41           #10 x=1'b1;
    42           #10 x=1'b0;
    43           #10 x=1'b1; //101
    44           #300 $stop;
    45         end
    46 
    47 always #5 clk=~clk;
    48 
    49 endmodule

    (4) 1001序列检测电路的仿真结果如图ex8_2_1所示:

                图ex8_2_1 1001序列检测电路仿真结果

    (5) 1001序列检测电路的状态转换如图ex8_2_2所示:

                           图ex8_2_2 1001序列检测电路状态转换图

    (6)总结:跟习题8.1相比,无它,唯手熟尔。

  • 相关阅读:
    .net core入门
    编码之Base64编码
    C++ 实现十大排序算法
    C++11 智能指针
    Object Pool 对象池的C++11使用(转)
    mac pro 1.5T内存是如何实现的
    Linux C/C++开发
    mac Chrome 快捷键
    C++11多线程
    Java项目压力测试(待补)
  • 原文地址:https://www.cnblogs.com/halflife/p/13811053.html
Copyright © 2011-2022 走看看