Verilog实现“111”检测器与“01110”检测器的设计

使用Quartus+modelsim完成本次设计

文章目录

  • Verilog实现“111”检测器与“01110”检测器的设计
    • 1. "111"检测器
      • 分析
      • 代码实现
      • Testbench
      • 结果
    • 2. "01110"检测器
      • 分析
      • 代码实现
      • Testbench
      • 结果

1. "111"检测器

分析

分析题目,得到其有限状态机为下图:

代码实现

module detector111(input X,input rst,input clk,output OUT
);reg [1:0]state;reg [1:0]next_state;parameter S0=2'd0,S1=2'd1,S2=2'd2,S3=2'd3;assign OUT = (state==S3)?1:0;         //define OUT=1 when S3 statealways @ (posedge clk or posedge rst) if (rst)state  <=  S0;elsestate  <=  next_state;always@(*)case(state)S0:if(X) next_state <= S1;else    next_state <= S0;S1:if(X)   next_state <= S2;else  next_state <= S0;S2:if(X)    next_state <= S3;else   next_state <= S0;S3:if(X) next_state <= S3;else  next_state <= S0;default: next_state <= S0;endcaseendmodule

Testbench

`timescale 1 ns/ 1 ns
module detector111_vlg_tst();
reg X;
reg clk;
reg rst;
wire OUT;detector111 i1 (.OUT(OUT),.X(X),.clk(clk),.rst(rst)
);always #10 clk = ~clk;initial                                                begin                                                  rst = 1;clk = 0;#10 rst = 0; #20 X = 1;#20 X = 0;#20 X = 1;#20 X = 1;#20 X = 1;#20 X = 1;#20 X = 0;#20 X = 1;#20 X = 0;#20 X = 1;#20 X = 1;#20 X = 1;#20 X = 1;#20 $stop;end             initial $monitor($time,"X=%b,OUT=%b",X,OUT);
endmodule

结果

Modelsim结果如下图所示,分析可知实现了题目要求。

逻辑综合出来的电路如下图所示:即只有S3状态才会输出OUT=1。

其中的state的状态机如下图所示(RLT viewer中所示),可见其与分析中绘制的状态机一致。


2. "01110"检测器

分析

题目中关键点为一下几点:

  • 检测01110,且他们不重叠。意思为要求检测到一个01110,然后从一个新的开始检测。
  • 同时输入AB,那么考虑A和B哪个是01110的开始标志
  • Z输出的是一个时钟周期宽度的高电平脉冲,所以要在always里进行赋值

根据题目绘制状态机如下图所示,其中S0表示01110中的0,以此类推,特别注意S1表示第一位是1即没有意义。其中输出为1即检测出01110的状态用红色标出


如果要测试所有情况,那么就是讲detector01110模块中的所有case模块都遍历到,及遍历以下所有情况,需要修改的只有testbench。而如果遍历所有情况,通过分析知道,每次AB的状态为2bit数,可以理解为4种前进的方向,然后一共5个状态,那么要遍历的次数为4^5=1024种情况,遍历即可。

         case(state)S0:case({A,B})4'b00:state<=S0;4'b01:state<=S01;4'b10:state<=S0;4'b11:state<=S011;endcaseS01:case({A,B})4'b00:state<=S0;4'b01:state<=S01;4'b10:state<=S0;4'b11:state<=S0111;endcase       S011:case({A,B})4'b00:state<=S0;4'b01:state<=S01;4'b10:state<=S1;4'b11:state<=S1;endcase            S0111:case({A,B})4'b00:state<=S0;4'b01:state<=S01;4'b10:state<=S0;4'b11:state<=S1;endcaseS1:case({A,B})4'b00:state<=S0;4'b01:state<=S01;4'b10:state<=S0;4'b11:state<=S1;endcase

代码实现

module detector01110(input clk,input clr,input A,input B,output reg Z
);reg [3:0]state;parameter  S0 = 4'b0,S01 = 4'b01,S011 = 4'b011,S0111 = 4'b0111,S1 = 4'b10;//S1 is random because S01 has already existedalways@(posedge clk or negedge clr)beginif(!clr) begin state <= S0;Z<=0;        end //for {A,B}=4'b00;else beginZ = (state==S011&{A,B}==4'b10 | state==S0111&A==4'b0)?1:0;case(state)S0:case({A,B})4'b00:state<=S0;4'b01:state<=S01;4'b10:state<=S0;4'b11:state<=S011;endcaseS01:case({A,B})4'b00:state<=S0;4'b01:state<=S01;4'b10:state<=S0;4'b11:state<=S0111;endcase        S011:case({A,B})4'b00:state<=S0;4'b01:state<=S01;4'b10:state<=S1;4'b11:state<=S1;endcase            S0111:case({A,B})4'b00:state<=S0;4'b01:state<=S01;4'b10:state<=S0;4'b11:state<=S1;endcaseS1:case({A,B})4'b00:state<=S0;4'b01:state<=S01;4'b10:state<=S0;4'b11:state<=S1;endcase     endcase     end end
endmodule

Testbench

`timescale 1 ns/ 1 ns
module detector01110_vlg_tst();
reg A;
reg B;
reg clk;
reg clr;
// wires
wire Z;detector01110 ins1 (
// port map - connection between master ports and signals/registers   .A(A),.B(B),.Z(Z),.clk(clk),.clr(clr)
);always #10 clk = ~clk;integer i0;integer i1;integer i2;integer i3;integer i4;//5 layers circulation//4^5=1024initial                                                begin                                                  clr = 0;clk = 0;{A,B} = 4'b00;#15 clr = 1; for(i0=0;i0<4;i0=i0+1)begin#20 {A,B} = i0;for(i1=0;i1<4;i1=i1+1)begin#20 {A,B} = i1;for(i2=0;i2<4;i2=i2+1)begin #20 {A,B} = i2;for(i3=0;i3<4;i3=i3+1)begin#20 {A,B} = i3;for(i4=0;i4<4;i4=i4+1)#20 {A,B} = i4;end     end end end                 #50 $stop;end           initial $monitor($time,"Z=%b",Z);
endmodule

