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 ...
随机推荐
- atitit.vod search doc.doc 点播系统搜索功能设计文档
atitit.vod search doc.doc 点播系统搜索功能设计文档 按键的enter事件1 Left rig事件1 Up down事件2 key_events.key_search = fu ...
- fir.im Weekly - Swift 3.0 的迁移适配指南
无论你是移动开发者,还是桌面端开发者,或者正在IoT领域探索的技术人员,那么应该更加关注 iDev 全平台开发者大会,也许是后半年 iOS 开发者最盛大的技术盛宴.既有知名公司带来专业视野,又有从 S ...
- linux命令 - export - 设置环境变量
linux命令 - export - 设置环境变量 功能说明:设置或显示环境变量. 语 法:export [-fnp][变量名称]=[变量设置值] 补充说明:在shell中执行程序时,shell会提供 ...
- 关于js中值的比较规则问题
上一篇文章提到了javascript中可变值与不可变值,如果你不知道什么是可变值和不可变值,可以先去看看那篇文章,再回来看这篇,因为这篇文章是基于可变值与不可变值讲解的. 那我就默认你知道什么是可变值 ...
- KlayGE 4.4中渲染的改进(二):DR的其他改进
转载请注明出处为KlayGE游戏引擎,本文的永久链接为http://www.klayge.org/?p=2749 上一篇讲了TBDR的实现,本篇继续讲解deferred rendering层的一些 ...
- OpenCascade Modeling Algorithms Boolean Operations
Modeling Algorithms Boolean Operations of Opencascade eryar@163.com 布尔操作(Boolean Operations)是通过两个形状( ...
- javase基础复习攻略《五》
总结完JAVA的基础语法和面向对象思想后,今天为大家补充一下JAVA中的数组,数组是什么呢?大家是不是想到了集合,数组和集合有相似之处,集合中的数据无序,不可以重复.数组中则存放着具有相同特征的一组数 ...
- 《Administrator's Guide》之Managing Memory
Automatic Memory Management 1. 如果要启动Automatic Memory Management,如何确定MEMORY_TARGET的值呢? 1> 在SQL*Plu ...
- radialLine 径向线生成器
radialLine 径向线生成器 使用默认的角度,半径访问器,和插值器函数构造一个 径向线生成器,返回的函数用以生成开放分段线性曲线.折线.它和line生成器很相似,只是将line的x,y访问其换位 ...
- spring学习遇到的问题汇总
1.spring注解路由方面的误解 我一直以为在web.xml中配置拦截*.action后,在注解路由的时候必须要xxxx.action. 刚才发现,访问的时候xxxx.action,然后@Reque ...