最简单的状态机:三角波发生器

假设:

上升为0状态,下降为1状态

在0状态:计数器进行加一操作,加到299为止。

在1状态:计数器进行减一操作,减到1为止。

Verilog代码:使用case语句

`timescale 1ns/10ps//testbench测试代码用的时间单位//上面没有看到输入端口,但是这是时序电路,所以有时钟和复位端口,clk和resmodule tri_gen(clk,res,d_out);
input               clk;
input               res;
output[8:0] d_out;//到299,256八位,则299要九位reg               state;//主状态机寄存器,这里只有两个状态1,0,1个比特
reg[8:0]          d_out;always@(posedge clk or negedge res)
if(~res)beginstate<=0;d_out<=0;//复位
end
else begincase(state)//状态机用case语句0://上升begind_out<=d_out+1;if(d_out==299)beginstate<=1;//跳转到状态2endend1://下降begind_out<=d_out-1;if(d_out==1)beginstate<=0;//跳转到状态1endendendcase
endendmodule

testbench测试代码

//---------testbench of tri_gen---
module tri_gen_tb;
reg             clk,res;
wire[8:0]       d_out;
tri_gen U1(.clk(clk),.res(res),.d_out(d_out));initial beginclk<=0;res<=0;#17         res<=1;#8000    $stop;
endalways #5 clk<=~clk;endmodule

如果是梯形波:三个状态,上升,平顶,下降,需要修改case语句。

注意state的位数。

如果state状态全用了,不用default,否则要用。

module tri_gen(clk,res,d_out);
input               clk;
input               res;
output[8:0] d_out;//到299,256八位,则299要九位reg[1:0]         state;//主状态机寄存器,此时有三个状态。如果需要加其他状态,注意寄存器的位数
reg[8:0]         d_out;reg[7:0]     con;//计数器,记录平顶周期always@(posedge clk or negedge res)
if(~res)beginstate<=0;d_out<=0;con<=0;
end
else begincase(state)//状态机用case语句0://上升begind_out<=d_out+1;if(d_out==299)beginstate<=1;endend1://平顶;begin if(con==200)beginstate<=2;    con<=0;endelse begincon<=con+1;endend2://下降begind_out<=d_out-1;if(d_out==1)beginstate<=0;endenddefault://其他未定义的状态beginstate<=0;con<=0;d_out<=0;endendcase
endendmodule

四个状态:上升,平顶,下降,平顶

case(state)//状态机用case语句0://上升begind_out<=d_out+1;if(d_out==299)beginstate<=1;//状态1(上升)跳到状态2(平顶)endend1://平顶;begin  if(con==200)beginstate<=2;    //状态2(平顶)跳到状态3(下降)con<=0;endelse begincon<=con+1;endend2://下降begind_out<=d_out-1;if(d_out==1)beginstate<=3;    //状态3(下降)跳到状态4(平顶)endend3://平顶beginif(con==200)beginstate<=0;   //状态4(平顶)跳到状态1(上升)con<=0;endelse begincon<=con+1;endendendcase

Verilog——三角波发生器(状态机)相关推荐

  1. verilog 状态机 case 三角波发生器 阻塞非阻塞赋值

    阻塞.非阻塞赋值: 非阻塞赋值: 非阻塞赋值(non-blocking) 赋值语句(b<= a): 并未立刻被赋值,而是调度到事件队列中等待执行,这是非阻塞赋值的特点.b的值被赋成新值a的操作, ...

  2. (82)Verilog HDL:状态机二段式

    (82)Verilog HDL:状态机二段式 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog HDL:状态机二段式 5)结语 1.2 FPGA简介 FPG ...

  3. (81)Verilog HDL:状态机一段式

    (81)Verilog HDL:状态机一段式 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog HDL:状态机一段式 5)结语 1.2 FPGA简介 FPG ...

  4. 三角波发生器电路图分析

    目录 三角波发生器电路图分析 积分电路: 负反馈回路 比较电路: ​编辑 三角波发生器电路图分析

  5. Verilog 三角波

    //三角波发生器 `timescale 1ns/10ps module tri_gen(clk,res,d_out); input clk,res; output d_out;reg state; r ...

  6. system verilog 三段式状态机和interface

    1.结构体和C语言类似,system verilog定义的package,也是一个sv文件,需要被工程当作文件一样添加.如果是inclue的文件,要在工程中设置搜索路径,否则在引用时要用相对工程启动文 ...

  7. 【FPGA】Verilog语言通过状态机实现可乐机系统

    目录 一.实验概述 二.模块框图 三.状态转移图 四.波形图 1.时钟与复位信号 2.投币信号 3.投币记录信号 4.状态变量信号 5.输出信号 五.代码部分 1.Verilog代码 2.tb仿真代码 ...

  8. matlab三角波发生器精度改为定点型,关于matlab simulink中三角波模块的问题!

    问题描述: 关于matlab simulink中三角波模块的问题! 为什么我把时间参数换一下,产生的三角波会越来越乱,最后干脆不产生了? 1个回答 分类: 综合 2014-11-20 问题解答: 我来 ...

  9. Verilog语法_5(状态机、modelsim自动化仿真高级部分和后仿真)

    September 23, 2016 作者:dengshuai_super 出处:http://blog.csdn.net/dengshuai_super/article/details/526393 ...

  10. Verilog学习脚印3-简单状态机(三角波)

    Verilog学习脚印3-简单状态机(三角波) 附:verilog语法笔记(持续更新ing) 目录 bash命令 实例1:三角波发生器 电路原理(来自B站-北交李金城老师的PPT,侵删) 代码实现与验 ...

最新文章

  1. 一句话懂什么是JS闭包
  2. SpringMvc+AngularJS通过CORS实现跨域方案
  3. 十行Python代码搞定图片中的物体检测
  4. mysql改密码脚本_mysql密码修改脚本
  5. 充分利用UC berkeleys数据科学专业
  6. 微软发布Enterprise Library 4.1和Unity 1.2
  7. pytorch 矩阵相乘_深度学习 — — PyTorch入门(三)
  8. Android开发问题集锦-Button初始为disable状态时自定义的selector不生效问题
  9. android代码查找图像,Android平台上利用opencv进行图像的边沿检测
  10. docker之快速部署gogs git
  11. [转载] python3 字符串比较函数_python3 字符串操作相关函数
  12. MPICH2在WINDOWS下的安装配置
  13. 【持续更新】最小生成树题目集合
  14. windows上jupyter notebook主题背景、字体及扩展插件配置(集成vim环境)
  15. Raki的读paper小记:Rational LAMOL: A Rationale-Based Lifelong Learning Framework
  16. 转载--游戏引擎开发之路
  17. jmeter进行http压力测试(图文小教程)
  18. 通俗易懂spring之singleton和prototype
  19. 1月16日服务器例行维护更新公告,1月16日9—11点例行更新维护公告
  20. 平时用来调试的日记打印源码

热门文章

  1. 【微信篇】电脑版微信的照片视频文件位置变化
  2. 如何修改织梦后台登陆界面
  3. 火狐浏览器打印网页不全_火狐浏览器网页显示不全
  4. 网络通信——下载管理器DownloadManager——利用POST方式上传文件
  5. direct在计算机网络中是什么意思,DX11是什么 DX11(DirectX 11)是什么意思?
  6. 02 | 从神经元说起:结构篇
  7. 如何用Airtest脚本切换手机的输入法
  8. 熵增定律:为什么熵增理论让好多人一下子顿悟了
  9. Android自定义View之绘制圆形头像
  10. 02 SpringBoot入门程序剖析之各种稀奇古怪的starter