结果

Modelsim仿真结果如下所示,经分析与预期一致

逻辑综合后的结果如下图所示:

state里的状态机如下图所示,符合预期:

Verilog设计“111”检测器与“01110”检测器并测试所有情况相关推荐

  1. 基于色度或其他彩色属性设计一个简单的肤色检测器

    要求:肤色检测 基于色度或其它彩色属性设计一个简单的肤色检测器. 用手机自拍一张人脸图像. 剪切照片或另外用画笔工具拾取那些可能是肤色的像素(人脸部位). 对这些肤色像素计算彩色分布,如彩色直方图.( ...

  2. Verilog设计实例(8)按键防抖设计之软件防抖

    博文目录 写在前面 正文 背景介绍及回顾 单个按键 单按键的其他设计版本 多个按键 写在最后 参考资料 交个朋友 写在前面 个人微信公众号: FPGA LAB 个人博客首页 注:学习交流使用! 正文 ...

  3. 维特比译码器的Verilog设计(一)----维特比译码原理

    维特比译码器的Verilog设计(一)----维特比译码原理 关于维特比译码 1.编码过程中的状态转移和网格图表示 2.最大似然译码思路 3.硬判决与软判决路径度量 4.译码过程 5.总结 近期由于需 ...

  4. Verilog设计实例(3)基于Verilog的单端口同步读写RAM设计

    文章目录 写在前面 正文 电路设计 行为仿真 交个朋友 写在前面 为什么要写单端口同步读写RAM呢? 没有那么多为什么?就是因为简单.基础,能清晰说明单端口RAM的原理,顺手给出设计,也能说明你的设计 ...

  5. Verilog设计实例(2)一步一步实现一个多功能通用计数器

    博文目录 写在前面 正文 普通的二进制计数器 电路设计 行为仿真 普通的格雷码计数器 电路设计 行为仿真 LFSR 电路设计 行为仿真 多功能计数器 电路设计 行为仿真 生成语句实现方式 电路设计 行 ...

  6. FPGA学习之路—应用程序—基于Verilog设计单总线8位ALU

    FPGA学习之路--基于Verilog设计单总线8位ALU 定义 ALU(arithmetic and logic unit) 算术逻辑单元,简称ALU,是计算机的数学运算核心,也就是负责运算的组件, ...

  7. 堆栈verilog设计实现及仿真

    堆栈顶层模块设计代码如下: 使用verilog设计实现堆栈的写入和读出功能 工程及仿真如下: 代码设计如下: module stack(input wire clk, reset, push, pop ...

  8. (101)FPGA面试题-Verilog设计偶校验位

    1.1 FPGA面试题-Verilog设计偶校验位 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题-Verilog设计偶校验位: 5)结束语. 1.1.2 ...

  9. (96)FPGA面试题-Verilog设计半加器

    1.1 FPGA面试题-Verilog设计半加器 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题-Verilog设计半加器: 5)结束语. 1.1.2 本 ...

最新文章

  1. c语言输出几个空格,新人提问:如何将输出时每行最后一个空格删除
  2. 用Kotlin开发android平台语音识别,语义理解应用(olamisdk)
  3. 用指针来表示二维数组的方法
  4. (Metro学习三)图片uri保存到本地图片库
  5. pycharm中出现pytest_在 pycharm 里通过 pytest 运行用例,控制台没有输出日志信息
  6. C++:18---函数模板(template)
  7. 定时器中断实验 编写程序使定时器0或者定时器1工作在方式2,自动重装载模式,定时500ms使两位数码管从00、01、02……98、99每间隔500ms加1显示。
  8. CTS(1)---谷歌CTS测试简介
  9. 做程序员要有“疯子精神”,中国开源开放的科创人才要如何培养?
  10. 干货整理!10个Python图像处理工具,入门必看,提效大法 | 资源
  11. C# WinForm开发系列 - Regular Expression
  12. python histogram函数_python (ploit2)(histogram)
  13. cocos creator实现读取白鹭movieClip组件(尝试)
  14. 成都拓嘉辰丰电商:如何处理拼多多物流服务异常
  15. 【叮咚买菜】叮咚抢菜使用教程
  16. 中国房地产泡沫规模巨大将载入历史 面临崩溃风险
  17. ENVI高光谱分析操作步骤
  18. excal怎么设置模板阈值
  19. python编程入门视频教程-PYTHON编程从0到1(视频教学版)
  20. 华师大 OJ 2822

热门文章

  1. windows vscode安装boost后undefined reference to `ontop_fcontext‘
  2. 小区物业信息管理系统c语言,小区信息管理系统.doc
  3. a标签target=”_blank”的安全问题及解决办法
  4. Java 正则表达式工具类大全
  5. iOS各种调试技巧豪华套餐
  6. ubuntu 3D 快捷键
  7. 发泄键盘?养生鼠标?这届程序员这么过双12!
  8. 《超越平凡的平面设计: 版式设计原理与应用》—字母部件
  9. loadimage没有与参数列表匹配的重载函数 解决方案
  10. java安装及运行环境配置