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 ...
随机推荐
- iOS开发——网络实用技术OC篇&网络爬虫-使用青花瓷抓取网络数据
网络爬虫-使用青花瓷抓取网络数据 由于最近在研究网络爬虫相关技术,刚好看到一篇的的搬了过来! 望谅解..... 写本文的契机主要是前段时间有次用青花瓷抓包有一步忘了,在网上查了半天也没找到写的完整的教 ...
- 复杂 XML 的 序列化 反序列化
已知.xml(再此命名default.xml)文件,请将其反序列化到一个实例对象. <?xml version="1.0" encoding="utf-8" ...
- Oracle 11g系列:函数与存储过程
1.函数 Oracle中的函数分为两类:系统函数和自定义行数.对于自定义函数,函数的传入参数可以没有,如果有,一定要明确其数据类型.函数传入参数不能在函数内部进行修改.函数必须有返回值,并且返回值必须 ...
- CSS中如何实现未知尺寸图片垂直居中
在曾经的 淘宝UED 招聘 中有这样一道题目: “使用纯CSS实现未知尺寸的图片(但高宽都小于200px)在200px的正方形容器中水平和垂直居中.” 当然出题并不是随意,而是有其现实的原因,垂直居中 ...
- .NET面试题解析(02)-拆箱与装箱
系列文章目录地址: .NET面试题解析(00)-开篇来谈谈面试 & 系列文章索引 装箱和拆箱几乎是所有面试题中必考之一,看上去简单,就往往容易被忽视.其实它一点都不简单的,一个简单的问题也 ...
- 深入理解PHP内核(十三)类的结构和实现
原文链接:http://www.orlion.ga/1117/ 先看一下类的结构: struct _zend_class_entry { char type; // 类型:ZEND_ ...
- C#预处理器指令 ,你造吗??? (●'◡'●)
什么是c#预处理指令?? 用于在 C# 源代码中嵌入的编译器命令. C#预处理器指令有哪些?? ↓↓↓这些就是预处理器指令啦 下面我们一一道来(●'◡'●) 1.#if ,#elif,#else,en ...
- JavaScript作用域原理(三)——作用域根据函数划分
一.一个for实例 <p id="scope3" style="color:red"></p> var pscope3 = docume ...
- Spring MVC 学习总结(一)——MVC概要与环境配置
一.MVC概要 MVC是模型(Model).视图(View).控制器(Controller)的简写,是一种软件设计规范,用一种将业务逻辑.数据.显示分离的方法组织代码,MVC主要作用是降低了视图与业务 ...
- Anliven - 有效阅读的方法
讲方法,忌盲目. 阅读方法 做好眼前事 排除其他事项干扰,营造适合阅读的状态和环境,专注地投入阅读之中. 如果被一堆乱糟糟的事情烦扰,身心处于一个疲惫的状态,必然无法保持专注的阅读. 定性定量 每个人 ...