Verilog——三角波发生器(状态机)
最简单的状态机:三角波发生器
假设:
上升为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——三角波发生器(状态机)相关推荐
- verilog 状态机 case 三角波发生器 阻塞非阻塞赋值
阻塞.非阻塞赋值: 非阻塞赋值: 非阻塞赋值(non-blocking) 赋值语句(b<= a): 并未立刻被赋值,而是调度到事件队列中等待执行,这是非阻塞赋值的特点.b的值被赋成新值a的操作, ...
- (82)Verilog HDL:状态机二段式
(82)Verilog HDL:状态机二段式 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog HDL:状态机二段式 5)结语 1.2 FPGA简介 FPG ...
- (81)Verilog HDL:状态机一段式
(81)Verilog HDL:状态机一段式 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog HDL:状态机一段式 5)结语 1.2 FPGA简介 FPG ...
- 三角波发生器电路图分析
目录 三角波发生器电路图分析 积分电路: 负反馈回路 比较电路: 编辑 三角波发生器电路图分析
- Verilog 三角波
//三角波发生器 `timescale 1ns/10ps module tri_gen(clk,res,d_out); input clk,res; output d_out;reg state; r ...
- system verilog 三段式状态机和interface
1.结构体和C语言类似,system verilog定义的package,也是一个sv文件,需要被工程当作文件一样添加.如果是inclue的文件,要在工程中设置搜索路径,否则在引用时要用相对工程启动文 ...
- 【FPGA】Verilog语言通过状态机实现可乐机系统
目录 一.实验概述 二.模块框图 三.状态转移图 四.波形图 1.时钟与复位信号 2.投币信号 3.投币记录信号 4.状态变量信号 5.输出信号 五.代码部分 1.Verilog代码 2.tb仿真代码 ...
- matlab三角波发生器精度改为定点型,关于matlab simulink中三角波模块的问题!
问题描述: 关于matlab simulink中三角波模块的问题! 为什么我把时间参数换一下,产生的三角波会越来越乱,最后干脆不产生了? 1个回答 分类: 综合 2014-11-20 问题解答: 我来 ...
- Verilog语法_5(状态机、modelsim自动化仿真高级部分和后仿真)
September 23, 2016 作者:dengshuai_super 出处:http://blog.csdn.net/dengshuai_super/article/details/526393 ...
- Verilog学习脚印3-简单状态机(三角波)
Verilog学习脚印3-简单状态机(三角波) 附:verilog语法笔记(持续更新ing) 目录 bash命令 实例1:三角波发生器 电路原理(来自B站-北交李金城老师的PPT,侵删) 代码实现与验 ...
最新文章
- 一句话懂什么是JS闭包
- SpringMvc+AngularJS通过CORS实现跨域方案
- 十行Python代码搞定图片中的物体检测
- mysql改密码脚本_mysql密码修改脚本
- 充分利用UC berkeleys数据科学专业
- 微软发布Enterprise Library 4.1和Unity 1.2
- pytorch 矩阵相乘_深度学习 — — PyTorch入门(三)
- Android开发问题集锦-Button初始为disable状态时自定义的selector不生效问题
- android代码查找图像,Android平台上利用opencv进行图像的边沿检测
- docker之快速部署gogs git
- [转载] python3 字符串比较函数_python3 字符串操作相关函数
- MPICH2在WINDOWS下的安装配置
- 【持续更新】最小生成树题目集合
- windows上jupyter notebook主题背景、字体及扩展插件配置(集成vim环境)
- Raki的读paper小记:Rational LAMOL: A Rationale-Based Lifelong Learning Framework
- 转载--游戏引擎开发之路
- jmeter进行http压力测试(图文小教程)
- 通俗易懂spring之singleton和prototype
- 1月16日服务器例行维护更新公告,1月16日9—11点例行更新维护公告
- 平时用来调试的日记打印源码