Verilog学习笔记简单功能实现(五)...............序列检测设计
这里采用夏宇闻教授第十五章的序列检测为例来学习;


从以上的状态转换图可以写出状态机的程序:
module seqdet(x,out,clk,rst);
input x,clk,rst;
output out;
reg [:]state;
wire out;
parameter IDLE='b0,
A='d1,
B='d2,
C='d3,
D='d4,
E='d5,
F='d6,
G='d7;
assign out=(state==D&&x==)?:;
always @(posedge clk or negedge rst)
begin
if(!rst)
state=IDLE;
else
case(state)
IDLE:if(x==) state<=A;
else state<=IDLE;
A:if(x==) state<=B;
else state<=A;
B:if(x==) state<=C;
else state<=F;
C:if(x==) state<=D;
else state<=G;
D:if(x==) state<=E;
else state<=A;
E:if(x==) state<=C;
else state<=A;
F:if(x==) state<=B;
else state<=A;
G:if(x==) state<=F;
else state<=G;
default: state<=IDLE;
endcase end
endmodule
以下是测试模块:
`timescale 1ns/1ns
`define halfperiod module testseqdet;
reg clk,rst;
reg [:]data;
wire out,x;
assign x=data[];
initial begin
clk=;
rst=;
# rst=;
# rst=;
data='b1100_1001_0000_1001_0100;
end
always #(`halfperiod) clk=~clk;
always @(posedge clk)
begin
# data={data[:],data[]};
end
seqdet m(.x(x),.out(out),.clk(clk),.rst(rst));
endmodule
其实这里也可以采用六个状态来实现功能:
1 module seqdet(x,out,clk,rst,state);
2 input x,clk,rst;
3 output out;
4 output [2:0]state;
5 reg [2:0]state;
6 wire out;
7 parameter IDLE=3'd0,
8 A=3'd1,
9 B=3'd2,
10 C=3'd3,
11 D=3'd4,
12 E=3'd5;
13 assign out=(state==D&&x==0)?1:0;
14 always @(posedge clk)
15 begin
16 if(!rst) state<=IDLE;
17 else
18 case(state)
19 IDLE:if(x==1) state<=A;
20 else state<=IDLE;
21 A:if(x==0) state<=B;
22 else state<=A;
23 B:if(x==0) state<=C;
24 else state<=A;
25 C:if(x==1) state<=D;
26 else state<=IDLE;
27 D:if(x==0) state<=E;
28 else state<=A;
29 E:if(x==0) state<=C;
30 else state<=A;
31 default: state<=IDLE;
32 endcase
33 end
34 endmodule
以下是测试模块:
`timescale 1ns/1ns
module test_seqdet;
reg clk,rst;
reg [:]data;
wire [:]state;
wire x,out;
assign x=data[];
initial
begin
clk=;
rst=;
# rst=;
# rst=;
data='b1100_1001_0000_1001_0100;
end always # clk=~clk;
always @(posedge clk)
begin
data={data[:],data[]};
end
seqdet m(.x(x),.clk(clk),.rst(rst),.out(out),.state(state));
endmodule

module seqdet
(
input wire x,
input wire clk,
input wire rst,
output wire z,
output reg [:] q
); wire [:] q_next; assign q_next ={q[:],x};
assign z = (q_next== 'b10010) ? 1'b1:'b0; always @ (posedge clk,negedge rst)
if(!rst)
q <= 'd0;
else
q <= q_next; endmodule
寄存器的实现参照http://www.cnblogs.com/qiweiwang/archive/2011/04/18/2019952.html ,在这里感谢齐威王!
Verilog学习笔记简单功能实现(五)...............序列检测设计的更多相关文章
- Verilog学习笔记简单功能实现(二)...............全加器
先以一位全加器为例:Xi.Yi代表两个加数,Cin是地位进位信号,Cout是向高位的进位信号.列表有: Xi Yi Cin Sum Cout 0 0 0 0 0 0 0 1 1 0 ...
- Verilog学习笔记简单功能实现(八)...............同步FIFO
Part 1,功能定义: 用16*8 RAM实现一个同步先进先出(FIFO)队列设计.由写使能端控制该数据流的写入FIFO,并由读使能控制FIFO中数据的读出.写入和读出的操作(高电平有效)由时钟的上 ...
- Verilog学习笔记简单功能实现(六)...............计数分频电路
在分频器电路中最重要的概念有两个:1)奇分频/偶分频:2)占空比. A)其中最简单的就是二分频电路,占空比为50%,其Verilog程序为 module half_clk(clr,clk_in,clk ...
- Verilog学习笔记简单功能实现(三)...............同步有限状态机
在Verilog中可以采用多种方法来描述有限状态机最常见的方法就是用always和case语句.如下图所示的状态转移图就表示了一个简单的有限状态机: 图中:图表示了一个四状态的状态机,输入为A和Res ...
- Verilog学习笔记简单功能实现(四)...............译码器和编码器
这里以简单的3-8译码器和8-3编码器为例: module decoder3_8(a,out); :]a; :]out; 'b1<<a;/*把最低位的1左移in位(根据in口输入的值)并赋 ...
- Verilog学习笔记简单功能实现(一)...............D触发器
module D_flop(data,clk,clr,q,qb); input data,clk,clr; output q,qb; wire a,b,c,d,e,f,ndata,nclk; nand ...
- Verilog学习笔记简单功能实现(八)...............异步FIFO
基本原理: 1.读写指针的工作原理 写指针:总是指向下一个将要被写入的单元,复位时,指向第1个单元(编号为0). 读指针:总是指向当前要被读出的数据,复位时,指向第1个单元(编号为0). ...
- Verilog学习笔记简单功能实现(七)...............接口设计(并行输入串行输出)
利用状态机实现比较复杂的接口设计: 这是一个将并行数据转换为串行输出的变换器,利用双向总线输出.这是由EEPROM读写器的缩减得到的,首先对I2C总线特征介绍: I2C总线(inter integra ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十五章:第一人称摄像机和动态索引
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十五章:第一人称摄像机和动态索引 代码工程地址: https://g ...
随机推荐
- Jquery判断页面图片是否加载失败,加载失败则显示默认图片
例子: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3. ...
- javascript_core_08之闭包、对象、原型
1.闭包: ①外层函数包裹受保护的变量和操作变量的内层函数: ②外层函数将内层函数返回到外部: ③调用外部函数,获得内层函数的对象: 2.面向对象:用对象描述现实一个具体事物属性和功能,按需调用功能, ...
- html_02之表单、其它
1.表单属性action:处理表单数据服务器端处理程序地址,默认提交本页: 2.表单属性method:①get:明文,数据显示地址栏,长度<2KB,向服务器请求数据时使用:②post:密文,提交 ...
- zabbix 3.0 安装 ubuntu环境
zabbix 3.0 安装 标签(空格分隔): 开发 [TOC] 下载deb # wget http://repo.zabbix.com/zabbix/3.0/ubuntu/pool/main/z/z ...
- 不同场景下 MySQL 的迁移方案
一 目录 一 目录 二 为什么要迁移 三 MySQL 迁移方案概览 四 MySQL 迁移实战 4.1 场景一 一主一从结构迁移从库 4.2 场景二 一主一从结构迁移指定库 4.3 场景三 一主一从结构 ...
- 【WP开发】WebView控件应用要点
WebView控件我就不多作详细的介绍,相信大家都懂的,就算你没用过,你看他的名字和长相都知道它的用途了.就是用来显示HTML内容的. 在WP 8.1的Runtime App中,这个控件大致有以下几个 ...
- Ext1.X的CheckboxSelectionModel默认全选之后不允许编辑的BUG解决方案
Ext1.X的CheckboxSelectionModel默认全选之后不允许编辑的BUG解决方案,ext 的CheckboxSelectionModel在后台默认选中之后,前台就不允许编辑的bug是存 ...
- Unity3D协同程序(Coroutine)
摘要下: 1. coroutine, 中文翻译"协程".这个概念可能有点冷门,不过百度之,说是一种很古老的编程模型了,以前的操作系统里进程调度里用到过,现在操作系统的进程调度都是根 ...
- spring源码分析之spring-core asm概述
ASM是什么? ASM is an all purpose Java bytecode manipulation and analysis framework. It can be used to m ...
- Spring MVC 学习总结(一)——MVC概要与环境配置
一.MVC概要 MVC是模型(Model).视图(View).控制器(Controller)的简写,是一种软件设计规范,用一种将业务逻辑.数据.显示分离的方法组织代码,MVC主要作用是降低了视图与业务 ...